/* Small additions used by the server-rendered PHP port. The main visual language
   remains the compiled Grok stylesheet in plass.css. */
[hidden]{display:none!important}
.shadow-soft{box-shadow:var(--shadow-soft)}
.shadow-lift{box-shadow:var(--shadow-lift)}
.cal-striped{background-image:repeating-linear-gradient(135deg,rgba(92,103,115,.08) 0,rgba(92,103,115,.08) 6px,transparent 6px,transparent 12px)}
.grid-cols-16{grid-template-columns:repeat(16,minmax(0,1fr))}
.php-scrollbar{scrollbar-width:thin;scrollbar-color:#cbd4dc transparent}
.php-scrollbar::-webkit-scrollbar{height:8px;width:8px}.php-scrollbar::-webkit-scrollbar-thumb{background:#cbd4dc;border-radius:999px}
[data-qr] canvas{display:block;width:100%!important;height:100%!important;image-rendering:pixelated}
.finance-canvas{min-height:16rem}
@media (max-width:767px){.school-calendar-lane{min-width:860px}}
@media print{.php-no-print{display:none!important}.php-print-reset{max-width:none!important;padding:0!important}body{background:#fff!important}}

/* Staff / Lily literal component pass */
[data-staff-map] iframe{filter:saturate(.62) contrast(.90) brightness(.72)}
[data-you-dot]{transition:left .45s ease,top .45s ease}
[data-geofence-ring]{transition:width .25s ease,height .25s ease}
.staff-pulse{animation:staffPulse 2.4s ease-in-out infinite}
@keyframes staffPulse{0%,100%{box-shadow:0 0 0 0 rgba(47,111,237,.25)}50%{box-shadow:0 0 0 14px rgba(47,111,237,0)}}
@media print{[data-command],[data-live-wrap],nav,aside,.php-no-print{display:none!important}}

/* Hirer / public literal component pass */
.disabled\:opacity-50:disabled{opacity:.5}
.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}
.php-invoice-backdrop{z-index:70;background:rgba(7,24,39,.45)}
.php-invoice-stage{height:92svh}
@media (min-width:640px){.php-invoice-stage{height:86svh}}
@media print{.php-invoice-backdrop{position:static!important;background:transparent!important}.php-invoice-stage{height:auto!important;max-width:none!important}}

/* Read-only preview consistency. Controls stay visible so the product can be reviewed,
   but JavaScript blocks every POST before it leaves the browser. Explicitly sensitive
   controls may still opt out with data-preview-mutation. */
.portal-preview [data-preview-mutation]{display:none!important}
.portal-preview form[method="post"]{position:relative}

/* Live-review fixes */
.staff-map-copy{text-shadow:0 1px 2px rgba(0,0,0,.30)}
.staff-week-chevron,.ticket-chevron{transition:transform .18s ease}
.staff-week-more[open] .staff-week-chevron{transform:rotate(90deg)}
details[open]>summary .ticket-chevron{transform:rotate(90deg)}
.ops-person-profile input,.ops-person-profile select,.ops-person-profile textarea{min-width:0}

.cursor-not-allowed{cursor:not-allowed}
