/* Production Hardening — loaded last on purpose.
   Fixes touch ergonomics, viewport/safe-area behavior, overlay containment and auth usability. */
:root{--hard-touch:44px}
html,body{min-height:100%;overscroll-behavior:none}
#app-shell{height:100dvh;min-height:100svh}
.mobile-only{display:none!important}
button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}
button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid #b99c5d;outline-offset:2px}

/* Search must retain its centering transform. A generic view animation previously replaced it. */
@keyframes hard-overlay-fade{from{opacity:.94}to{opacity:1}}
.search-panel:not(.hidden),.settings-panel:not(.hidden){animation:hard-overlay-fade .1s ease-out both!important}
.search-panel{left:50%!important;transform:translateX(-50%)!important;max-width:calc(100vw - 28px)}
.settings-panel{max-width:calc(100vw - 28px)}

/* Desktop/tablet controls should never be micro-targets. */
.timeline-open,.hint-reveal,.related-evidence button,.movement-ledger-row button,
.statement-change header button,.corroboration-chip,.audio-note-current,.media-note-button,
.inspector-compare-button,.quiet-button,.filter-button,.notebook-tab{min-height:36px}
.audio-marker{width:36px!important;margin-left:-18px!important;background:transparent!important;border:0!important;top:-4px!important;bottom:-5px!important}
.audio-marker::before{content:"";position:absolute;left:calc(50% - .5px);top:0;bottom:0;width:1px;background:#b29a64}
.audio-marker::after{left:calc(50% - 3.5px)!important}
.audio-marker span{left:calc(50% + 5px)!important}

/* Auth is a true viewport-safe dialog, not a fixed card that can disappear behind keyboards. */
.auth-modal{padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));overflow:auto;overscroll-behavior:contain}
.auth-modal__dialog{max-height:calc(100dvh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));overflow:auto}
.auth-modal__close{width:44px;height:44px;top:10px;right:10px}
.auth-primary-btn,.auth-secondary-btn,.auth-danger-btn,.auth-link-btn,.share-btn,.auth-share-trigger-btn{min-height:44px}
.auth-form input{min-height:44px}

/* Prevent native iOS text-field zoom. */
@supports (-webkit-touch-callout:none){
  .auth-form input,.puzzle-answer input,.notebook-page input,.notebook-page textarea,.notebook-page select,
  .connection-form textarea,.working-assessment textarea,.annotation-box,.search-input-wrap input{font-size:16px!important}
}

/* Keep fixed UI out of iOS/Android system areas. */
.topbar{padding-top:env(safe-area-inset-top)}
.mobile-bottom-nav{padding-bottom:env(safe-area-inset-bottom)}
.document-mobile-actions{padding-bottom:env(safe-area-inset-bottom)}
.pass5-more-sheet{padding-bottom:calc(18px + env(safe-area-inset-bottom))}
.media-panel,.compare-panel,.document-modal{padding-bottom:env(safe-area-inset-bottom)}

@media (pointer:coarse){
  .timeline-open,.hint-reveal,.related-evidence button,.movement-ledger-row button,
  .statement-change header button,.corroboration-chip,.audio-note-current,.media-note-button,
  .inspector-compare-button,.quiet-button,.filter-button,.notebook-tab,.suspect-status-select,
  .audio-event-row,.audio-transcript-row,.audio-jump,.audio-primary-controls .audio-play{min-height:var(--hard-touch)!important}
  .audio-marker{width:44px!important;margin-left:-22px!important}
}

@media (max-width:760px), (pointer:coarse) and (max-width:980px) and (max-height:520px){
  .mobile-only{display:inline-grid!important}
  #app-shell{height:100dvh;grid-template-rows:calc(56px + env(safe-area-inset-top)) minmax(0,1fr)}
  .topbar{height:calc(56px + env(safe-area-inset-top));padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right))}
  .workspace{padding-bottom:calc(var(--p5-bottom-nav,70px) + 20px + env(safe-area-inset-bottom))!important}
  .mobile-bottom-nav{height:calc(var(--p5-bottom-nav,70px) + env(safe-area-inset-bottom));padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}
  .search-panel{top:calc(56px + env(safe-area-inset-top));left:0!important;right:0!important;transform:none!important;width:100%!important;max-width:none!important;max-height:calc(100dvh - 56px - env(safe-area-inset-top) - env(safe-area-inset-bottom))!important}
  .settings-panel{top:calc(56px + env(safe-area-inset-top));left:7px;right:7px;width:auto!important;max-width:none!important;max-height:calc(100dvh - 70px - env(safe-area-inset-top) - env(safe-area-inset-bottom));overflow:auto}
  .search-panel__header,.settings-panel__header{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}
  .timeline-open,.hint-reveal,.related-evidence button,.movement-ledger-row button,.statement-change header button{display:inline-flex;align-items:center;padding:8px 7px!important;line-height:1.25}
  .dossier-jumpbar button{min-height:44px!important}
  .inspector-status-label select{min-height:44px;font-size:.7rem}
  .audio-review-controls select,.audio-note-current{min-height:44px!important}
  .document-mobile-actions{height:calc(66px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom)}
  .auth-modal{align-items:flex-start}
  .auth-modal__dialog{margin:auto 0;max-width:520px;overflow:auto}
  .auth-kicker{font-size:.55rem}.auth-form label span{font-size:.58rem}.auth-hint{font-size:.68rem}
}

/* A touch phone in landscape remains a mobile investigation workspace. */
@media (pointer:coarse) and (max-width:980px) and (max-height:520px){
  .sidebar{position:absolute!important;transform:translateX(-102%)!important}
  .sidebar.open{transform:translateX(0)!important}
  .workspace-grid{grid-template-columns:1fr!important}
  .pass5-mobile-context{display:grid!important}
  .mobile-bottom-nav{display:grid!important}
}

body.high-contrast .auth-modal__dialog{border-color:#fff}
body.high-contrast .auth-form input{border-color:#fff;color:#fff}
body.reduced-motion .auth-modal__dialog,body.reduced-motion .search-panel,body.reduced-motion .settings-panel{animation:none!important;transition:none!important}
@media (max-width:760px), (pointer:coarse) and (max-width:980px) and (max-height:520px){
  .investigator-badge-btn{width:40px;height:40px;min-width:40px;padding:0;justify-content:center;border-radius:3px}
  .investigator-badge-btn .badge-text{display:none}
  .investigator-badge-btn .badge-icon{font-size:1rem}
}
