/* Bynzo Final QA · Production hardening
   Presentation/accessibility-only release layer. No route, action, role, permission, API or payment contract changes. */
:root{
  --qa-ring:0 0 0 3px rgba(8,123,115,.16);
  --qa-danger:#a84d47;
  --qa-muted:#708489;
}

/* Long real-world values must never break cards, tables or modals. */
:where(.panel,.metric,.professional-card,.detail-card,.modal,.toast,.form-note,.history-list,.sensitive-cell,.file-links,.service-card,.package-card){min-width:0}
:where(.panel,.metric,.professional-card,.detail-card,.modal,.toast,.form-note,.history-list,.sensitive-cell,.file-links,td,small,p,strong,b,a){overflow-wrap:anywhere}
:where(code,pre){white-space:pre-wrap;overflow-wrap:anywhere}

/* Clear disabled/busy feedback without changing submit logic. */
:where(button,input,select,textarea):disabled,
:where(button,[role="button"])[aria-disabled="true"]{
  opacity:.56!important;
  cursor:not-allowed!important;
  filter:saturate(.65)!important;
  box-shadow:none!important;
}
button:disabled:active{transform:none!important}

/* Consistent keyboard and browser-validation feedback. */
:where(input,select,textarea):user-invalid{border-color:#d39792!important;box-shadow:0 0 0 3px rgba(168,77,71,.08)!important}
:where(input,select,textarea):user-valid:not(:placeholder-shown){border-color:#a9ccc4}
:where(a,button,summary,input,select,textarea):focus-visible{outline:2px solid transparent;outline-offset:2px;box-shadow:var(--qa-ring)!important}

/* Empty / loading / error states remain calm but unmistakable. */
.page-loader{min-height:clamp(280px,58vh,650px)}
.page-loader p{max-width:420px;text-align:center;line-height:1.55}
.panel.empty{min-height:190px;padding:34px 24px}
.panel.empty:before{content:"!";color:var(--qa-danger);border-color:#ecd1ce;background:#fff5f4}
.panel.empty h2{max-width:620px;line-height:1.25}
.panel.empty p{max-width:640px;line-height:1.6}
.panel.empty .primary-btn{margin-top:5px}
.empty:not(.panel){line-height:1.55}

/* Authentication/recovery feedback is visible only when there is a message. */
.form-error:empty{display:none}
.form-error:not(:empty){display:block;margin-top:12px;padding:10px 12px;border:1px solid #ead7d4;border-radius:10px;background:#fff7f6;color:#8e4d48;line-height:1.55}

/* Dense operational actions should wrap instead of clipping. */
.row-actions,.file-links{flex-wrap:wrap}
.row-actions>*{max-width:100%}
.table-scroll td .row-btn,.table-scroll td .primary-btn{white-space:normal;text-align:center}

/* A small horizontal-scroll cue for genuinely wide mobile tables. */
@media(max-width:760px){
  .table-panel:has(.table-scroll){position:relative}
  .table-panel:has(.table-scroll)::after{content:"Swipe table horizontally →";display:block;padding:7px 13px 10px;color:#829397;font-size:10px;letter-spacing:.01em;background:#fbfcfc;border-top:1px solid #edf2f0}
  .table-scroll{scroll-padding-inline:12px}
  .table-scroll:focus-visible{box-shadow:inset 0 0 0 2px rgba(8,123,115,.14)}
  .toast{overflow-wrap:anywhere}
}

/* Short-height devices: keep navigation and sheets usable. */
@media(max-height:700px) and (max-width:900px){
  .sidebar{padding-top:max(10px,var(--p9-safe-top));padding-bottom:max(8px,var(--p9-safe-bottom))}
  .brand{padding-bottom:12px}
  .nav-label{padding-top:6px}
  .nav-item{margin-block:1px}
  .modal{max-height:calc(100dvh - var(--p9-safe-top))}
  .modal-body{max-height:calc(100dvh - 132px - var(--p9-safe-top) - var(--p9-safe-bottom));overflow:auto}
}

/* Landscape phone: preserve working canvas without hiding critical controls. */
@media(max-height:520px) and (orientation:landscape){
  .topbar{position:sticky}
  .app-content{padding-top:12px}
  .modal-backdrop{align-items:stretch}
  .modal{max-height:100dvh;border-radius:0}
  .login-panel{padding-block:14px}
  .login-card{margin:auto}
}

/* Windows High Contrast / forced colors fallback. */
@media(forced-colors:active){
  :where(.panel,.metric,.professional-card,.detail-card,.modal,.service-card,.package-card,.status,input,select,textarea,button,a){forced-color-adjust:auto}
  .status:before{background:CanvasText}
  .page-loader span{border-color:GrayText;border-top-color:Highlight}
  .mobile-scrim{background:CanvasText}
}

/* Printing is intentionally quiet; useful for operational review without changing invoice PDF generation. */
@media print{
  .sidebar,.topbar,.mobile-scrim,.toast-region,.modal-backdrop,.page-head .actions,.toolbar button,.row-actions,.row-btn,.primary-btn,.secondary-btn,.ghost-btn,.quick-add{display:none!important}
  .main{margin:0!important}
  .app-content{max-width:none!important;padding:0!important}
  body{background:#fff!important;color:#000!important}
  :where(.panel,.metric,.professional-card,.detail-card,.table-panel){box-shadow:none!important;border-color:#bbb!important;break-inside:avoid}
  .table-scroll{overflow:visible!important}
  table{min-width:0!important;font-size:9pt}
  a{color:inherit!important;text-decoration:none!important}
}
