@font-face{font-family:'ITC Avant Garde Gothic';src:url('avant-garde.otf') format('opentype');font-weight:400;font-style:normal;font-display:swap}
:root{--sage:#7BA68A;--sage-dark:#4E7A5E;--sage-light:#C4DDCC;--sage-mist:#EDF5F0;--warm:#C9956B;--warm-dark:#A47245;--warm-light:#E8D4C0;--warm-mist:#FBF5EF;--gray-dark:#3B3F3C;--gray-mid:#6B7570;--gray-light:#A3AEA7;--border:#D4DDD7;--cream:#FAFCFA;--white:#FFFFFF;--red:#D96B6B;--amber:#D4A843;--green:#7BA68A;--blue:#6B93B5}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'DM Sans',sans-serif;background:#E4EBE6;min-height:100vh;color:var(--gray-dark)}
.screen{display:none}.screen.active{display:block}
.top-bar{background:var(--sage-dark);padding:14px 32px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100}
.top-bar-title{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:300;font-style:italic;color:white}
.top-bar-sub{font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--sage-light);margin-left:12px}
.top-bar-practice{font-size:14px;font-weight:500;color:white;margin-left:16px;padding-left:16px;border-left:1px solid var(--sage-light);opacity:.92}
.top-bar-actions{display:flex;gap:10px;align-items:center}
.btn{font-family:'DM Sans',sans-serif;font-size:12px;font-weight:600;border:none;border-radius:6px;padding:8px 18px;cursor:pointer;transition:all 0.15s;letter-spacing:0.3px}
.btn-primary{background:var(--warm);color:white}.btn-primary:hover{background:var(--warm-dark)}
.btn-secondary{background:rgba(255,255,255,0.15);color:white;border:1px solid rgba(255,255,255,0.25)}.btn-secondary:hover{background:rgba(255,255,255,0.25)}
.btn-ghost{background:transparent;color:var(--sage-dark);border:1px solid var(--border)}.btn-ghost:hover{background:var(--sage-mist)}
.btn-danger{background:transparent;color:var(--red);border:1px solid var(--red);font-size:11px;padding:5px 12px}.btn-danger:hover{background:#fdf0ef}
.folder-bar{background:var(--sage-mist);border-bottom:1px solid var(--border);padding:8px 32px;font-size:11px;color:var(--gray-mid);display:flex;align-items:center;gap:8px}
.folder-bar .dot{width:8px;height:8px;border-radius:50%;background:var(--gray-light);flex-shrink:0}.folder-bar .dot.connected{background:var(--sage)}
.manager-body{max-width:960px;margin:0 auto;padding:28px 24px}
.manager-toolbar{display:flex;gap:12px;align-items:center;margin-bottom:16px}
.search-input{flex:1;border:1px solid var(--border);border-radius:6px;padding:8px 14px;font-family:'DM Sans',sans-serif;font-size:13px;outline:none;color:var(--gray-dark);background:white}
.search-input:focus{border-color:var(--sage)}
.search-input::placeholder{color:var(--gray-light)}
.empty-state{text-align:center;padding:60px 20px;color:var(--gray-mid)}
.empty-state h2{font-family:'Cormorant Garamond',serif;font-weight:300;font-size:28px;margin-bottom:10px;color:var(--gray-dark)}
.empty-state p{font-size:13px;margin-bottom:24px;line-height:1.6}
/* Goal 1.5 PR-2 — dual sign-in card (variant B) + set-password overlay. */
.lr-auth-card{max-width:380px;margin:0 auto;background:var(--cream);border:1px solid var(--border);border-radius:12px;padding:32px 28px;text-align:left;box-shadow:0 2px 14px rgba(59,63,60,0.06)}
.lr-auth-title{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:28px;color:var(--gray-dark);margin:0 0 4px;text-align:center}
.lr-auth-sub{font-size:13px;color:var(--gray-mid);text-align:center;margin:0 0 22px}
.lr-auth-field{margin-bottom:14px}
.lr-auth-label{display:block;font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:1.4px;text-transform:uppercase;color:var(--gray-mid);margin-bottom:5px}
.lr-auth-input{width:100%;box-sizing:border-box;border:1px solid var(--border);border-radius:6px;padding:11px 12px;font-family:'DM Sans',sans-serif;font-size:14px;color:var(--gray-dark);background:var(--white);outline:none}
.lr-auth-input:focus{border-color:var(--sage);box-shadow:0 0 0 3px var(--sage-mist)}
.lr-auth-error{color:var(--red);font-size:12.5px;margin:2px 0 12px;line-height:1.45}
.lr-auth-error.is-note{color:var(--sage-dark)}
.lr-auth-primary{width:100%;padding:12px;font-size:13px;margin-top:6px}
.lr-auth-divider{display:flex;align-items:center;text-align:center;color:var(--gray-light);font-size:11px;margin:18px 0}
.lr-auth-divider::before,.lr-auth-divider::after{content:"";flex:1;border-top:1px solid var(--border)}
.lr-auth-divider span{padding:0 12px}
.lr-auth-google{width:100%;padding:11px;font-size:13px;background:var(--white);color:var(--sage-dark);border:1px solid var(--sage)}
.lr-auth-google:hover{background:var(--sage-mist)}
.lr-auth-link{display:block;width:100%;background:none;border:none;color:var(--sage-dark);font-family:'DM Sans',sans-serif;font-size:12.5px;cursor:pointer;margin-top:14px;text-align:center}
.lr-auth-link:hover{text-decoration:underline}
.lr-auth-foot{font-size:11px;color:var(--gray-light);line-height:1.5;margin:18px 0 0;text-align:center}
.lr-sp-overlay{position:fixed;inset:0;z-index:10000;background:#E4EBE6;display:flex;align-items:center;justify-content:center;padding:20px;font-family:'DM Sans',sans-serif;overflow:auto}
.lr-sp-card{max-width:400px;width:100%;background:var(--cream);border:1px solid var(--border);border-radius:12px;padding:34px 30px;box-shadow:0 2px 18px rgba(59,63,60,0.08)}
.lr-sp-label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:1.6px;text-transform:uppercase;color:var(--warm-dark);text-align:center;margin-bottom:8px}
.lr-sp-title{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:26px;color:var(--gray-dark);text-align:center;margin:0 0 6px}
.lr-sp-sub{font-size:13px;color:var(--gray-mid);text-align:center;line-height:1.5;margin:0 0 22px}
.lr-sp-flabel{display:block;font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:1.4px;text-transform:uppercase;color:var(--gray-mid);margin:0 0 5px}
.lr-sp-input{width:100%;box-sizing:border-box;border:1px solid var(--border);border-radius:6px;padding:11px 12px;font-family:'DM Sans',sans-serif;font-size:14px;color:var(--gray-dark);background:var(--white);outline:none;margin-bottom:14px}
.lr-sp-input:focus{border-color:var(--sage);box-shadow:0 0 0 3px var(--sage-mist)}
.lr-sp-error{color:var(--red);font-size:12.5px;margin:0 0 12px;line-height:1.45}
.lr-sp-primary{width:100%;padding:12px;font-size:13px}
@media (max-width:480px){.lr-auth-card,.lr-sp-card{padding:24px 18px}.lr-auth-input,.lr-sp-input,.lr-auth-primary,.lr-auth-google,.lr-sp-primary{min-height:44px}}
.patient-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.patient-card{background:white;border:1px solid var(--border);border-radius:10px;padding:18px;cursor:pointer;transition:all 0.15s;position:relative}
.patient-card:hover{border-color:var(--sage);box-shadow:0 4px 16px rgba(123,166,138,0.12);transform:translateY(-1px)}
.pc-name{font-weight:600;font-size:15px;margin-bottom:3px}.pc-dob{font-size:11px;color:var(--gray-light);margin-bottom:4px}
.pc-age{font-size:11px;color:var(--sage-dark);font-weight:500;margin-bottom:10px}
.pc-evals{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:8px}
.pc-eval-chip{font-size:9px;padding:3px 8px;border-radius:10px;background:var(--sage-mist);color:var(--sage-dark);border:1px solid var(--sage-light)}
.pc-eval-chip.latest{background:var(--sage);color:white;border-color:var(--sage)}
.pc-tier{position:absolute;top:14px;right:14px;font-size:18px}
.pc-score{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:600;color:var(--sage-dark);margin-top:4px}.pc-score span{font-family:'DM Sans',sans-serif;font-size:10px;color:var(--gray-light);font-weight:400}
.pc-actions{display:flex;gap:6px;margin-top:10px;border-top:1px solid var(--border);padding-top:10px}
.pc-actions button{flex:1}
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(59,63,60,0.5);z-index:200;align-items:center;justify-content:center}.modal-overlay.open{display:flex}
.modal{background:white;border-radius:12px;padding:28px;width:440px;max-width:90vw;box-shadow:0 20px 60px rgba(0,0,0,0.2)}
.modal h3{font-family:'Cormorant Garamond',serif;font-weight:400;font-size:22px;margin-bottom:18px}
.form-group{margin-bottom:14px}
.form-group label{display:block;font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:5px}
.form-group input,.form-group select{width:100%;border:1px solid var(--border);border-radius:6px;padding:8px 12px;font-size:13px;font-family:'DM Sans',sans-serif;color:var(--gray-dark);outline:none}
.form-group input:focus,.form-group select:focus{border-color:var(--sage)}
.form-hint{display:block;font-size:11px;font-weight:300;color:var(--gray-light);margin-top:5px;text-transform:none;letter-spacing:0}
.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}
/* ===== lr-modal primitive (Goal 1.8 PR-2 / Codex C6) — owned by lr-modal.js =====
   The old .modal-overlay + .modal pair above is the legacy primitive — kept
   for the deletePatientModal and other static-overlay flows already wired
   to openModal()/closeModal(). New modals (destructive-confirm + snapshot
   modal) use the lr-modal primitive: it owns its own state, traps focus,
   locks scroll, restores focus to the opener on close, and forbids stacking. */
.lr-modal-overlay{position:fixed;inset:0;background:rgba(59,63,60,0.55);z-index:9999;display:flex;align-items:center;justify-content:center;font-family:'DM Sans',-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}
.lr-modal-content{background:var(--cream);box-sizing:border-box;outline:none}
.lr-modal-content--card{border-radius:10px;padding:28px;width:100%;max-width:980px;max-height:90vh;box-shadow:0 20px 60px rgba(0,0,0,0.2);overflow:auto}
/* iOS Safari 100vh extends behind the URL bar + home-indicator. Use 100dvh
   (dynamic viewport) + safe-area-inset on bottom so the sticky action area
   stays above the gesture bar — mirrors PR-ε's `.modal{max-height:calc(100dvh - 24px)}` precedent. */
.lr-modal-content--fullscreen{position:fixed;inset:0;border-radius:0;padding:0;width:100vw;height:100dvh;max-width:100vw;max-height:100dvh;display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom)}
@media (max-width:768px){.lr-modal-content--card{max-width:calc(100vw - 32px);padding:20px}}
body.lr-modal-scroll-locked{position:fixed;left:0;right:0;width:100%;overflow:hidden}
/* lr-coach — anchored coach-mark bubbles (report-presentation walkthrough).
   position:fixed; geometry set via CSSOM (left/top by lr-coach.js). Non-modal,
   floats over a live screen. Tone accents: warm (default) / sage / blue. */
.lr-coach{position:fixed;left:0;top:0;z-index:10001;width:280px;max-width:calc(100vw - 24px);background:var(--white);border:1px solid var(--warm);border-radius:12px;padding:14px 16px 13px;box-shadow:0 12px 30px rgba(59,63,60,0.18);font-family:'DM Sans',-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;opacity:0;transition:opacity .15s}
.lr-coach.lr-coach--shown{opacity:1}
.lr-coach--sage{border-color:var(--sage)}
.lr-coach--blue{border-color:var(--blue)}
.lr-coach-arrow{position:absolute;width:12px;height:12px;background:var(--white);border:1px solid var(--warm);border-right:none;border-bottom:none}
.lr-coach--sage .lr-coach-arrow{border-color:var(--sage)}
.lr-coach--blue .lr-coach-arrow{border-color:var(--blue)}
.lr-coach--side-right .lr-coach-arrow{left:-7px;top:24px;transform:rotate(-45deg)}
.lr-coach--side-left .lr-coach-arrow{right:-7px;left:auto;top:24px;transform:rotate(135deg)}
.lr-coach--side-bottom .lr-coach-arrow{left:24px;top:-7px;transform:rotate(45deg)}
.lr-coach--side-top .lr-coach-arrow{left:24px;bottom:-7px;top:auto;transform:rotate(-135deg)}
.lr-coach-eyebrow{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:9px;letter-spacing:2px;text-transform:uppercase;font-weight:600;color:var(--warm-dark);display:flex;align-items:center;gap:5px}
.lr-coach--sage .lr-coach-eyebrow{color:var(--sage-dark)}
.lr-coach--blue .lr-coach-eyebrow{color:var(--blue)}
.lr-coach-sprout{font-size:11px}
.lr-coach-title{font-size:13px;font-weight:600;color:var(--gray-dark);margin:5px 0 4px}
.lr-coach-body{font-size:12px;color:var(--gray-mid);line-height:1.5}
.lr-coach-foot{margin-top:11px;display:flex;align-items:center;justify-content:flex-end;gap:10px}
.lr-coach-skip{background:none;border:none;color:var(--gray-mid);font-size:11px;font-weight:500;cursor:pointer;text-decoration:underline;text-underline-offset:2px;padding:6px 2px;min-height:32px}
.lr-coach-go{background:var(--warm);color:var(--white);border:none;border-radius:5px;padding:7px 14px;font-size:11px;font-weight:600;letter-spacing:.3px;cursor:pointer;min-height:32px}
.lr-coach--sage .lr-coach-go{background:var(--sage)}
.lr-coach--blue .lr-coach-go{background:var(--blue)}
.lr-coach-go:focus-visible,.lr-coach-skip:focus-visible{outline:2px solid var(--sage);outline-offset:2px}
/* lr-coach spotlight (dim + cut-out) — 4 blocker rects + a framing ring */
.lr-coach-spotlight-rect{position:fixed;background:rgba(59,63,60,0.55);z-index:10000;pointer-events:auto}
.lr-coach-spotlight-ring{position:fixed;z-index:10000;pointer-events:none;border-radius:12px;box-shadow:0 0 0 2px var(--sage),0 0 0 6px rgba(123,166,138,0.25)}
.lr-coach-spotlight-ring.lr-coach-spotlight-pulse{animation:lrCoachSpotPulse .35s ease-out 1}
@keyframes lrCoachSpotPulse{0%{box-shadow:0 0 0 2px var(--sage),0 0 0 6px rgba(123,166,138,0.25)}45%{box-shadow:0 0 0 3px var(--sage),0 0 0 12px rgba(123,166,138,0.45)}100%{box-shadow:0 0 0 2px var(--sage),0 0 0 6px rgba(123,166,138,0.25)}}
.lr-coach-skip.lr-coach-skip-pulse{animation:lrCoachSkipPulse .35s ease-out 1}
@keyframes lrCoachSkipPulse{0%{color:var(--gray-mid)}45%{color:var(--sage-dark)}100%{color:var(--gray-mid)}}
@media (prefers-reduced-motion:reduce){.lr-coach-spotlight-ring.lr-coach-spotlight-pulse,.lr-coach-skip.lr-coach-skip-pulse{animation:none}}
/* lr-tour W8 "You're all set" finish card (centered LRModal) */
.lr-modal-content.lr-modal-w440.lr-modal-content--card{max-width:440px}
.lrtour-finish-h{font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:300;font-size:30px;color:var(--gray-dark);margin:8px 0 6px}
.lrtour-finish-b{font-size:14px;color:var(--gray-mid);line-height:1.6;margin:0 0 4px}
/* Scoring layout */
.scoring-layout{display:grid;grid-template-columns:1fr 340px;min-height:calc(100vh - 52px)}
.scoring-main{padding:24px 32px;overflow-y:auto;max-height:calc(100vh - 52px)}
.scoring-sidebar{background:white;border-left:1px solid var(--border);padding:20px;overflow-y:auto;max-height:calc(100vh - 52px)}
.scoring-patient-header{background:var(--sage-mist);border-radius:10px;padding:16px 20px;margin-bottom:20px;display:flex;align-items:center;justify-content:space-between}
.sph-left h2{font-family:'Cormorant Garamond',serif;font-weight:400;font-size:24px}.sph-left .sph-meta{font-size:11px;color:var(--gray-mid);margin-top:2px}
.sph-right{text-align:right}
.sph-score-live{font-family:'Cormorant Garamond',serif;font-size:38px;font-weight:300;color:var(--sage-dark);line-height:1}.sph-score-live span{font-family:'DM Sans',sans-serif;font-size:12px;color:var(--gray-light)}
.sph-tier-badge{font-size:11px;padding:3px 10px;border-radius:12px;background:var(--sage-light);color:var(--sage-dark);font-weight:500;display:inline-block;margin-top:4px}
.scoring-section{margin-bottom:20px}
.scoring-section-header{display:flex;align-items:center;gap:10px;margin-bottom:10px;cursor:pointer;user-select:none}
.scoring-section-header h3{font-size:13px;font-weight:600;letter-spacing:0.5px;text-transform:uppercase;color:var(--sage-dark)}
.section-chevron{font-size:10px;color:var(--gray-light);transition:transform 0.2s}.section-chevron.collapsed{transform:rotate(-90deg)}
.section-weight{font-size:9px;color:var(--gray-light);font-weight:400;margin-left:auto}
.scoring-items{display:flex;flex-direction:column;gap:6px}
/* Hazelbaker items */
/* PR-B: score column was a hard 120px — four 32px buttons need ~168px, so the
   "2" clipped and couldn't be clicked. `auto` sizes the column to the buttons. */
.scoring-item{display:grid;grid-template-columns:1fr auto;align-items:center;gap:10px;background:white;border:1px solid var(--border);border-radius:8px;padding:10px 14px;transition:border-color 0.15s}
.scoring-item:hover{border-color:var(--sage-light)}.scoring-item.readonly{opacity:0.85;pointer-events:none}
.si-name{font-size:13px;font-weight:500}
.si-hint{font-size:10px;color:var(--gray-light);margin-top:1px}
.score-btn-group{display:flex;gap:8px}
.score-btn{min-width:38px;height:34px;padding:0 9px;border:1px solid var(--border);border-radius:5px;background:white;font-family:'DM Sans',sans-serif;font-size:13px;font-weight:600;color:var(--gray-mid);cursor:pointer;transition:background-color 0.15s,border-color 0.15s,color 0.15s}
.score-btn:hover{border-color:var(--sage);color:var(--sage)}
.score-btn:focus-visible{outline:2px solid var(--sage);outline-offset:1px}
.score-btn.active-na{background:var(--gray-light);color:var(--gray-dark);border-color:var(--gray-light)}
.score-btn.active-0{background:var(--red);color:white;border-color:var(--red)}.score-btn.active-1{background:var(--amber);color:var(--gray-dark);border-color:var(--amber)}.score-btn.active-2{background:var(--sage);color:white;border-color:var(--sage)}
/* Cranial measurement inputs */
.measure-item{display:grid;grid-template-columns:1fr 100px 80px 120px;align-items:center;gap:10px;background:white;border:1px solid var(--border);border-radius:8px;padding:10px 14px}
.measure-item:hover{border-color:var(--sage-light)}
.measure-input{border:1px solid var(--border);border-radius:5px;padding:6px 10px;font-size:13px;font-family:'DM Sans',sans-serif;text-align:center;outline:none;width:100%;color:var(--gray-dark)}.measure-input:focus{border-color:var(--sage)}
.measure-score{font-size:13px;font-weight:600;color:var(--sage-dark);text-align:center}
.measure-severity{font-size:10px;color:var(--gray-mid);text-align:center}
/* Vestibular / NS questions */
/* PR-B: was 100px — the Yes/Sometimes/No row needs far more, so "No" clipped. */
.vest-item{display:grid;grid-template-columns:1fr auto;align-items:start;gap:10px;background:white;border:1px solid var(--border);border-radius:8px;padding:12px 14px}
.vest-item:hover{border-color:var(--sage-light)}.vest-item.readonly{opacity:0.85;pointer-events:none}
.vest-explain{font-size:10px;color:var(--gray-light);font-style:italic;line-height:1.4;margin-top:4px;grid-column:1/-1}
.vest-btns{display:flex;gap:8px;justify-content:center}
.vest-btn{padding:5px 14px;border:1px solid var(--border);border-radius:5px;background:white;font-family:'DM Sans',sans-serif;font-size:11px;font-weight:600;color:var(--gray-mid);cursor:pointer;transition:background-color 0.15s,border-color 0.15s,color 0.15s}
.vest-btn:hover{border-color:var(--sage)}
.vest-btn:focus-visible{outline:2px solid var(--sage);outline-offset:1px}
.vest-btn.active-na{background:var(--gray-light);color:var(--gray-dark);border-color:var(--gray-light)}
.vest-btn.active-yes{background:var(--red);color:white;border-color:var(--red)}.vest-btn.active-sometimes{background:var(--amber);color:var(--gray-dark);border-color:var(--amber)}.vest-btn.active-no{background:var(--sage);color:white;border-color:var(--sage)}
.vest-note{font-size:10px;color:var(--gray-light);font-style:italic;line-height:1.4}
/* Cranial exam items */
.scoring-item.cranial-exam{display:grid;grid-template-columns:1fr auto 80px 70px;align-items:center;gap:10px;background:white;border:1px solid var(--border);border-radius:8px;padding:10px 14px;transition:border-color 0.15s}
.scoring-item.cranial-exam:hover{border-color:var(--sage-light)}.scoring-item.cranial-exam.readonly{opacity:0.85;pointer-events:none}
/* v1.8.1: re-score badge for items migrated from legacy 'Appropriate Sutures'.
   Soft amber tint so doctor notices without alarm — these are not new findings,
   just legacy data that needs individual re-scoring. Badge auto-removes when
   doctor cycles the score (clears _needsRescore in setCranialExamScore). */
.scoring-item.cranial-exam.needs-rescore{border-color:#C9956B;background:#FBF6EE}
/* F15 — direction-gate pulse highlight on a finding row missing its L/R side. */
.scoring-item.cranial-exam.dir-missing-flash{border-color:var(--warm);background:#FBF5EF;box-shadow:0 0 0 2px var(--warm);animation:dirMissingFlash 2.4s ease-out}
@keyframes dirMissingFlash{0%,30%{box-shadow:0 0 0 3px var(--warm)}100%{box-shadow:0 0 0 2px var(--warm)}}
/* F15 — non-blocking scoring-screen toast (replaces the blocking direction alert). */
.lr-scoring-toast{position:fixed;left:50%;bottom:32px;transform:translateX(-50%) translateY(20px);max-width:90vw;background:var(--warm);color:white;padding:12px 22px;border-radius:10px;font-family:'DM Sans',sans-serif;font-size:13px;font-weight:500;text-align:center;box-shadow:0 6px 24px rgba(0,0,0,0.18);opacity:0;pointer-events:none;transition:opacity 0.2s,transform 0.2s;z-index:2000}
.lr-scoring-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.lr-scoring-toast.lr-scoring-toast-ok{background:var(--sage)}
.needs-rescore-badge{display:inline-block;margin-left:8px;padding:2px 8px;font-size:10px;font-weight:600;letter-spacing:0.3px;color:#7A5A2E;background:#F0E6D8;border-radius:10px;vertical-align:middle;cursor:help}
.toggle-btn{font-family:'DM Sans',sans-serif;font-size:11px;padding:5px 10px;border:1px solid var(--border);border-radius:5px;background:white;cursor:pointer;color:var(--gray-mid);transition:all 0.1s;white-space:nowrap}
.toggle-btn.on{background:var(--sage-mist);border-color:var(--sage);color:var(--sage-dark)}
/* Cranial finding laterality — L/R selector shown only on the 7 lateral
   findings (v1.8.0.0 cranial-reveal wiring). Leave-unset = both-sides
   fallback in the reveal; no third "bilateral" button by design. */
.dir-group{display:inline-flex;gap:4px;margin-left:10px;vertical-align:middle}
.dir-btn{min-width:22px;height:20px;padding:0 5px;border:1px solid var(--border);border-radius:4px;background:white;font-family:'DM Sans',sans-serif;font-size:10px;font-weight:600;color:var(--gray-light);cursor:pointer;transition:background-color 0.15s,border-color 0.15s,color 0.15s}
.dir-btn:hover{border-color:var(--sage);color:var(--sage)}
.dir-btn:focus-visible{outline:2px solid var(--sage);outline-offset:1px}
.dir-btn.on{background:var(--sage);border-color:var(--sage);color:white}
.wa-group{display:inline-flex;justify-self:start;border:1px solid var(--border);border-radius:9999px;overflow:hidden;vertical-align:middle;margin-left:8px}
.wa-btn{padding:2px 9px;border:none;background:white;font-family:'DM Sans',sans-serif;font-size:10px;font-weight:600;color:var(--gray-light);cursor:pointer;transition:background-color 0.15s,color 0.15s}
.wa-btn:hover{color:var(--sage)}
.wa-btn:focus-visible{outline:2px solid var(--sage);outline-offset:1px}
.wa-btn.on-watch{background:var(--warm-mist);color:var(--warm-dark)}
.wa-btn.on-active{background:var(--sage-mist);color:var(--sage-dark)}
.cranial-subscore{font-size:9px;color:var(--gray-light);margin-top:-4px;margin-bottom:4px;padding-left:2px}
/* ── PR-2 scoring tweaks (T5: F12 breathing room / F12d legend / F16 unscored
   + progress / F12b auto-fill chip). Targeted, not a redesign. ── */
/* F12a — a little more breathing room in the crammed cranial row. */
.scoring-item.cranial-exam{padding:12px 14px;row-gap:9px}
/* F12d — "how to read each finding" legend. Score axis (number + color, never
   color alone) separated from the Focus (Active/Watch) axis. */
.lr-score-legend{display:flex;flex-direction:column;gap:6px;margin:6px 0 12px;padding:10px 13px;background:var(--sage-mist);border-radius:8px}
.lr-legend-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lr-legend-axis{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-mid);min-width:44px}
.lr-legend-chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--gray-dark)}
.lr-legend-chip b{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;border-radius:4px;font-size:11px;font-weight:700}
.lr-lg-2 b{background:var(--sage);color:#fff}
.lr-lg-1 b{background:var(--amber);color:var(--gray-dark)}
.lr-lg-0 b{background:var(--red);color:#fff}
.lr-lg-na b{background:var(--gray-light);color:var(--gray-dark)}
.lr-legend-note{font-size:11px;color:var(--gray-mid);line-height:1.45}
.lr-legend-note b{color:var(--gray-dark)}
/* F16 — exam "X of N assessed" progress + jump-to-next-unscored. */
.lr-exam-progress{display:flex;align-items:center;gap:12px;margin:0 0 12px}
.lr-exam-progress-track{flex:1;height:6px;background:var(--border);border-radius:3px;overflow:hidden}
.lr-exam-progress-fill{height:100%;width:0;background:var(--sage);border-radius:3px;transition:width 0.25s}
.lr-jump-unscored{flex:0 0 auto;font-family:'DM Sans',sans-serif;font-size:11px;font-weight:600;color:var(--warm-dark);background:var(--warm-mist);border:1px solid var(--warm);border-radius:6px;padding:5px 11px;cursor:pointer;transition:opacity 0.15s}
.lr-jump-unscored:hover{opacity:0.85}
.lr-jump-unscored:focus-visible{outline:2px solid var(--warm);outline-offset:1px}
.lr-jump-unscored:disabled{color:var(--gray-light);background:transparent;border-color:var(--border);cursor:default}
/* F16 — per-row "not scored yet" tag + warm edge marker on assessed-unscored rows. */
.si-unscored-tag{display:none;margin-left:8px;padding:1px 7px;font-size:9px;font-weight:600;letter-spacing:0.3px;color:var(--warm-dark);background:var(--warm-mist);border-radius:9px;vertical-align:middle}
.scoring-item.cranial-exam.lr-unscored{border-left:3px solid var(--warm)}
.scoring-item.cranial-exam.lr-unscored .si-unscored-tag{display:inline-block}
.scoring-item.cranial-exam.lr-unscored-pulse{box-shadow:0 0 0 3px var(--warm);transition:box-shadow 0.2s}
/* F12b — "auto-filled from scores, editable" chip on the report-content fields. */
.lr-autofill-chip{display:inline-block;margin-left:8px;padding:1px 8px;font-size:9px;font-weight:600;letter-spacing:0.3px;color:var(--sage-dark);background:var(--sage-mist);border-radius:9px;vertical-align:middle;cursor:help;font-family:'DM Sans',sans-serif}
/* Skip toggle */
.skip-toggle{display:flex;align-items:center;gap:8px;margin-bottom:8px;padding:6px 10px;background:var(--warm-mist);border:1px solid var(--warm-light);border-radius:6px;font-size:11px;color:var(--warm-dark)}
.skip-toggle input[type=checkbox]{accent-color:var(--sage)}
/* Sidebar */
.sidebar-section{margin-bottom:20px}.sidebar-section h4{font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:8px}
.live-score-row{display:flex;align-items:center;justify-content:space-between}.ls-label{font-size:12px;color:var(--gray-mid)}.ls-value{font-size:14px;font-weight:600;color:var(--sage-dark)}
.mini-bar{height:6px;background:#E4EBE6;border-radius:3px;overflow:hidden;margin-top:4px;margin-bottom:8px}.mini-bar-fill{height:100%;border-radius:3px;transition:width 0.3s}
.mini-bar-fill.haz{background:var(--sage)}.mini-bar-fill.cra{background:var(--blue)}.mini-bar-fill.ns{background:var(--warm)}
.suggestion-chip{display:block;width:100%;text-align:left;font-family:'DM Sans',sans-serif;font-size:11px;color:var(--gray-mid);background:var(--cream);border:1px solid var(--border);border-radius:6px;padding:7px 10px;margin-bottom:4px;cursor:pointer;transition:all 0.1s;line-height:1.4}
.suggestion-chip:hover{background:var(--sage-mist);border-color:var(--sage-light);color:var(--sage-dark)}.suggestion-chip.used{background:var(--sage-mist);border-color:var(--sage-light);color:var(--sage-dark)}
.notes-textarea{width:100%;border:1px solid var(--border);border-radius:6px;padding:8px 10px;font-family:'DM Sans',sans-serif;font-size:12px;color:var(--gray-dark);resize:vertical;min-height:60px;outline:none;line-height:1.5}.notes-textarea:focus{border-color:var(--sage)}
.note-slot{display:flex;gap:6px;align-items:start;margin-bottom:6px}
.note-slot input{flex:1;border:1px solid var(--border);border-radius:5px;padding:6px 10px;font-family:'DM Sans',sans-serif;font-size:11px;outline:none;color:var(--gray-dark)}.note-slot input:focus{border-color:var(--sage)}
.comp-note-label{font-size:10px;font-weight:600;color:var(--gray-dark);margin-bottom:3px}
.comp-note-input{width:100%;border:1px solid var(--border);border-radius:5px;padding:6px 8px;font-family:'DM Sans',sans-serif;font-size:11px;outline:none;color:var(--gray-dark);min-height:30px}.comp-note-input:focus{border-color:var(--sage)}
.highlight-warn{font-size:10px;color:var(--amber);font-style:italic;margin-top:3px;line-height:1.3}
.scoring-bottom-bar{position:sticky;bottom:0;background:white;border-top:1px solid var(--border);padding:12px 32px;display:flex;align-items:center;justify-content:space-between;z-index:50}
/* Progress chart */
.progress-chart{background:white;border:1px solid var(--border);border-radius:10px;padding:16px;margin-bottom:18px}
.progress-chart h4{font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:12px}
.chart-canvas-wrap{position:relative;height:200px}
.chart-canvas-wrap canvas{width:100%!important;height:100%!important}
/* View-only banner */
.view-only-banner{background:var(--warm-mist);border-bottom:1px solid var(--warm-light);padding:8px 32px;font-size:11px;color:var(--warm-dark);text-align:center;font-weight:500}
/* Stage-2 cutover write-freeze banner (Phase 3 T9). */
.lr-maintenance-banner{position:sticky;top:0;z-index:10000;background:var(--warm);color:var(--white);text-align:center;padding:10px 16px;font-size:13px;font-weight:600;line-height:1.4}
/* Goal 1.8 PR-1 — Reply-To verification click outcome banner (boot.js
   consumeReplyToVerifyParam dispatcher). Two variants: success (sage),
   failure (clay). Sticky top so the owner sees it on whatever screen they
   land on; dismissible via the ✕ button. */
.lr-verify-banner{position:sticky;top:0;z-index:10000;color:#fff;padding:10px 40px 10px 16px;font-size:13px;font-weight:600;line-height:1.4;display:flex;align-items:center;justify-content:center;text-align:center;gap:12px}
.lr-verify-banner-success{background:var(--sage-dark,#4A5C49)}
.lr-verify-banner-failure{background:var(--clay,#C15F4E)}
.lr-verify-banner-dismiss{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:transparent;border:none;color:#fff;cursor:pointer;font-size:16px;line-height:1;padding:4px 8px;opacity:0.8}
.lr-verify-banner-dismiss:hover{opacity:1}
/* Report styles */
.report-wrapper{display:flex;flex-direction:column;align-items:center;padding:30px 20px 60px;gap:16px;background:#D4DDD7;min-height:100vh}
.print-bar{width:8.5in;background:var(--sage-dark);color:white;padding:10px 24px;border-radius:8px;display:flex;justify-content:space-between;align-items:center;font-size:12px}.print-bar span{opacity:0.8}.print-bar-btns{display:flex;gap:8px}
.page{width:8.5in;min-height:11in;background:var(--cream);position:relative;overflow:hidden;box-shadow:0 8px 60px rgba(0,0,0,0.15)}
.header{background:var(--sage-dark);padding:12px 44px;display:flex;align-items:center;justify-content:space-between;position:relative;overflow:hidden}
.header::after{content:'';position:absolute;right:-80px;top:-80px;width:260px;height:260px;border-radius:50%;background:rgba(255,255,255,0.03)}
.header-right{text-align:right}
.report-title{font-family:'Cormorant Garamond',serif;font-size:26px;font-weight:300;font-style:italic;color:white}
.report-subtitle{font-size:9px;letter-spacing:2.5px;text-transform:uppercase;color:var(--sage-light);font-weight:400;display:block;margin-top:4px}
.color-bar{height:5px;background:linear-gradient(90deg,var(--sage) 0%,var(--warm) 100%)}
.patient-band{background:var(--sage-mist);border-bottom:1px solid var(--border);padding:10px 44px;display:grid;grid-template-columns:repeat(5,1fr);gap:16px}
.pf-label{font-size:7.5px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:3px}
.pf-value{font-size:13px;color:var(--gray-dark);border-bottom:1.5px solid var(--sage);padding-bottom:2px;min-height:18px}
.report-main{padding:18px 44px 14px}
.r-score-hero{display:grid;grid-template-columns:auto 1fr;gap:28px;align-items:center;margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--border)}
.r-index-circle{width:118px;height:118px;border-radius:50%;background:var(--sage-dark);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;box-shadow:0 4px 20px rgba(78,122,94,0.3)}
.r-index-circle::before{content:'';position:absolute;inset:7px;border-radius:50%;border:1.5px solid rgba(201,149,107,0.5)}
.r-index-num{font-family:'Cormorant Garamond',serif;font-size:46px;font-weight:300;color:white;line-height:1}
.r-index-label{font-size:7px;letter-spacing:2px;text-transform:uppercase;color:var(--sage-light);font-weight:500;margin-top:1px}
.r-tier-display{display:inline-flex;align-items:center;gap:6px;border:1.5px solid var(--sage);border-radius:20px;padding:5px 14px;background:var(--sage-mist);margin-bottom:10px}
.r-tier-icon{font-size:14px}.r-tier-name{font-size:10px;letter-spacing:0.5px;font-weight:600;color:var(--gray-dark)}
.r-prog-bar-wrap{margin-bottom:10px}.r-prog-bar-top{display:flex;justify-content:space-between;margin-bottom:5px}.r-prog-bar-top span{font-size:8px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light)}
.r-prog-track{height:8px;background:#D4DDD7;border-radius:4px;overflow:hidden}.r-prog-fill{height:100%;background:linear-gradient(90deg,var(--sage),var(--warm));border-radius:4px}
.r-summary-label{font-size:7.5px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:4px;margin-top:10px}
.r-summary-text{font-size:12px;color:var(--gray-mid);line-height:1.6;min-height:36px}
.r-anchor{font-family:'Cormorant Garamond',serif;font-style:italic;color:var(--sage);font-size:12px;margin-top:6px;display:block}
.r-section-label{font-size:8px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:12px}
.r-component-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:18px}
.r-card{border:1px solid var(--border);border-radius:10px;padding:14px;background:white}
.r-card-weight{font-size:8px;letter-spacing:1px;text-transform:uppercase;color:var(--sage);font-weight:600;display:block;margin-bottom:4px}.r-card-weight.warm{color:var(--warm-dark)}
.r-card-title{font-size:13px;font-weight:600;color:var(--gray-dark);margin-bottom:2px}
.r-card-sub{font-size:9px;color:var(--gray-light);display:block;margin-bottom:10px}
.r-card-score-row{display:flex;align-items:baseline;gap:3px;margin-bottom:6px}
.r-card-num{font-family:'Cormorant Garamond',serif;font-size:28px;font-weight:300;color:var(--sage-dark);line-height:1}.r-card-denom{font-size:12px;color:var(--gray-light)}
.r-card-mini-track{height:5px;background:#E4EBE6;border-radius:3px;overflow:hidden;margin-bottom:8px}
.r-card-mini-fill{height:100%;border-radius:3px}.r-card-mini-fill.haz{background:var(--sage)}.r-card-mini-fill.cra{background:var(--blue)}.r-card-mini-fill.ns{background:var(--warm)}
.r-card-note-label{font-size:8px;letter-spacing:1px;text-transform:uppercase;color:var(--gray-light);font-weight:600;display:block;margin-bottom:2px}
.r-card-note{font-size:11px;color:var(--gray-mid);line-height:1.4;font-style:italic}
.r-ptable{width:100%;border-collapse:collapse;font-size:11px;margin-bottom:18px}
.r-ptable th{font-size:8px;letter-spacing:1px;text-transform:uppercase;color:var(--gray-light);font-weight:600;text-align:center;padding:6px 8px;border-bottom:1px solid var(--border)}.r-ptable th:first-child{text-align:left}
.r-ptable td{padding:6px 8px;text-align:center;border-bottom:1px solid #EDF2EE;color:var(--gray-mid)}.r-ptable td:first-child{text-align:left;font-weight:500;color:var(--gray-dark)}
.r-ptable tr.total-row td{font-weight:600;color:var(--sage-dark);border-top:2px solid var(--sage-light)}
.r-ptable .current-col{background:var(--sage-mist);font-weight:600;color:var(--sage-dark)}
.r-notes-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
.r-notes-box{border:1px solid var(--border);border-radius:8px;padding:12px}
.r-notes-box-label{font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--sage);font-weight:600;display:block;margin-bottom:6px}
.r-notes-item{font-size:11px;color:var(--gray-mid);padding:3px 0;border-bottom:1px solid #EDF2EE;line-height:1.4}.r-notes-item:last-child{border-bottom:none}
.r-watch-strip{background:var(--warm-mist);border:1px solid var(--warm-light);border-radius:8px;padding:10px 14px;margin-bottom:10px}
.r-watch-label{font-size:8px;letter-spacing:1.5px;text-transform:uppercase;color:var(--warm-dark);font-weight:600;margin-bottom:6px}
.r-watch-pills{display:flex;flex-wrap:wrap;gap:6px}
.r-watch-pill{font-size:9px;color:var(--warm-dark);background:white;border:1px solid var(--warm-light);border-radius:12px;padding:3px 10px;display:flex;align-items:center;gap:4px}.wd{width:5px;height:5px;border-radius:50%;background:var(--warm)}
.r-footer{background:var(--sage-mist);padding:14px 44px;display:flex;justify-content:space-between;align-items:flex-end;border-top:1px solid var(--border);margin-top:auto;font-size:10px;color:var(--gray-mid);line-height:1.6}
.r-sig-row{display:flex;gap:40px}.r-sig-line{border-bottom:1px solid var(--gray-light);min-width:140px;padding-bottom:2px;margin-bottom:2px;min-height:18px}
.r-sig-label{font-size:8px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);font-weight:600}
.r-sig-name{font-size:12px;color:var(--gray-dark)}
.r-tier-legend{width:8.5in;display:flex;gap:12px;justify-content:center;padding:12px 0}
.r-tl-item{display:flex;align-items:center;gap:6px;background:white;border:1px solid var(--border);border-radius:8px;padding:6px 14px}
.r-tl-name{font-size:10px;font-weight:600;color:var(--gray-dark);display:block}.r-tl-range{font-size:9px;color:var(--gray-light)}
/* Dashboard */
.dash-header{background:white;border:1px solid var(--border);border-radius:12px;padding:24px;margin-bottom:20px;display:flex;align-items:center;justify-content:space-between}
.dash-header-left h2{font-family:'Cormorant Garamond',serif;font-weight:400;font-size:28px}
.dash-header-left .dash-meta{font-size:12px;color:var(--gray-mid);margin-top:4px}
.dash-score-display{text-align:right}
.dash-score-num{font-family:'Cormorant Garamond',serif;font-size:48px;font-weight:300;color:var(--sage-dark);line-height:1}
.dash-score-label{font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);margin-top:4px}
.dash-tier{display:inline-flex;align-items:center;gap:6px;background:var(--sage-mist);border:1px solid var(--sage-light);border-radius:16px;padding:4px 12px;font-size:11px;font-weight:500;color:var(--sage-dark);margin-top:6px}
.dash-chart{background:white;border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:20px}
.dash-chart h3{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:12px}
.dash-chart-canvas{height:240px;position:relative}
.dash-chart-canvas canvas{width:100%!important;height:100%!important}
.dash-section-label{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:12px}
.dash-eval-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;margin-bottom:30px}
.dash-eval-card{background:white;border:1px solid var(--border);border-radius:10px;padding:16px;transition:all 0.15s}
.dash-eval-card:hover{border-color:var(--sage);box-shadow:0 4px 16px rgba(123,166,138,0.12)}
.dash-eval-period{font-weight:600;font-size:14px;margin-bottom:2px}
.dash-eval-date{font-size:11px;color:var(--gray-light);margin-bottom:8px}
.dash-eval-score{font-family:'Cormorant Garamond',serif;font-size:24px;font-weight:300;color:var(--sage-dark)}
.dash-eval-score span{font-family:'DM Sans',sans-serif;font-size:10px;color:var(--gray-light)}
.dash-eval-tier{font-size:11px;margin-bottom:10px}
.dash-eval-actions{display:flex;gap:6px;border-top:1px solid var(--border);padding-top:10px}
.dash-eval-actions button{flex:1}
/* Goal 1.7 — eval-card plan launcher + status dot (DR1/DR2) */
.dash-eval-statusrow{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.dash-plan-dot{font-size:10px;display:inline-flex;align-items:center;gap:4px}
.dash-plan-dot::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--border)}
.dash-plan-dot.attached{color:var(--sage-dark)}
.dash-plan-dot.attached::before{background:var(--sage)}
.dash-plan-dot.none{color:var(--gray-light)}
.dash-plan-dot.has-plans{color:var(--sage-dark)}
.dash-plan-dot.has-plans::before{background:var(--sage-light)}
.lr-btn-plan-launch{width:100%;display:block;margin-bottom:10px}
.lr-btn-plan-buildnew{width:100%;display:block;margin-bottom:10px;font-size:11px}
.lr-btn-present{background:var(--sage);color:#fff;border-color:var(--sage)}
.lr-btn-present:hover{background:var(--sage-dark);border-color:var(--sage-dark)}
/* Goal-nav item 2 (B+) — link-a-plan picker (openCarePlan({evalId,pick:true})) */
.cp-link-picker{max-width:680px;margin:0 auto;padding:24px 16px}
.cp-link-picker-head{margin-bottom:20px}
.cp-link-picker-title{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:26px;color:var(--gray-dark);margin:0 0 6px}
.cp-link-picker-sub{font-size:13px;color:var(--gray-mid);line-height:1.5}
.cp-link-picker-list{display:flex;flex-direction:column;gap:10px}
.cp-link-picker-row{display:flex;align-items:center;justify-content:space-between;gap:12px;background:white;border:1px solid var(--border);border-radius:10px;padding:14px 16px}
.cp-link-picker-row.is-linked{opacity:0.6}
.cp-link-picker-meta{display:flex;flex-direction:column;gap:2px;min-width:0}
.cp-link-picker-type{font-size:13px;font-weight:600;color:var(--gray-dark)}
.cp-link-picker-created{font-size:11px;color:var(--gray-light);margin-top:2px}
.cp-link-picker-tag{font-size:11px;color:var(--gray-light);font-style:italic}
.cp-link-picker-empty{text-align:center;color:var(--gray-light);font-size:13px;padding:24px}
.cp-link-picker-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}
@media(max-width:768px){.cp-link-picker-row{flex-direction:column;align-items:stretch}.cp-link-picker-actions{flex-direction:column}}
/* Goal 1.7 DR-A11Y (E12) — 44px touch target on the eval action row, phones only */
@media (max-width:480px){.dash-eval-actions button{min-height:44px}}
.dash-empty-evals{text-align:center;padding:30px;color:var(--gray-mid);background:white;border:1px solid var(--border);border-radius:10px;margin-bottom:30px}
.dash-empty-evals p{font-size:13px;margin-bottom:12px}
.dash-delete-zone{border-top:2px solid #fde8e8;margin-top:40px;padding-top:20px}
.dash-delete-zone h4{font-size:11px;letter-spacing:1px;text-transform:uppercase;color:var(--red);font-weight:600;margin-bottom:8px}
.dash-delete-zone p{font-size:12px;color:var(--gray-mid);margin-bottom:12px;line-height:1.5}
.delete-confirm-input{width:260px;border:1px solid var(--border);border-radius:6px;padding:8px 12px;font-size:13px;font-family:'DM Sans',sans-serif;margin-bottom:12px;outline:none;color:var(--gray-dark)}
.delete-confirm-input:focus{border-color:var(--red)}
/* Raw score breakdowns in report cards */
.r-card-raw{font-size:10px;color:var(--gray-mid);line-height:1.6;margin-bottom:6px;padding:4px 0;border-top:1px dashed var(--border)}
.r-card-raw .raw-line{display:block}
.r-card-raw .raw-label{font-weight:500;color:var(--gray-dark)}
.r-card-raw .flagged{color:var(--red);font-style:italic}
/* Progress table raw breakdowns */
.ptable-raw{font-size:8px;color:var(--gray-light);font-weight:400;display:block;margin-top:2px;line-height:1.3}
/* Practice Health Dashboard */
.ph-stats-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px}
.ph-stat{background:white;border:1px solid var(--border);border-radius:10px;padding:16px;text-align:center}
.ph-stat-num{font-family:'DM Sans',sans-serif;font-size:32px;font-weight:500;color:var(--sage-dark);line-height:1;font-variant-numeric:tabular-nums}
.ph-stat-label{font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-top:4px}
.ph-main-chart{background:white;border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:20px}
.ph-main-chart h3{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:14px}
.ph-main-chart-canvas{height:300px;position:relative}
.ph-main-chart-canvas canvas{width:100%!important;height:100%!important}
.ph-comp-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:20px}
.ph-comp-card{background:white;border:1px solid var(--border);border-radius:12px;padding:16px;cursor:pointer;transition:all 0.15s}
.ph-comp-card:hover{border-color:var(--sage);box-shadow:0 4px 16px rgba(123,166,138,0.12)}
.ph-comp-card h4{font-size:10px;letter-spacing:1.5px;text-transform:uppercase;font-weight:600;margin-bottom:10px}
.ph-comp-card h4.haz{color:var(--sage)}.ph-comp-card h4.cra{color:var(--blue)}.ph-comp-card h4.ns{color:var(--warm)}
.ph-comp-canvas{height:160px;position:relative}
.ph-comp-canvas canvas{width:100%!important;height:100%!important}
.ph-comp-expanded{display:none;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}
.ph-comp-expanded.open{display:block}
.ph-comp-sub-canvas{height:140px;position:relative;margin-bottom:8px}
.ph-comp-sub-canvas canvas{width:100%!important;height:100%!important}
.ph-tier-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:20px}
.ph-donut-card{background:white;border:1px solid var(--border);border-radius:12px;padding:20px}
.ph-donut-card h3{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:14px}
.ph-donut-canvas{height:220px;position:relative}
.ph-donut-canvas canvas{width:100%!important;height:100%!important}
.ph-tier-table{background:white;border:1px solid var(--border);border-radius:12px;padding:20px}
.ph-tier-table h3{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:14px}
.ph-tier-tbl{width:100%;border-collapse:collapse;font-size:12px}
.ph-tier-tbl th{font-size:9px;letter-spacing:1px;text-transform:uppercase;color:var(--gray-light);font-weight:600;text-align:center;padding:6px 8px;border-bottom:1px solid var(--border)}
.ph-tier-tbl th:first-child{text-align:left}
.ph-tier-tbl td{padding:6px 8px;text-align:center;border-bottom:1px solid #EDF2EE;color:var(--gray-mid)}
.ph-tier-tbl td:first-child{text-align:left;font-weight:500;color:var(--gray-dark)}
.ph-filter-panel{background:white;border:1px solid var(--border);border-radius:12px;padding:16px;margin-bottom:20px}
.ph-filter-toggle{font-size:11px;font-weight:600;color:var(--sage-dark);cursor:pointer;user-select:none;display:flex;align-items:center;gap:6px}
.ph-filter-body{display:none;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}
.ph-filter-body.open{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.ph-filter-body .form-group{margin-bottom:0}
.ph-export-section{background:white;border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:20px}
.ph-export-section h3{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:14px}
.ph-export-btns{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.ph-export-toggle{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--gray-mid);margin-left:10px}
.ph-export-toggle select{border:1px solid var(--border);border-radius:5px;padding:4px 8px;font-size:11px;font-family:'DM Sans',sans-serif}
.ph-section-label{font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin-bottom:12px}
/* Narrative report cards */
.r-card-domain-row{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:11px}
.r-card-domain-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.r-card-domain-dot.green{background:#7C9A6B}.r-card-domain-dot.amber{background:#D4A853}.r-card-domain-dot.red{background:#D96B6B}
.r-card-domain-label{font-weight:500;color:var(--gray-dark)}.r-card-domain-status{color:var(--gray-mid);margin-left:auto;font-size:10px}
.r-card-interp{border-radius:8px;padding:10px 12px;margin-top:8px;margin-bottom:8px;font-size:11px;line-height:1.5}
.r-card-interp.green-bg{background:#EDF5F0;border:1px solid #C4DDCC}
.r-card-interp.blue-bg{background:#EBF2F7;border:1px solid #B8D0E4}
.r-card-interp-summary{color:var(--gray-dark);margin-bottom:4px}
.r-card-interp-guidance{color:var(--gray-mid);font-style:italic;font-size:10px}
.r-card-meas-row{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:11px}
.r-card-meas-label{font-weight:500;color:var(--gray-dark)}.r-card-meas-value{color:var(--gray-mid);margin-left:auto;font-size:10px}
.r-card-section-label{font-size:8px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);font-weight:600;margin:8px 0 4px}
.r-card-category-label{font-size:12px;font-weight:600;margin-bottom:4px}
.mm-calc-row{display:flex;align-items:center;gap:10px;background:var(--sage-mist);border-radius:6px;padding:8px 12px;margin-top:6px;font-size:12px}
.mm-calc-label{font-weight:500;color:var(--gray-dark)}.mm-calc-value{font-weight:600;color:var(--sage-dark);margin-left:auto}
/* Initial Findings Report — Editorial Letter */
.ifr-brand{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif}
.ifr-header{background:var(--sage-dark);padding:12px 44px;display:flex;align-items:center;justify-content:space-between;position:relative;overflow:hidden}
.ifr-header::after{content:'';position:absolute;right:-80px;top:-80px;width:260px;height:260px;border-radius:50%;background:rgba(255,255,255,0.03)}
.ifr-header-title{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:3px;text-transform:uppercase;color:rgba(255,255,255,0.85);font-weight:400}
.ifr-header-type{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:2px;text-transform:uppercase;color:var(--sage-light);font-weight:400}
.ifr-patient-band{background:var(--sage-mist);border-bottom:1px solid var(--border);padding:10px 44px;display:grid;grid-template-columns:repeat(5,1fr);gap:16px}
.ifr-pf-label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:400;margin-bottom:3px}
.ifr-pf-value{font-size:13px;color:var(--gray-dark);border-bottom:1.5px solid var(--sage);padding-bottom:2px;min-height:18px}
.ifr-content{padding:22px 44px;flex:1;display:flex;flex-direction:column}
.ifr-greeting{font-family:'Cormorant Garamond',serif;font-size:24px;font-weight:300;font-style:italic;color:var(--gray-dark);margin-bottom:6px;line-height:1.3}
.ifr-greeting em{color:var(--sage-dark);font-style:italic}
.ifr-narrative{font-size:12px;color:var(--gray-mid);line-height:1.7;margin-bottom:18px;max-width:540px}
.ifr-narrative .ifr-score-inline{font-family:'DM Sans',sans-serif;font-size:18px;font-weight:300;color:var(--sage-dark);font-variant-numeric:tabular-nums}
.ifr-narrative-row{display:flex;align-items:flex-start;gap:24px;margin-bottom:18px}
.ifr-narrative-text{flex:1}
.ifr-score-callout{text-align:center;flex-shrink:0;padding:12px 16px;border:1.5px solid var(--sage-light);border-radius:10px;background:var(--sage-mist)}
.ifr-score-callout-num{font-family:'DM Sans',sans-serif;font-size:44px;font-weight:300;color:var(--sage-dark);line-height:1;font-variant-numeric:tabular-nums}
.ifr-score-callout-label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:7px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);margin-top:4px}
.ifr-score-callout-tier{font-size:11px;color:var(--sage-dark);font-weight:500;margin-top:4px}
.ifr-narrative .ifr-tier-inline{font-weight:600;color:var(--gray-dark)}
.ifr-narrative .ifr-focus-bold{font-weight:600;color:var(--gray-dark)}
/* Asymmetric cards */
.ifr-cards-asym{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:18px}
.ifr-card-focus{grid-row:1/3;border:1.5px solid var(--warm-light);border-radius:10px;padding:16px;background:white;position:relative}
.ifr-card-focus-label{position:absolute;top:-8px;left:14px;font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:1.5px;text-transform:uppercase;color:var(--warm);background:var(--cream);padding:0 6px}
.ifr-card-normal{border:1px solid var(--border);border-radius:10px;padding:12px 14px;background:white}
.ifr-cards-equal{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:18px}
.ifr-card-equal{border:1px solid var(--border);border-radius:10px;padding:14px;background:white}
.ifr-card-domain{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:1.5px;text-transform:uppercase;font-weight:400;margin-bottom:4px}
.ifr-card-domain.sage{color:var(--sage)}.ifr-card-domain.blue{color:var(--blue)}.ifr-card-domain.warm{color:var(--warm-dark)}
.ifr-card-title{font-size:12px;font-weight:600;color:var(--gray-dark);margin-bottom:6px}
.ifr-card-score{font-family:'DM Sans',sans-serif;font-size:26px;font-weight:300;color:var(--sage-dark);line-height:1;margin-bottom:4px;font-variant-numeric:tabular-nums}
.ifr-card-score span{font-family:'DM Sans',sans-serif;font-size:10px;color:var(--gray-light)}
.ifr-card-score-focus{font-family:'DM Sans',sans-serif;font-size:34px;font-weight:300;color:var(--warm-dark);line-height:1;margin-bottom:6px;font-variant-numeric:tabular-nums}
.ifr-card-score-focus span{font-family:'DM Sans',sans-serif;font-size:11px;color:var(--gray-light)}
.ifr-card-bar{height:4px;background:#E4EBE6;border-radius:2px;margin-bottom:6px;overflow:hidden}
.ifr-card-bar-focus{height:6px;background:#E4EBE6;border-radius:3px;margin-bottom:8px;overflow:hidden}
.ifr-bar-fill{height:100%;border-radius:3px}
.ifr-bar-fill.sage{background:var(--sage)}.ifr-bar-fill.blue{background:var(--blue)}.ifr-bar-fill.warm{background:var(--warm)}
.ifr-card-note{font-size:10px;color:var(--gray-mid);line-height:1.5;font-style:italic}
.ifr-card-detail{font-size:10px;color:var(--gray-mid);line-height:1.5;margin-top:8px;padding-top:8px;border-top:1px dashed var(--border)}
.ifr-card-detail strong{color:var(--gray-dark);font-weight:500}
.ifr-card-reassure{font-size:10px;color:var(--sage-dark);font-style:italic;line-height:1.5;margin-top:6px}
/* Two-column findings + plan */
.ifr-two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px;flex:1}
.ifr-col-label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:2px;text-transform:uppercase;color:var(--sage);font-weight:400;margin-bottom:10px}
.ifr-col-label.warm{color:var(--warm)}
.ifr-finding-list{list-style:none;padding:0}
.ifr-finding-list li{font-size:11px;color:var(--gray-mid);line-height:1.5;padding:4px 0 4px 14px;border-bottom:1px solid var(--sage-mist);position:relative}
.ifr-finding-list li::before{content:'';position:absolute;left:0;top:9px;width:6px;height:6px;border-radius:50%;background:var(--sage-light)}
.ifr-finding-list li.positive::before{background:var(--sage)}
.ifr-finding-list li.attention::before{background:var(--warm)}
.ifr-plan-box{background:var(--warm-mist);border:1px solid var(--warm-light);border-radius:8px;padding:14px}
.ifr-plan-title{font-family:'Cormorant Garamond',serif;font-size:18px;font-weight:300;font-style:italic;color:var(--gray-dark);margin-bottom:8px}
.ifr-plan-text{font-size:11px;color:var(--gray-mid);line-height:1.7}
.ifr-plan-text strong{color:var(--gray-dark)}
.ifr-plan-empty{font-size:11px;color:var(--gray-light);font-style:italic}
/* Looking Ahead bridge */
.ifr-next-steps{display:flex;gap:12px;align-items:flex-start;padding:12px 16px;margin:12px 0;background:var(--sage-mist);border-radius:8px;border-left:3px solid var(--sage)}
.ifr-next-steps-icon{font-size:18px;color:var(--sage);line-height:1;margin-top:1px}
.ifr-next-steps-label{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:10px;text-transform:uppercase;letter-spacing:1.5px;color:var(--sage-dark);margin-bottom:4px}
.ifr-next-steps-text{font-family:'DM Sans',sans-serif;font-size:11px;color:var(--gray-mid);line-height:1.5}
/* Tier legend */
.ifr-tier-legend{display:flex;gap:8px;justify-content:center;padding:8px 0;margin-top:auto;border-top:1px solid var(--border)}
.ifr-tier-item{font-size:8px;color:var(--gray-light);display:flex;align-items:center;gap:4px}
.ifr-tier-dot{width:6px;height:6px;border-radius:50%}
/* Footer */
.ifr-footer{background:white;padding:10px 44px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--border)}
.ifr-footer-logo{height:32px;width:auto;margin-right:12px}
.ifr-footer-logo-text{font-family:'Cormorant Garamond',Georgia,serif;font-size:18px;font-weight:600;font-style:italic;color:#3a4a3f;margin-right:12px;white-space:nowrap;letter-spacing:0.3px}
.ifr-footer-info{font-size:8px;color:var(--gray-light);line-height:1.5}
.ifr-sig-line{border-bottom:1px solid var(--gray-light);min-width:120px;padding-bottom:2px;margin-bottom:2px;min-height:14px}
.ifr-sig-label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:7px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);font-weight:400}
.ifr-sig-name{font-size:10px;color:var(--gray-dark)}
/* Report type toggle in print bar */
.report-type-toggle{display:flex;gap:4px;margin-left:12px}
.report-type-btn{font-family:'DM Sans',sans-serif;font-size:11px;padding:4px 12px;border:1px solid rgba(255,255,255,0.25);border-radius:5px;background:transparent;color:rgba(255,255,255,0.7);cursor:pointer;transition:all 0.15s}
.report-type-btn.active{background:rgba(255,255,255,0.2);color:white;border-color:rgba(255,255,255,0.4)}
/* Cluster A — report bar (toggle removed). Auto-detected type shown as a quiet
   label; a low-profile underlined link offers the reactivation escape hatch. */
.report-bar-left{display:flex;align-items:center;gap:14px;min-width:0}
.report-type-meta{display:inline-flex;align-items:center;gap:10px;font-size:12px}
.report-type-name{color:white;font-weight:500}
.report-type-switch{font-family:'DM Sans',sans-serif;font-size:11px;background:transparent;border:none;color:rgba(255,255,255,0.7);text-decoration:underline;cursor:pointer;padding:0}
.report-type-switch:hover{color:white}
/* R-2 — email modal recommended-program preview (expands when "Report +
   Recommendations" is selected). A real summary of the enabled phases. */
.lr-recs-preview{margin-top:10px;padding:10px 12px;background:var(--sage-mist);border:1px solid var(--sage-light);border-radius:8px}
.lr-recs-list{list-style:none;margin:0;padding:0}
.lr-recs-list li{font-size:12px;color:var(--gray-dark);line-height:1.6;padding:2px 0}
.lr-recs-phase{font-weight:600;color:var(--sage-dark)}
/* Recommended plan textarea */
.plan-counter{font-size:9px;color:var(--gray-light);text-align:right;margin-top:3px}
.plan-counter.warn{color:var(--warm)}
/* Progress Report — Editorial Letter */
.pr-content{padding:22px 44px;flex:1;display:flex;flex-direction:column}
.pr-greeting{font-family:'Cormorant Garamond',serif;font-size:24px;font-weight:300;font-style:italic;color:var(--gray-dark);margin-bottom:6px;line-height:1.3}
.pr-greeting em{color:var(--sage-dark);font-style:italic}
.pr-narrative-row{display:flex;align-items:flex-start;gap:24px;margin-bottom:14px}
.pr-narrative-text{flex:1;font-size:12px;color:var(--gray-mid);line-height:1.7;max-width:540px}
.pr-narrative-text .pr-focus-bold{font-weight:600;color:var(--gray-dark)}
.pr-score-callout{text-align:center;flex-shrink:0;padding:12px 16px;border:1.5px solid var(--sage-light);border-radius:10px;background:var(--sage-mist)}
.pr-score-callout-num{font-family:'DM Sans',sans-serif;font-size:44px;font-weight:300;color:var(--sage-dark);line-height:1;font-variant-numeric:tabular-nums}
.pr-score-callout-label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:7px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);margin-top:4px}
.pr-delta-badge{display:inline-block;font-size:11px;font-weight:500;padding:2px 8px;border-radius:9999px;margin-top:6px}
.pr-delta-badge.positive{background:var(--sage);color:white}
.pr-delta-badge.negative{background:var(--warm);color:white}
.pr-delta-badge.neutral{background:var(--gray-light);color:white}
.pr-tier-change{font-size:11px;color:var(--sage-dark);font-weight:500;margin-top:4px}
/* Sparkline */
.pr-sparkline{position:relative;height:100px;margin-bottom:14px;border:1px solid var(--border);border-radius:10px;background:white;overflow:hidden;padding:8px}
.pr-sparkline canvas{width:100%!important;height:100%!important}
.pr-sparkline-img{width:100%;height:84px;object-fit:contain;display:none}
.pr-sparkline-fallback{display:flex;align-items:center;justify-content:center;height:100%;gap:12px;font-family:'DM Sans',sans-serif}
.pr-sparkline-fallback .pr-fb-score{font-size:32px;font-weight:300;color:var(--sage-dark);font-variant-numeric:tabular-nums}
.pr-sparkline-fallback .pr-fb-arrow{font-size:20px;color:var(--gray-light)}
.pr-sparkline-fallback .pr-fb-delta{font-size:14px;font-weight:500;color:var(--sage)}
/* Domain progress cards */
.pr-domain-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:14px}
.pr-domain-grid.cols-2{grid-template-columns:repeat(2,1fr)}.pr-domain-grid.cols-1{grid-template-columns:1fr;max-width:320px}
.pr-domain-card{border:1px solid var(--border);border-radius:10px;padding:12px 14px;background:white}
.pr-domain-card.not-assessed{opacity:0.55}
.pr-card-domain{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:1.5px;text-transform:uppercase;font-weight:400;margin-bottom:4px}
.pr-card-domain.sage{color:var(--sage)}.pr-card-domain.blue{color:var(--blue)}.pr-card-domain.warm{color:var(--warm-dark)}
.pr-card-score{font-family:'DM Sans',sans-serif;font-size:26px;font-weight:300;color:var(--sage-dark);line-height:1;margin-bottom:4px;font-variant-numeric:tabular-nums}
.pr-card-score span{font-family:'DM Sans',sans-serif;font-size:10px;color:var(--gray-light)}
.pr-card-deltas{display:flex;gap:6px;margin-bottom:6px;flex-wrap:wrap}
.pr-card-delta{font-size:9px;font-weight:500;padding:1px 6px;border-radius:9999px}
.pr-card-delta.positive{background:var(--sage-mist);color:var(--sage-dark)}
.pr-card-delta.negative{background:var(--warm-mist);color:var(--warm-dark)}
.pr-card-delta.neutral{background:#f0f2f0;color:var(--gray-light)}
.pr-card-bar{height:4px;background:#E4EBE6;border-radius:2px;margin-bottom:6px;overflow:hidden}
.pr-bar-fill{height:100%;border-radius:2px}
.pr-bar-fill.sage{background:var(--sage)}.pr-bar-fill.blue{background:var(--blue)}.pr-bar-fill.warm{background:var(--warm)}
.pr-card-note{font-size:10px;color:var(--gray-mid);line-height:1.5;font-style:italic}
.pr-card-na-note{font-size:9px;color:var(--gray-light);font-style:italic;margin-top:4px}
/* Two-column findings + plan */
.pr-two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px;flex:1}
.pr-col-label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:2px;text-transform:uppercase;color:var(--sage);font-weight:400;margin-bottom:10px}
.pr-col-label.warm{color:var(--warm)}
.pr-finding-list{list-style:none;padding:0}
.pr-finding-list li{font-size:11px;color:var(--gray-mid);line-height:1.5;padding:4px 0 4px 14px;border-bottom:1px solid var(--sage-mist);position:relative}
.pr-finding-list li::before{content:'';position:absolute;left:0;top:9px;width:6px;height:6px;border-radius:50%;background:var(--sage-light)}
.pr-finding-list li.positive::before{background:var(--sage)}
.pr-finding-list li.attention::before{background:var(--warm)}
.pr-plan-box{background:var(--warm-mist);border:1px solid var(--warm-light);border-radius:8px;padding:14px}
.pr-plan-title{font-family:'Cormorant Garamond',serif;font-size:16px;font-weight:300;font-style:italic;color:var(--gray-dark);margin-bottom:8px}
.pr-plan-text{font-size:11px;color:var(--gray-mid);line-height:1.7;white-space:pre-line}
.pr-plan-empty{font-size:11px;color:var(--gray-light);font-style:italic}
/* Section label, bridge text, notice list */
.pr-section-label{font-size:8px;letter-spacing:2px;text-transform:uppercase;color:var(--sage);margin-bottom:8px}
.pr-bridge-text{font-family:'Cormorant Garamond',serif;font-size:16px;font-weight:300;font-style:italic;color:var(--gray-dark);margin:12px 0 8px;line-height:1.4}
.pr-notice-list{list-style:none;padding:0;margin-bottom:14px}
.pr-notice-list li{font-size:10.5px;color:var(--gray-mid);line-height:1.6;padding:4px 0 4px 14px;position:relative}
.pr-notice-list li::before{content:'';position:absolute;left:0;top:10px;width:6px;height:6px;border-radius:50%;background:var(--sage)}
/* Tier legend (reuses ifr pattern) */
.pr-tier-legend{display:flex;gap:8px;justify-content:center;padding:8px 0;margin-top:auto;border-top:1px solid var(--border)}
.pr-tier-item{font-size:8px;color:var(--gray-light);display:flex;align-items:center;gap:4px}
.pr-tier-dot{width:6px;height:6px;border-radius:50%}
/* ═══════════════════════════════════════════════════════════
   ═══ CARE PLAN — EDIT MODE (.cp-*) ═══
   ═══════════════════════════════════════════════════════════ */
.cp-topbar{background:var(--sage-dark);padding:18px 32px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100}
.cp-topbar-left{display:flex;align-items:center;gap:12px}
.cp-topbar-title{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:300;font-style:italic;color:white}
.cp-topbar-save{font-size:11px;color:var(--sage-light);opacity:0;transition:opacity 0.3s}.cp-topbar-save.visible{opacity:1}
.cp-topbar-actions{display:flex;gap:10px;align-items:center}
/* Cluster A — Variant C topbar: a thin rule separates the low-contrast ghost
   tools (Edit Plan / Print) from the sage "Send Report Home" primary. */
.cp-topbar-divider{width:1px;height:22px;background:rgba(255,255,255,0.25);margin:0 2px}
/* btn-ghost's base color is var(--sage-dark) — the SAME as the present topbar
   background (.cp-topbar), so the Edit Plan / Print labels render invisible
   (contrast ~1.0). On the dark topbar, render the ghost tools as recessive
   white: low-contrast (the Variant C intent) but legible. (/qa fix) */
.cp-topbar .btn-ghost{color:rgba(255,255,255,0.72);border-color:rgba(255,255,255,0.28);background:transparent}
.cp-topbar .btn-ghost:hover{color:#fff;border-color:rgba(255,255,255,0.5);background:rgba(255,255,255,0.08)}
.cp-topbar-dots{display:flex;gap:8px;align-items:center}
.cp-dot{width:12px;height:12px;border-radius:50%;background:rgba(255,255,255,0.25);cursor:pointer;transition:all 0.15s}
.cp-dot.active{background:var(--sage);box-shadow:0 0 10px rgba(123,166,138,0.6)}
.cp-dot.completed{background:var(--sage)}
.cp-body{max-width:960px;margin:0 auto;padding:28px 24px}
/* v1.8.2.1 /qa Issue#3 — progressive present mode needs wider real estate
   than the 960/820 default to keep the Beat 4 multi-domain trajectory chart
   and chip stacks from feeling cramped on a doctor-Zoom-screen. Modifier is
   toggled by cpRenderProgressivePresentMode entry + cleared on
   cpRenderPresentMode (initial) / cpRenderEditMode entry. Initial-mode
   present + Edit + Settings stay at 960/820. */
.cp-body.cp-body--progressive{max-width:1200px}
.cp-body.cp-body--progressive .cpp-page{max-width:1100px}
/* 2026-05-28 — Care Plan Present Mode (Initial-plan) parallel widening so
   the cranial reveal matches the progressive 1100px max. Pre-fix the Initial
   .cpp-page inherited the default 820px (line ~635) and the 3-beat reveal
   rendered narrower than the 4-beat. Modifier is toggled by care-plan.js
   cpRenderPresentMode (initial entry) and cleared on cpRenderProgressivePresentMode /
   cpRenderEditMode entry, parallel to the --progressive wiring. See
   docs/designs/cranial-present-mode-width-consistency.md.
   IMPORTANT: must widen BOTH .cp-body AND .cpp-page. .cp-body has
   max-width:960px (line 476) with 28px 24px padding; without widening .cp-body
   too, the child .cpp-page rule is a no-op because the parent caps the
   content box at ~912px (960 − 48px padding). Mirrors the existing
   --progressive pattern (line 483 widens .cp-body to 1200 + line 484 widens
   .cpp-page to 1100). Caught by /review Claude adversarial 2026-05-28. */
.cp-body.cp-body--initial{max-width:1200px}
.cp-body.cp-body--initial .cpp-page{max-width:1100px}
.cp-plan-switcher{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap}
.cp-plan-card{position:relative;background:white;border:2px solid var(--border);border-radius:10px;padding:14px 18px;cursor:pointer;min-width:160px;transition:all 0.2s ease}
.cp-plan-card:hover{border-color:var(--sage-light);box-shadow:0 2px 8px rgba(0,0,0,0.06)}
.cp-plan-card.active{border-color:var(--sage);background:var(--cream);cursor:default}
.cp-plan-card.ghost{border:2px dashed var(--border);background:transparent;opacity:0.6}
.cp-plan-card.ghost:hover{opacity:1;border-color:var(--sage-light)}
.cp-plan-card-type{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:var(--gray-dark);font-weight:600}
.cp-plan-card-meta{font-size:11px;color:var(--gray-light);margin-top:4px}
.cp-plan-card-del{position:absolute;top:6px;right:8px;background:none;border:none;color:var(--gray-light);cursor:pointer;font-size:14px;padding:2px 6px;border-radius:4px}
.cp-plan-card-del:hover{background:var(--red-light,#fde8e8);color:var(--red)}
/* Multi-CP V2 (feat/multi-cp-stack): active plan = full card, prior plans = compact chips */
.cp-plan-card.active{min-width:210px}
.cp-plan-card.compact{min-width:0;padding:11px 14px;background:var(--sage-mist);display:flex;flex-direction:column;justify-content:center}
.cp-plan-card.compact .cp-plan-card-type{font-size:10px;letter-spacing:1px}
.cp-plan-card.compact .cp-plan-card-meta{margin-top:3px}
.cp-plan-card-dot{color:var(--sage);font-size:8px;vertical-align:1.5px;margin-right:5px}
.cp-plan-card-dates{font-size:11px;color:var(--gray-light);margin-top:5px;line-height:1.55}
.cp-plan-card-summary{font-size:12px;color:var(--gray-mid);margin-top:7px;padding-top:7px;border-top:1px solid var(--border)}
.cp-plan-card.ghost{display:flex;flex-direction:column;align-items:center;justify-content:center}
.cp-plan-card-ghost-plus{font-size:20px;color:var(--gray-light);line-height:1;margin-bottom:5px}
.cp-plan-card-ghost-label{font-size:12px;font-weight:500;color:var(--gray-mid);text-align:center}
.cp-plan-card.cp-plan-card-older .cp-plan-card-older-icon{font-size:18px;color:var(--gray-light);line-height:1;margin-bottom:4px}
/* walk #16 — "+ New Plan" chooser dropdown */
.cp-newplan-wrap{position:relative;display:inline-flex}
.cp-newplan-menu{display:none;position:absolute;top:calc(100% + 6px);left:0;z-index:60;min-width:236px;background:var(--white);border:1px solid var(--border);border-radius:10px;box-shadow:0 6px 24px rgba(59,63,60,0.16);padding:6px}
.cp-newplan-menu.open{display:block}
.cp-newplan-menu-head{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:1.6px;text-transform:uppercase;color:var(--gray-light);padding:8px 10px 6px}
.cp-newplan-item{display:flex;align-items:flex-start;gap:10px;width:100%;text-align:left;background:none;border:none;border-radius:8px;padding:9px 10px;cursor:pointer;font-family:'DM Sans',sans-serif;transition:background 0.15s}
.cp-newplan-item:hover{background:var(--sage-mist)}
.cp-newplan-item:focus-visible{outline:2px solid var(--sage);outline-offset:-1px}
.cp-newplan-item-dot{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--sage);margin-top:5px}
.cp-newplan-item-reactivation:hover{background:var(--warm-mist)}
.cp-newplan-item-reactivation .cp-newplan-item-dot{background:var(--warm)}
.cp-newplan-item-text{display:flex;flex-direction:column}
.cp-newplan-item-title{font-size:13px;font-weight:600;color:var(--gray-dark)}
.cp-newplan-item-desc{font-size:11.5px;color:var(--gray-mid);margin-top:2px;line-height:1.35}
/* walk #16 — warm Reactivation tone on cards/chips (Initial + Progress unchanged) */
.cp-plan-card.active.cp-type-reactivation{border-color:var(--warm);background:var(--warm-mist)}
.cp-plan-card.compact.cp-type-reactivation{background:var(--warm-mist)}
.cp-plan-card.cp-type-reactivation .cp-plan-card-type{color:var(--warm-dark)}
.cp-plan-card.cp-type-reactivation .cp-plan-card-dot{color:var(--warm)}
.cp-edit-layout{display:grid;grid-template-columns:1fr 300px;gap:24px;min-height:calc(100vh - 52px)}
@media(max-width:959px){.cp-edit-layout{grid-template-columns:1fr}.cp-edit-sidebar{order:2}}
@media(max-width:767px){.cp-tabs{overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}}
.cp-edit-main{min-width:0}
.cp-edit-sidebar{background:white;border:1px solid var(--border);border-radius:12px;padding:20px;height:fit-content;position:sticky;top:80px}
.cp-tabs{display:flex;gap:4px;margin-bottom:20px;background:white;border:1px solid var(--border);border-radius:8px;padding:4px}
.cp-tab{font-family:'DM Sans',sans-serif;font-size:12px;font-weight:600;color:var(--gray-mid);background:none;border:none;cursor:pointer;padding:8px 16px;border-radius:6px;transition:all 0.15s;letter-spacing:0.3px}
.cp-tab.active{background:var(--sage-mist);color:var(--sage-dark)}
.cp-tab:hover:not(.active){color:var(--sage-dark)}
.cp-tab-panel{display:none}.cp-tab-panel.active{display:block}
.cp-card{background:white;border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:16px}
.cp-card-header{background:var(--sage-dark);padding:18px 24px;color:white}
.cp-card-header h2{font-family:'Cormorant Garamond',serif;font-weight:300;font-size:22px;font-style:italic}
.cp-card-body{padding:20px 24px}
.cp-sec-lbl{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);font-weight:400;margin-bottom:10px}
.cp-eyebrow{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:2.5px;text-transform:uppercase;color:var(--sage-light);font-weight:400;margin-bottom:4px}
/* Timeline bar */
.cp-tl-bar{display:flex;height:12px;border-radius:999px;overflow:hidden;background:var(--sage-mist);margin-bottom:8px}
.cp-tl-seg{background:linear-gradient(135deg,var(--sage),var(--sage-dark));display:flex;align-items:center;justify-content:center;position:relative;min-width:20px}
.cp-tl-seg-f{font-size:7px;color:white;font-weight:600;letter-spacing:0.3px}
.cp-tl-total{display:flex;justify-content:space-between;font-size:10px;color:var(--gray-light)}
/* Phase config row */
.cp-phase-row{display:flex;gap:16px;align-items:center;margin-bottom:12px;padding:12px 16px;background:var(--cream);border:1px solid var(--border);border-radius:8px}
.cp-phase-grp{display:flex;flex-direction:column;gap:4px}
.cp-phase-grp label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);font-weight:400}
.cp-num-inp{width:70px;border:1px solid var(--border);border-radius:6px;padding:6px 10px;font-size:14px;font-family:'DM Sans',sans-serif;text-align:center;outline:none;color:var(--gray-dark)}.cp-num-inp:focus{border-color:var(--sage)}
.cp-phase-visits{font-size:12px;color:var(--sage-dark);font-weight:600;margin-left:auto}
/* Service rows */
.cp-svc-row{display:grid;grid-template-columns:36px 1fr 70px 70px 80px;align-items:center;gap:10px;padding:10px 14px;border:1px solid var(--border);border-radius:8px;margin-bottom:6px;transition:all 0.15s;background:white}
.cp-svc-row.exc{opacity:0.5;background:var(--cream)}
.cp-svc-row:hover{border-color:var(--sage-light)}
.cp-svc-icon{width:32px;height:32px;border-radius:50%;background:var(--sage-mist);display:flex;align-items:center;justify-content:center;font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:10px;font-weight:400;color:var(--sage-dark);letter-spacing:0.5px;flex-shrink:0}
.cp-svc-icon.off{background:var(--gray-light);color:var(--gray-mid)}
.cp-svc-info{min-width:0}
.cp-svc-name{font-size:13px;font-weight:500;color:var(--gray-dark)}
.cp-svc-desc{font-size:10px;color:var(--gray-light);margin-top:2px;line-height:1.4}
.cp-edit-inp{border:1px solid var(--border);border-radius:5px;padding:5px 8px;font-size:12px;font-family:'DM Sans',sans-serif;text-align:center;outline:none;color:var(--gray-dark);width:100%}.cp-edit-inp:focus{border-color:var(--sage)}
/* D4: Benefits input in Program Value cards. Distinct from .cp-edit-inp so it doesn't read as a checkbox. */
.cp-benefit-wrap{padding:6px 0 0 36px}
.cp-benefit-label{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:9px;text-transform:uppercase;letter-spacing:1.5px;color:var(--gray-light);margin-bottom:3px;display:flex;align-items:center;gap:5px}
.cp-benefit-label::before{content:'\270D';font-size:10px;color:var(--sage)}
.cp-benefit-inp{width:100%;background:var(--sage-mist);border:none;border-left:3px solid var(--sage-light);border-radius:0 5px 5px 0;padding:7px 10px 7px 12px;font-family:'DM Sans',sans-serif;font-size:12px;color:var(--gray-dark);outline:none;transition:border-color 0.15s,background-color 0.15s}
.cp-benefit-inp:focus{border-left-color:var(--sage);background:white}
.cp-benefit-inp::placeholder{color:var(--gray-light);font-style:italic}
.cp-svc-tot{font-size:13px;font-weight:600;color:var(--sage-dark);text-align:right;font-variant-numeric:tabular-nums}
.cp-svc-toggle{padding:4px 10px;border:1px solid var(--border);border-radius:5px;background:white;cursor:pointer;font-size:10px;color:var(--gray-mid);font-family:'DM Sans',sans-serif;transition:all 0.15s}
.cp-svc-toggle.on{background:var(--sage-mist);border-color:var(--sage);color:var(--sage-dark)}
/* Total rows */
.cp-tot-row{display:flex;justify-content:space-between;align-items:center;padding:8px 14px;font-size:13px;color:var(--gray-mid);border-bottom:1px solid var(--border)}
.cp-tot-row:last-child{border-bottom:none}
.cp-tot-row.grand{background:var(--cream);font-weight:600;color:var(--gray-dark);font-size:14px}
.cp-tot-row.plan{background:var(--sage-mist);color:var(--sage-dark);font-weight:600}
/* Correction timeline card */
.cp-corr-card{background:var(--sage-mist);border:1px solid var(--sage-light);border-radius:10px;padding:16px 20px;margin-bottom:16px}
.cp-corr-card .cp-corr-row{display:flex;align-items:center;gap:12px;margin-bottom:8px}
.cp-corr-card .cp-corr-label{font-size:13px;color:var(--gray-dark);font-weight:500}
/* Visit total callout */
.cp-vtc{display:flex;align-items:center;gap:20px;background:var(--sage-dark);border-radius:10px;padding:16px 24px;margin-top:12px;color:white}
.cp-vtc-num{font-family:'DM Sans',sans-serif;font-size:48px;font-weight:300;font-variant-numeric:tabular-nums;flex-shrink:0}
.cp-vtc-info h3{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:18px}
.cp-vtc-info p{font-size:12px;color:var(--sage-light);margin-top:4px;line-height:1.6}
/* Investment summary card */
.cp-sum-card{background:var(--cream);border:1px solid var(--border);border-radius:12px;padding:18px 22px;margin-bottom:12px}
.cp-sum-card h3{font-family:'Cormorant Garamond',serif;font-size:18px;font-weight:300;font-style:italic;color:var(--sage-dark);margin-bottom:10px}
.cp-sum-row{display:flex;justify-content:space-between;align-items:center;padding:6px 0;border-bottom:1px solid var(--border);font-size:12px}
.cp-sum-row:last-child{border-bottom:none}
.cp-sum-row .lbl{color:var(--gray-mid)}.cp-sum-row .val{font-weight:600;font-variant-numeric:tabular-nums}
.cp-sum-hl{border-top:2px solid var(--sage-light)!important;margin-top:4px;padding-top:10px!important;border-bottom:none!important}
.cp-sum-hl .lbl{color:var(--sage);font-weight:600;font-size:13px}.cp-sum-hl .val{color:var(--sage);font-size:14px}
/* Payment option cards (edit mode) */
.cp-opt-wrap{max-height:0;overflow:hidden;opacity:0;transition:max-height 0.3s ease,opacity 0.2s ease}
.cp-opt-wrap.shown{max-height:400px;opacity:1}
.cp-opt-card{background:var(--cream);border:1px solid var(--border);border-radius:12px;padding:18px 22px;margin-bottom:12px}
.cp-opt-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.cp-opt-hdr h3{font-family:'Cormorant Garamond',serif;font-size:18px;font-weight:300;font-style:italic;color:var(--sage-dark)}
.cp-best-badge{background:var(--sage);color:white;font-size:9px;font-weight:600;padding:3px 10px;border-radius:20px;letter-spacing:0.5px;font-family:'DM Sans',sans-serif}
.cp-pay-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(max-width:500px){.cp-pay-grid{grid-template-columns:1fr}}
.cp-pay-card{border-radius:8px;padding:13px 15px;border:1px solid transparent}
.cp-pay-sp{background:var(--cream);border-color:var(--border)}
.cp-pay-ins{background:var(--sage-mist);border-color:var(--sage-light)}
.cp-pay-lbl{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:1.5px;text-transform:uppercase;font-weight:400;margin-bottom:6px}
.cp-pay-sp .cp-pay-lbl{color:var(--gray-light)}.cp-pay-ins .cp-pay-lbl{color:var(--sage)}
.cp-pay-amt{font-family:'DM Sans',sans-serif;font-size:24px;font-weight:300;color:var(--gray-dark);line-height:1.1;margin-bottom:3px;font-variant-numeric:tabular-nums}
.cp-pay-ins .cp-pay-amt{color:var(--sage-dark)}
.cp-pay-detail{font-size:10.5px;color:var(--gray-mid);line-height:1.5}
.cp-pay-ins .cp-pay-detail{color:var(--sage);opacity:0.8}
.cp-pay-save{font-size:10px;font-weight:600;color:var(--sage-dark);margin-top:4px}
.cp-fine-print{background:var(--cream);border-radius:8px;padding:11px 14px;font-size:10.5px;color:var(--gray-mid);line-height:1.7;margin-top:3px}
/* Reveal buttons (edit sidebar) */
.cp-rev-btn{width:100%;padding:8px 10px;border-radius:6px;border:none;font-size:11px;font-weight:600;cursor:pointer;margin-bottom:5px;display:flex;align-items:center;gap:6px;transition:all 0.15s;font-family:'DM Sans',sans-serif;text-align:left;letter-spacing:0.3px}
.cp-rev-btn.pending{background:var(--sage-mist);color:var(--sage-dark)}.cp-rev-btn.done{background:var(--sage-light);color:var(--sage-dark);cursor:pointer}.cp-rev-btn.locked{background:var(--cream);color:var(--gray-light);cursor:default}
.cp-rev-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.pending .cp-rev-dot{background:var(--sage)}.done .cp-rev-dot{background:var(--sage-dark)}.locked .cp-rev-dot{background:var(--gray-light)}
.cp-reset-btn{width:100%;padding:6px;border:1px solid var(--border);border-radius:6px;background:white;color:var(--gray-mid);font-size:10.5px;cursor:pointer;margin-top:4px;font-family:'DM Sans',sans-serif;transition:all 0.15s}
.cp-reset-btn:hover{border-color:var(--red);color:var(--red)}
/* Insurance sidebar fields */
.cp-ins-field{display:flex;flex-direction:column;gap:3px;margin-bottom:7px}
.cp-ins-field label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;font-weight:400;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light)}
.cp-ins-inp{width:100%;border:1px solid var(--border);border-radius:6px;padding:6px 8px;font-size:12px;font-family:'DM Sans',sans-serif;outline:none;background:white;transition:border-color 0.15s;color:var(--gray-dark)}.cp-ins-inp:focus{border-color:var(--sage)}
.cp-ins-sel{width:100%;border:1px solid var(--border);border-radius:6px;padding:6px 8px;font-size:12px;font-family:'DM Sans',sans-serif;outline:none;background:white;cursor:pointer;color:var(--gray-dark)}
.cp-sp-h{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:1.5px;text-transform:uppercase;font-weight:400;color:var(--sage);margin-bottom:5px}
.cp-sp-sub{font-size:10.5px;color:var(--gray-mid);line-height:1.5;margin-bottom:9px}
.cp-sp-div{height:1px;background:var(--border);margin:10px 0}
.cp-display-toggle{display:flex;gap:4px;margin-bottom:8px}
.cp-display-toggle button{flex:1;padding:6px;border:1px solid var(--border);border-radius:5px;background:white;font-family:'DM Sans',sans-serif;font-size:11px;cursor:pointer;color:var(--gray-mid);transition:all 0.15s}
.cp-display-toggle button.active{background:var(--sage-mist);border-color:var(--sage);color:var(--sage-dark)}
.cp-danger-btn{background:transparent;border:1px solid var(--red);color:var(--red);padding:8px 18px;border-radius:5px;font-family:'DM Sans',sans-serif;font-size:12px;font-weight:600;cursor:pointer;transition:background-color 0.15s,color 0.15s}
.cp-danger-btn:hover{background:var(--red);color:white}
.cp-danger-btn:focus-visible{outline:2px solid var(--red);outline-offset:1px}

/* ═══════════════════════════════════════════════════════════
   ═══ CARE PLAN — PRESENT MODE (.cpp-*) ═══
   ═══════════════════════════════════════════════════════════ */
.cpp-container{background:var(--cream);min-height:calc(100vh - 52px);border-radius:16px;margin:16px;box-shadow:0 4px 24px rgba(0,0,0,0.06)}
.cpp-tabs{position:relative}
.cp-rate-toggle{position:absolute;right:24px;top:50%;transform:translateY(-50%);display:flex;gap:4px}
.cp-rate-pill{font-family:'DM Sans',sans-serif;font-size:11px;font-weight:500;padding:6px 12px;border-radius:5px;background:transparent;color:var(--gray-mid);border:1px solid #D4DDD7;cursor:pointer;transition:background-color 0.15s ease,border-color 0.15s ease,color 0.15s ease;letter-spacing:0.2px}
.cp-rate-pill:hover:not(.active){background:rgba(196,221,204,0.25);color:var(--sage-dark)}
.cp-rate-pill.active{background:#C4DDCC;color:#4E7A5E;border-color:#7BA68A;cursor:default}
.cp-rate-pill:focus-visible{outline:2px solid #7BA68A;outline-offset:2px}
.cpp-content{max-width:820px;margin:0 auto;padding:32px 24px 80px}
/* ── Tabs — exact BB pattern ── */
.cpp-tabs{display:flex;gap:24px;justify-content:center;padding:16px 16px 0;background:var(--cream)}
.cpp-tab{font-family:'DM Sans',sans-serif;font-size:15px;font-weight:600;color:var(--gray-light);background:none;border:none;cursor:pointer;padding:8px 4px;border-bottom:3px solid transparent;transition:all .15s;letter-spacing:.3px}
.cpp-tab.active{color:var(--sage-dark);border-bottom-color:var(--sage)}
.cpp-tab:hover:not(.active){color:var(--gray-mid)}
/* ── Tab pages — exact BB pattern (size-bumped) ── */
.cpp-page{display:none;padding:24px 16px 80px;max-width:820px;margin:0 auto}.cpp-page.active{display:block}
/* CP-1 (Direction B): on a present (a Zoom screen-share) the forward CTA must
   stay visible even when the slide is taller than the viewport — the Findings
   slide especially, with its hero cranial viz pushing "Continue" below the
   fold. Pin the next-action row to the bottom of the scrolling page as a soft
   cream action bar; the slide content scrolls under it. The page's 80px bottom
   padding gives the sticky row room to lift off the end. Present mode only
   (scoped under .cpp-container > .cpp-page), so edit mode is untouched. The
   forward CTAs live in .lr-continue-row (Findings) and .lr-step-row (every
   other present tab); both get pinned so each slide's next action reads in the
   same spot — that consistency is the vertical-rhythm half of CP-1. */
.cpp-container .cpp-page .lr-continue-row,
.cpp-container .cpp-page .lr-step-row{position:sticky;bottom:0;background:var(--white);border-top:1px solid var(--border);box-shadow:0 -16px 28px -12px rgba(0,0,0,0.18);z-index:5}
/* ── Service rows — exact BB pattern ── */
.cpp-svc-row{display:flex;align-items:flex-start;gap:10px;padding:10px 14px;font-size:14px;font-weight:500;color:var(--gray-dark);transition:opacity .4s ease}
.cpp-svc-row .cp-svc-icon{width:28px;height:28px;font-size:9px;flex-shrink:0}
.cpp-svc-info{flex:1}
.cpp-svc-name{font-weight:500}
.cpp-svc-desc{font-size:11px;color:var(--gray-mid);font-weight:400;margin-top:2px;line-height:1.5}
.cpp-svc-removed{opacity:.3;text-decoration:line-through;color:var(--gray-light)}
.cpp-svc-removed .cp-svc-icon{background:var(--gray-light)!important}
.cpp-svc-toggled-off{opacity:.5}
.cpp-svc-toggled-off .cp-svc-icon{background:var(--gray-light)!important}
/* ── Value totals — exact BB pattern ── */
.cpp-val-totals{margin-top:16px;border-top:2px solid var(--border);padding-top:16px;text-align:center}
.cpp-val-total{font-family:'DM Sans',sans-serif;font-size:36px;font-weight:300;color:var(--gray-dark);font-variant-numeric:tabular-nums;transition:all .4s ease}
.cpp-val-total-struck{text-decoration:line-through;color:var(--gray-light);opacity:.5;font-size:22px}
.cpp-val-total-lbl{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);margin-top:-4px}
.cpp-val-custom-total{font-family:'DM Sans',sans-serif;font-size:36px;font-weight:300;color:var(--sage-dark);font-variant-numeric:tabular-nums;padding:8px 0;animation:cppFadeIn .2s ease}
.cpp-val-custom-lbl{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--sage-dark);font-weight:400}
.cpp-val-save{font-size:13px;font-weight:600;color:var(--warm);margin-top:4px}
@keyframes cppFadeIn{from{opacity:0}to{opacity:1}}
/* ── Step/action buttons — exact BB pattern (size-bumped) ── */
.cpp-step-btn{display:block;margin:20px auto;padding:16px 36px;border:none;border-radius:10px;background:var(--sage);color:white;font-family:'DM Sans',sans-serif;font-size:14px;font-weight:600;cursor:pointer;transition:all .15s;letter-spacing:.3px}
.cpp-step-btn:hover{background:var(--sage-dark)}
/* walk #17 — the sticky present-mode "Continue" footer sat ~121px tall (the
   button's 20px vertical margins + 16px vertical padding stacked above the
   page's 80px bottom pad). Slim the footer CTA so more slide content reads above
   the fold. Scoped to the sticky rows only, so mid-page CTAs that reuse
   .cpp-step-btn (e.g. Customize) keep their original size. */
.cpp-container .cpp-page .lr-continue-row .cpp-step-btn,
.cpp-container .cpp-page .lr-step-row .cpp-step-btn{margin:10px auto;padding:12px 34px}
/* Secondary "back" variant for the bidirectional cranial reveal flow.
   Visually subordinate to the primary step button — outlined, sage-dark text,
   smaller padding so the eye still lands on Forward as the dominant action. */
.cpp-step-btn-back{padding:14px 28px;border:1px solid var(--border);border-radius:10px;background:transparent;color:var(--sage-dark);font-family:'DM Sans',sans-serif;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s;letter-spacing:.3px}
.cpp-step-btn-back:hover{background:var(--sage-mist);border-color:var(--sage-light)}
.cpp-step-btn-back:disabled,.cpp-step-btn:disabled{cursor:not-allowed}
.cpp-customize-btn{display:block;margin:20px auto;padding:16px 36px;border:none;border-radius:10px;background:var(--warm);color:white;font-family:'DM Sans',sans-serif;font-size:14px;font-weight:600;cursor:pointer;transition:all .15s;letter-spacing:.3px}
.cpp-customize-btn:hover{background:var(--warm-dark)}
/* ── Present investment — exact BB pattern (size-bumped) ── */
.cpp-inv-hero{text-align:center;padding:24px 0 8px}
.cpp-inv-hero-num{font-family:'DM Sans',sans-serif;font-size:52px;font-weight:300;color:var(--sage-dark);font-variant-numeric:tabular-nums}
.cpp-inv-hero-lbl{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);margin-top:4px}
/* Progressive (re-enrollment) investment phase label + schedule line (walk #23).
   These two classes are emitted by care-plan.js but were never defined: PR-ε
   (82ceec1) swapped the original inline styles for class names and dropped the
   rules, so the phase eyebrow + schedule rendered as raw 16px black text under
   the centered hero. Restores the pre-PR-ε sage-uppercase eyebrow + 13px gray
   schedule, centered to line up under the $price hero and the reveal buttons. */
.lr-phase-eyebrow{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:10px;text-transform:uppercase;letter-spacing:2px;color:var(--sage-dark);margin:20px 0 8px;text-align:center}
.lr-fs13-mid-mb12{font-size:13px;color:var(--gray-mid);margin-bottom:12px;text-align:center}
.cpp-sp-toggle{display:block;margin:8px auto;padding:6px 16px;border:1px solid var(--border);border-radius:6px;background:white;font-family:'DM Sans',sans-serif;font-size:11px;font-weight:600;color:var(--gray-mid);cursor:pointer}
/* ── Reveal buttons row — exact BB pattern ── */
.cpp-reveal-row{display:flex;gap:8px;justify-content:center;margin:16px 0;flex-wrap:wrap}
.cpp-reveal-btn{padding:10px 20px;border-radius:10px;border:none;font-family:'DM Sans',sans-serif;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s;letter-spacing:.3px}
.cpp-reveal-btn.pending{background:var(--sage-mist);color:var(--sage-dark)}
/* INV-3: reveal pills toggle, so .done stays clickable (cursor:pointer). */
.cpp-reveal-btn.done{background:var(--sage-light);color:var(--sage-dark);cursor:pointer}
/* ── Investment cards (INV-2/4 redesign) ──
   Centred flex (was a fixed 3-col grid) so the revealed cards stay centred as a
   group and re-centre as more reveal — and so Pay in Full reads as the centre
   anchor. Only revealed cards are rendered (the .shown opacity/max-height base
   stays for the highlight + any reduced-motion handling). */
.cpp-inv-cards{display:flex;justify-content:center;align-items:stretch;flex-wrap:wrap;gap:14px;margin-top:16px}
.cpp-inv-card{flex:0 1 280px;max-width:300px;background:var(--cream);border:1px solid var(--border);border-radius:12px;padding:20px;text-align:center;opacity:0;max-height:0;overflow:hidden;transition:all .4s ease}
.cpp-inv-card.shown{opacity:1;max-height:260px;padding:24px 20px}
.cpp-inv-card.cpp-card-highlight{border-color:var(--sage);box-shadow:0 0 0 2px var(--sage-light)}
.cpp-card-badge{display:inline-block;background:var(--sage);color:white;font-size:9px;font-weight:600;padding:3px 10px;border-radius:20px;margin-bottom:8px;letter-spacing:.5px}
.cpp-card-title{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);margin-bottom:8px}
.cpp-card-amt{font-family:'DM Sans',sans-serif;font-size:28px;font-weight:300;color:var(--sage-dark);font-variant-numeric:tabular-nums;margin-bottom:8px}
.cpp-card-unit{font-size:14px;font-weight:300;color:var(--gray-mid)}
.cpp-card-detail{font-size:12px;color:var(--gray-mid)}
.cpp-card-save{font-size:11px;font-weight:600;color:var(--sage-dark);margin-top:6px}
.cpp-valid{text-align:center;font-size:11px;color:var(--gray-light);margin-top:16px}
/* ── Embedded report — exact BB pattern ── */
.cp-embedded-report{background:var(--cream);border-radius:10px;overflow:hidden;color:var(--gray-dark)}
/* ── Narrative intro — BB pattern with LR colors ── */
.cpp-narr-intro{font-size:16px;color:var(--gray-mid);line-height:1.7;margin-bottom:20px}
.cpp-narr-intro strong{color:var(--gray-dark);font-weight:600}
/* ── Phase blocks — BB pattern with LR colors ── */
.cpp-phase-block{border-left:4px solid;border-radius:0 10px 10px 0;padding:16px 20px;margin-bottom:14px}
.cpp-phase-block-1{border-color:var(--sage-dark);background:var(--sage-mist)}
.cpp-phase-block-label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--gray-light);margin-bottom:6px}
.cpp-phase-block-title{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:300;font-style:italic;color:var(--sage-dark);margin-bottom:6px}
.cpp-phase-block-detail{font-size:13px;color:var(--gray-mid)}
.cpp-phase-block-visits{font-family:'DM Sans',sans-serif;font-size:24px;font-weight:300;font-variant-numeric:tabular-nums;margin-top:8px;color:var(--sage-dark)}
.cpp-phase-block-visits span{font-size:12px;color:var(--gray-light);font-weight:400}
/* ── Timeline bar (present, larger) ── */
.cpp-tl-bar{display:flex;height:20px;border-radius:999px;overflow:hidden;background:var(--sage-mist);margin-bottom:12px}
.cpp-tl-phase{background:linear-gradient(135deg,var(--sage),var(--sage-dark));border-radius:999px;display:flex;align-items:center;justify-content:center}
.cpp-tl-full{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:7px;letter-spacing:1px;color:var(--gray-light);margin-top:4px;display:flex;justify-content:space-between}
/* ── Recommendations tab — care timeline + phase detail ── */
.cpp-tl-section{margin-bottom:24px}
.cpp-tl-label{font-size:9px;text-transform:uppercase;letter-spacing:2px;color:var(--sage);margin-bottom:8px}
.cpp-tl-full-bar{display:flex;border-radius:10px;overflow:hidden;height:44px;background:var(--sage-mist)}
.cpp-tl-active{display:flex;align-items:center;justify-content:center;background:var(--sage-dark);color:white;border-radius:10px;z-index:1;text-align:center}
.cpp-tl-active-freq{font-size:13px;font-weight:600;line-height:1.2}
.cpp-tl-active-phase{font-size:9px;opacity:0.8}
.cpp-tl-remaining{flex:1;display:flex;align-items:center;justify-content:center;color:var(--gray-mid);font-size:11px}
.cpp-tl-markers{display:flex;justify-content:space-between;margin-top:6px;font-size:9px;color:var(--gray-light)}
.cpp-tl-now{color:var(--sage-dark);font-weight:600}
.cpp-rec-phase{border-left:4px solid var(--sage-dark);border-radius:0 10px 10px 0;padding:18px 22px;margin-bottom:20px;background:var(--sage-mist)}
.cpp-rec-phase-label{font-size:9px;text-transform:uppercase;letter-spacing:2px;color:var(--gray-light);margin-bottom:6px}
.cpp-rec-phase-title{font-family:'Cormorant Garamond',serif;font-size:22px;font-weight:300;font-style:italic;color:var(--gray-dark);margin-bottom:10px}
.cpp-rec-phase-stats{display:flex;align-items:center;gap:12px}
.cpp-rec-stat-box{text-align:center;flex:1;padding:12px;background:rgba(255,255,255,0.7);border-radius:8px;border:1px solid var(--sage-light)}
.cpp-rec-stat-num{font-size:22px;font-weight:300;color:var(--sage-dark);font-variant-numeric:tabular-nums}
.cpp-rec-stat-detail{font-size:11px;color:var(--gray-light);margin-top:2px}
.cpp-rec-notice{margin-top:20px}
.cpp-rec-notice-label{font-size:9px;text-transform:uppercase;letter-spacing:2px;color:var(--sage);margin-bottom:12px}
.cpp-rec-notice-item{display:flex;align-items:flex-start;gap:10px;padding:10px 14px;background:var(--sage-mist);border-radius:8px;margin-bottom:8px}
.cpp-rec-notice-item:last-child{margin-bottom:0}
.cpp-rec-notice-dot{width:8px;height:8px;border-radius:50%;background:var(--sage);flex-shrink:0;margin-top:5px}
.cpp-rec-notice-text{font-size:12px;color:var(--gray-mid);line-height:1.5}
/* ── Families Often Notice pills ── */
.cpp-notice-strip{padding:16px 0;margin-top:12px}
.cpp-notice-label{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:2px;text-transform:uppercase;color:var(--sage);font-weight:400;margin-bottom:8px}
.cpp-notice-pills{display:flex;flex-wrap:wrap;gap:6px}
.cpp-notice-pill{font-size:10px;padding:4px 12px;border-radius:9999px;font-weight:500}
.cpp-notice-pill.primary{background:var(--sage-mist);color:var(--sage-dark);border:1px solid var(--sage-light)}
.cpp-notice-pill.secondary{background:white;color:var(--gray-mid);border:1px solid var(--border)}
.pill-selector{display:inline-flex;border-radius:20px;overflow:hidden;border:1px solid var(--border)}
.pill-opt{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:10px;letter-spacing:1px;text-transform:uppercase;padding:6px 16px;border:none;background:var(--white);color:var(--gray-mid);cursor:pointer;transition:background 0.15s,color 0.15s}
.pill-opt.active{background:var(--sage);color:white}
/* ── Looking Ahead callout ── */
.cp-looking-ahead{background:var(--sage-mist);border:1px solid var(--sage-light);border-radius:8px;padding:14px}
.cp-looking-ahead-title{font-family:'Cormorant Garamond',serif;font-size:16px;font-weight:300;font-style:italic;color:var(--sage-dark);margin-bottom:6px}
.cp-looking-ahead-text{font-size:11px;color:var(--gray-mid);line-height:1.7}
.cp-looking-ahead-icon{font-size:16px;margin-right:4px}

/* ═══════════════════════════════════════════════════════════
   ═══ CARE PLAN — SETTINGS (.cp-settings-*) ═══
   ═══════════════════════════════════════════════════════════ */
.cp-settings-body{max-width:720px;margin:0 auto;padding:28px 24px}
/* Goal 1.4 IMPL1 — inline "← Back to Plan" header shown inside the
   services-pricing Settings section when the doctor arrived via ⚙ Settings
   on a Care Plan. Sits above the first panel; doesn't push layout. */
.cp-settings-backbar{margin-bottom:14px}
.cp-settings-panel{background:white;border:1px solid var(--border);border-radius:12px;padding:20px;margin-bottom:16px}
.cp-settings-panel h3{font-family:'Cormorant Garamond',serif;font-weight:300;font-size:20px;font-style:italic;color:var(--sage-dark);margin-bottom:14px}
.cp-settings-svc{border:1px solid var(--border);border-radius:8px;padding:12px 14px;margin-bottom:8px;display:flex;align-items:center;gap:10px;background:var(--cream)}
.cp-settings-svc-fields{flex:1;display:grid;grid-template-columns:1fr 60px 60px 60px;gap:8px;align-items:center}
@media(max-width:640px){.cp-settings-svc-fields{grid-template-columns:1fr 50px 50px;gap:6px}}
.cp-settings-svc-move{display:flex;flex-direction:column;gap:2px}
.cp-settings-svc-move button{background:none;border:1px solid var(--border);border-radius:4px;padding:2px 6px;cursor:pointer;font-size:10px;color:var(--gray-mid);transition:all 0.15s}
.cp-settings-svc-move button:hover{border-color:var(--sage);color:var(--sage-dark)}

/* ═══ ONBOARDING-PRICING redesign (F6) — shared Settings + wizard component ═══ */
/* Phase orientation primer (#19): compact 3-phase strip rendered at the TOP of
   Settings Services & Pricing so the phase vocabulary lands BEFORE the service
   cards use it. Teaching copy split off the old bottom phase panel (Anthony,
   office hours 2026-06-08); Option A locked via /plan-design-review. Phase names
   reuse the .lr-prc-phase-* colors (warm-dark / sage-dark / blue). */
.lr-phase-primer{background:var(--sage-mist);border:1px solid var(--sage-light);border-radius:10px;padding:12px 16px;margin:4px 0 16px}
.lr-phase-primer-lbl{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--sage-dark);font-weight:600;margin-bottom:9px}
.lr-pp-row{display:flex;align-items:flex-start;gap:8px}
.lr-pp-item{flex:1;min-width:0}
.lr-pp-name{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;display:block;margin-bottom:2px}
.lr-pp-desc{font-size:11.5px;color:var(--gray-mid);line-height:1.35}
.lr-pp-arrow{align-self:center;color:var(--gray-light);font-size:14px;padding-top:2px}
/* ≤768 clinical-screen reflow: stack the phases, drop the arrows (they'd point
   at a vertical layout). No new breakpoint value per DESIGN.md. */
@media (max-width:768px){
  .lr-pp-row{flex-direction:column;gap:8px}
  .lr-pp-arrow{display:none}
}
/* "How it's charged" explainer */
.lr-prc-explain{background:var(--sage-mist);border:1px solid var(--sage-light);border-radius:10px;padding:14px 16px;margin:4px 0 16px}
.lr-prc-explain-title{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--sage-dark);font-weight:600;margin-bottom:11px}
.lr-prc-explain-list{list-style:none;display:flex;flex-direction:column;gap:10px;margin:0;padding:0}
.lr-prc-explain-list li{display:flex;gap:14px;align-items:baseline;font-size:12.5px;color:var(--gray-mid);line-height:1.5}
.lr-prc-te{flex:0 0 84px;font-weight:600;font-size:10px;text-transform:uppercase;letter-spacing:.8px}
.lr-prc-te-pv{color:var(--sage-dark)}
.lr-prc-te-rc{color:var(--blue)}
.lr-prc-te-ot{color:var(--warm-dark)}
.lr-prc-te-desc b{color:var(--gray-dark);font-weight:600}
/* greyed example-fee note */
.lr-prc-fee-note{font-size:11px;color:var(--gray-light);margin:-4px 2px 12px}
/* service card */
.lr-prc-card{padding:14px;border-radius:8px;border:1px solid var(--border);background:var(--white);margin-bottom:12px}
.lr-prc-card.is-unset{border-color:var(--warm);background:var(--warm-mist,#FBF5EF)}
.lr-prc-top{display:flex;align-items:center;gap:10px}
.lr-prc-fields{flex:1;display:grid;grid-template-columns:1fr 100px 100px 180px;gap:10px;align-items:center}
.lr-prc-colhead .lr-prc-fields span{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light)}
.lr-prc-name{font-weight:600}
.lr-prc-del{align-self:center}
/* $-prefixed money input */
.lr-money{position:relative;display:flex;align-items:center}
.lr-money-cur{position:absolute;left:9px;top:50%;transform:translateY(-50%);color:var(--gray-light);font-size:13px;pointer-events:none}
.lr-money .lr-prc-fee{padding-left:19px;width:100%}
/* greyed seeded example fee — solidifies on edit (the marker clears + re-render) */
.lr-fee-eg{color:var(--gray-light);font-style:italic}
/* Theme D #9 — an un-replaced example fee CALLS for attention (warm-mist fill +
   warm border) instead of receding greyed. Warm = "needs your touch", reserved
   from error-red. Clears to the normal calm input on first edit (marker drops +
   re-render). */
.lr-prc-fee-example{background:var(--warm-mist,#FBF5EF);border-color:var(--warm,#C9956B)!important;color:var(--gray-dark)}
.lr-prc-fee-example:focus{border-color:var(--warm,#C9956B);box-shadow:0 0 0 3px rgba(201,149,107,.22)}
/* small warm "example" tag in the fee label */
.lr-fee-eg-tag{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:9999px;background:var(--warm-mist,#FBF5EF);color:var(--warm-dark,#A47245);border:1px solid var(--secondary-light,#E8D4C0);font-family:'ITC Avant Garde Gothic',sans-serif;font-size:8px;letter-spacing:1px;text-transform:uppercase;vertical-align:middle}
/* clickable "N fees still using example amounts" counter — jumps to first example */
.lr-prc-fee-counter{display:inline-flex;align-items:center;gap:6px;margin:0 2px 6px;padding:5px 12px;border-radius:9999px;background:var(--warm-mist,#FBF5EF);border:1px solid var(--secondary-light,#E8D4C0);color:var(--warm-dark,#A47245);font-size:12px;font-weight:600;cursor:pointer;transition:background .15s,border-color .15s}
.lr-prc-fee-counter::before{content:"\25CF";color:var(--warm,#C9956B);font-size:9px}
.lr-prc-fee-counter:hover{background:#F6E9DC;border-color:var(--warm,#C9956B)}
/* screen-reader-only (backs the example-field aria-describedby) */
.lr-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.lr-prc-help{margin-top:9px;font-size:11.5px;color:var(--gray-mid);line-height:1.5}
.lr-prc-help b{color:var(--gray-dark);font-weight:600}
/* per-service detail strip */
.lr-prc-detail{display:grid;grid-template-columns:200px 1fr;gap:18px 26px;margin-top:14px;padding-top:13px;border-top:1px dashed var(--border)}
.lr-prc-detail-item label{display:block;font-family:'ITC Avant Garde Gothic',sans-serif;font-size:9px;letter-spacing:1.2px;text-transform:uppercase;color:var(--gray-light);font-weight:400;margin-bottom:6px}
.lr-prc-icon{width:64px;text-transform:uppercase;text-align:center;letter-spacing:1px}
.lr-prc-minihint{display:block;font-size:10.5px;color:var(--gray-light);line-height:1.45;margin-top:6px}
/* PR-A T1 — variant-B vertical service card (replaces the crammed single grid row) */
/* Option B tighten: reduced padding + a single compact meta row keep each entry short. */
.lr-svc-card{padding:12px 16px}
/* Variant C — name leads the pricing row; flex-grows into a generous min so the
   full name never clips, and the row wraps how-charged before truncating. */
.lr-svc-field-name{flex:1 1 240px;min-width:200px}
.lr-svc-name-inp{width:100%;max-width:380px;font-weight:600;font-size:15px;padding:7px 10px;box-sizing:border-box;text-align:left}
/* compact how-charged segmented for the config (meta) row */
.lr-prc-type-sm .pill-opt{font-size:11px;padding:5px 9px}
.lr-svc-move-inline{flex-shrink:0;align-self:flex-end}
.lr-svc-del-inline{flex-shrink:0;align-self:flex-end}
/* compact single meta row: Code | Phases | Membership */
.lr-svc-meta{display:flex;flex-wrap:wrap;align-items:center;gap:10px 22px;margin-top:11px;padding-top:11px;border-top:1px dashed var(--border)}
.lr-svc-meta-grp{display:inline-flex;align-items:center;gap:8px}
.lr-svc-meta-lbl{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:9px;letter-spacing:1.2px;text-transform:uppercase;color:var(--gray-light)}
.lr-svc-meta .lr-prc-icon{width:48px}
.lr-svc-meta-mem{font-size:12px;color:var(--gray-dark);display:inline-flex;align-items:center;gap:6px}
.lr-pill-xs{font-size:11px;padding:4px 10px;line-height:1.1}
.lr-svc-card-head .cp-settings-svc-move{flex-shrink:0}
.lr-svc-card-head .lr-prc-del{flex-shrink:0;align-self:center}
/* labeled field row — wraps so nothing clips at the 720px wizard width */
.lr-svc-fields{display:flex;flex-wrap:wrap;gap:12px 22px;align-items:flex-end}
.lr-svc-field{display:flex;flex-direction:column;gap:6px;min-width:130px}
.lr-svc-field-lbl{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light)}
.lr-svc-field .lr-money{width:100px}
.lr-svc-field-charged{flex:1;min-width:230px}
.lr-svc-field-charged .lr-prc-type{width:100%}
/* read-only manual-qty override badge on an edit-mode phase service line
   (cpPhaseQtyCell) — surfaces the svc.qty value that actually prices so a line
   total is never unexplained. Edit-screen only, so it lives here not in the
   baked lr-classes.css. */
.lr-svc-qty-fixed{font-size:11px;color:var(--gray-mid);font-variant-numeric:tabular-nums;white-space:nowrap}
/* PR-A T2 — Wellness Membership offer panel + switch */
.lr-mem-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.lr-mem-title{margin-bottom:2px}
.lr-mem-subq{font-size:12.5px;color:var(--gray-mid);line-height:1.5;max-width:480px}
.lr-mem-switch{display:inline-flex;align-items:center;gap:9px;background:none;border:none;cursor:pointer;padding:4px 0;flex-shrink:0}
.lr-mem-switch-track{position:relative;width:44px;height:24px;border-radius:12px;background:var(--gray-light);transition:background .18s;flex-shrink:0}
.lr-mem-switch-thumb{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:var(--white);transition:transform .18s;box-shadow:0 1px 2px rgba(0,0,0,.25)}
.lr-mem-switch.is-on .lr-mem-switch-track{background:var(--sage-dark)}
.lr-mem-switch.is-on .lr-mem-switch-thumb{transform:translateX(20px)}
.lr-mem-switch-label{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:9px;letter-spacing:1.2px;text-transform:uppercase;color:var(--gray-mid)}
.lr-mem-body{margin-top:16px}
.lr-mem-off-note{margin-top:12px;font-size:12.5px;color:var(--gray-mid);line-height:1.6;max-width:520px}
/* "optional" / "defaults" tag beside a panel h3 */
.lr-prc-opt{font-size:10px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:var(--gray-light);margin-left:6px}
.lr-prc-sec-help{font-size:12.5px;color:var(--gray-mid);line-height:1.6;margin-bottom:14px;max-width:560px}
.lr-prc-sec-help b{color:var(--gray-dark);font-weight:600}
/* collapsible wellness-membership panel */
.lr-prc-collapse-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;cursor:pointer}
.lr-prc-collapse-title{margin-bottom:0}
.lr-prc-chev{color:var(--gray-light);font-size:13px;flex-shrink:0;margin-top:6px;transition:transform .15s}
.lr-prc-collapse.open .lr-prc-chev{transform:rotate(180deg)}
.lr-prc-collapse-hint{font-size:12px;color:var(--gray-mid);line-height:1.5;margin-top:5px;max-width:560px}
.lr-prc-collapse-body{display:none;margin-top:14px}
.lr-prc-collapse.open .lr-prc-collapse-body{display:block}
/* care-plan-phases rows (inline "N x/week for M weeks") */
.lr-prc-phase-row{display:grid;grid-template-columns:110px 1fr 240px;gap:14px;align-items:center;padding:9px 0;border-top:1px solid var(--sage-mist)}
.lr-prc-phase-row:first-of-type{border-top:none}
.lr-prc-phase-name{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.8px}
.lr-prc-phase-intensive{color:var(--warm-dark)}
.lr-prc-phase-restorative{color:var(--sage-dark)}
.lr-prc-phase-wellness{color:var(--blue)}
.lr-prc-phase-desc{font-size:12px;color:var(--gray-mid);line-height:1.4}
.lr-prc-phase-cfg{font-size:12px;color:var(--gray-mid);text-align:right}
.lr-prc-xs{width:46px;text-align:center;padding:6px 4px;display:inline-block}
/* tablet / phone reflow (≤768) */
@media(max-width:768px){
  /* PR-A T1: at phone width Full Fee + Self Pay stay side by side, the segmented
     "How it's charged" control drops to its own full-width row. */
  .lr-svc-field{min-width:120px}
  .lr-svc-field-charged{min-width:100%}
  .lr-prc-detail{grid-template-columns:1fr;gap:14px}
  .lr-prc-phase-row{grid-template-columns:1fr;gap:6px;text-align:left}
  .lr-prc-phase-cfg{text-align:left}
  .lr-mem-head{flex-direction:column;gap:12px}
}

/* ═══ CARE PLAN — PRINT ═══ */
.cp-print-page{width:8.5in;background:var(--cream);position:relative;overflow:hidden}
.cp-print-header{background:var(--sage-dark);padding:12px 44px;display:flex;align-items:center;justify-content:space-between;position:relative;overflow:hidden}
.cp-print-header::after{content:'';position:absolute;right:-80px;top:-80px;width:260px;height:260px;border-radius:50%;background:rgba(255,255,255,0.03)}
.cp-print-title{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:9px;letter-spacing:3px;text-transform:uppercase;color:rgba(255,255,255,0.85);font-weight:400}
.cp-print-type{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;letter-spacing:2px;text-transform:uppercase;color:var(--sage-light);font-weight:400}
.cp-print-band{background:var(--sage-mist);border-bottom:1px solid var(--border);padding:10px 44px;display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.cp-print-body{padding:22px 44px;flex:1;display:flex;flex-direction:column}
.cp-print-greeting{font-family:'Cormorant Garamond',serif;font-size:18px;font-weight:300;font-style:italic;color:var(--gray-dark);margin-bottom:12px;line-height:1.3}
.cp-print-svc-row{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid var(--sage-mist);font-size:12px}
.cp-print-svc-icon{width:24px;height:24px;border-radius:50%;background:var(--sage-mist);display:flex;align-items:center;justify-content:center;font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:8px;color:var(--sage-dark);flex-shrink:0}
.cp-print-val-row{display:flex;justify-content:space-between;padding:4px 0;font-size:12px;color:var(--gray-mid)}
.cp-print-val-struck{text-decoration:line-through;opacity:0.4;font-size:11px}
.cp-print-val-custom{font-size:16px;font-weight:600;color:var(--sage-dark)}
.cp-print-pay-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:12px}
.cp-print-pay-card{border:1px solid var(--border);border-radius:8px;padding:10px;text-align:center}
.cp-print-pay-card.highlight{background:var(--sage-mist);border-color:var(--sage)}
.cp-print-pay-title{font-family:'ITC Avant Garde Gothic','DM Sans',sans-serif;font-size:7px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);margin-bottom:4px}
.cp-print-pay-amt{font-family:'DM Sans',sans-serif;font-size:20px;font-weight:300;color:var(--sage-dark);font-variant-numeric:tabular-nums}
.cp-print-pay-detail{font-size:9px;color:var(--gray-mid);margin-top:2px}
.cp-print-pay-save{font-size:9px;font-weight:600;color:var(--sage-dark);margin-top:2px}
/* Reduced motion */
@media(prefers-reduced-motion:reduce){.cpp-val-custom-total,.cpp-inv-card,.cp-opt-wrap{animation:none!important;transition:none!important}}
@page{size:letter;margin:0}
@media print{
  /* v1.7.0.8 — see getPrintMediaRules() (the popup/email-viewer twin) for full
     rationale on both fixes: (1) html,body{width:8.5in} pins iOS Safari mobile
     print scaling so the layout viewport stops being the reference; (2)
     .page+.page replaces the structurally-broken .page:last-child override so
     1-page reports no longer print a trailing blank page. */
  *{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important;color-adjust:exact!important}
  html,body{width:8.5in!important}
  body{background:white!important;margin:0!important;padding:0!important}
  .print-bar,.print-bar-btns,.r-tier-legend{display:none!important}
  .screen{display:none!important}
  #screenReport{display:block!important}
  .report-wrapper{padding:0!important;gap:0!important;background:white!important;min-height:auto!important}
  .page{box-shadow:none!important;width:8.5in!important;height:11in!important;overflow:hidden!important;display:flex!important;flex-direction:column!important}
  .page+.page{page-break-before:always;break-before:page}
  .header{background:var(--sage-dark)!important}
  .r-index-circle{background:var(--sage-dark)!important}
  .r-tier-display{background:var(--sage-mist)!important;border-color:var(--sage)!important}
  .color-bar{background:linear-gradient(90deg,var(--sage),var(--warm))!important}
  .patient-band{background:var(--sage-mist)!important}
  .r-prog-fill{background:linear-gradient(90deg,var(--sage),var(--warm))!important}
  .r-card-mini-fill.haz{background:var(--sage)!important}
  .r-card-mini-fill.cra{background:var(--blue)!important}
  .r-card-mini-fill.ns{background:var(--warm)!important}
  .r-watch-strip{background:var(--warm-mist)!important}
  .r-ptable .current-col{background:var(--sage-mist)!important}
  .r-notes-row,.r-component-cards,.r-watch-strip{page-break-inside:avoid}
  .ifr-header{background:var(--sage-dark)!important}
  .ifr-patient-band{background:var(--sage-mist)!important}
  .ifr-plan-box{background:var(--warm-mist)!important;border-color:var(--warm-light)!important}
  .ifr-bar-fill.sage{background:var(--sage)!important}.ifr-bar-fill.blue{background:var(--blue)!important}.ifr-bar-fill.warm{background:var(--warm)!important}
  .ifr-card-focus{border-color:var(--warm-light)!important}
  .ifr-footer{background:white!important}
  .ifr-cards-asym,.ifr-cards-equal,.ifr-two-col,.ifr-plan-box{page-break-inside:avoid}
  .report-type-toggle{display:none!important}
  .ifr-tier-legend{display:none!important}
  .pr-tier-legend{display:none!important}
  .pr-sparkline canvas{display:none!important}
  .pr-sparkline-img{display:block!important}
  .pr-sparkline{border-color:var(--border)!important;background:white!important}
  .pr-plan-box{background:var(--warm-mist)!important;border-color:var(--warm-light)!important}
  .pr-bar-fill.sage{background:var(--sage)!important}.pr-bar-fill.blue{background:var(--blue)!important}.pr-bar-fill.warm{background:var(--warm)!important}
  .pr-domain-grid,.pr-two-col,.pr-plan-box,.pr-sparkline{page-break-inside:avoid}
  /* Care plan print */
  #screenCarePlan.cp-printing{display:block!important}
  #screenCarePlan.cp-printing .cp-topbar{display:none!important}
  #screenCarePlan.cp-printing .cp-body{padding:0!important;max-width:none!important}
  .cp-print-page{box-shadow:none!important;width:100%!important}
  .cp-print-header{background:var(--sage-dark)!important}
  .cp-print-band{background:var(--sage-mist)!important}
  .cp-print-pay-card.highlight{background:var(--sage-mist)!important;border-color:var(--sage)!important}
}
/* PR-ε commit 6 — Findings-tab fullscreen layout. Formerly injected at runtime
   by care-plan.js cpInjectCranialFullscreenStyles() as a <style> element;
   moved here so the CSP can drop style-src 'unsafe-inline'. :fullscreen cannot
   be expressed as an inline style= attribute. !important beats the .lr-* classes
   renderScoreBand/renderVizCard apply.
   2026-05-28: fullscreen goes edge-to-edge by design — D5 in
   docs/designs/cranial-present-mode-width-consistency.md. Clicking [↗ Expand]
   means "give me MORE room"; locking the canvas at 1100 in fullscreen
   contradicts that intent. The 1100 cap applies only to the constrained
   (centered card) view. */
.cp-cranial-wiring:fullscreen,.cp-cranial-wiring:-webkit-full-screen{background:var(--cream);padding:24px 32px;overflow-y:auto;display:flex;flex-direction:column}
.cp-cranial-wiring:fullscreen .viz-card,.cp-cranial-wiring:-webkit-full-screen .viz-card{flex:1 1 auto;display:flex;flex-direction:column;margin-bottom:0!important}
/* Goal-nav item 3 (v1.43 /qa headed-browser find): the .cpp-viz-wrap sits
   BETWEEN .viz-card and .viz-canvas in the flex chain. Without flexing it, the
   chain breaks here — the wrap stays content-height (the windowed canvas size)
   and the canvas can't grow past it, so fullscreen left the skull small in a
   short box (the bug Anthony reported). Flex the wrap so the canvas fills the
   fullscreen height; the camera dolly re-fit then frames the enlarged skull. */
.cp-cranial-wiring:fullscreen .cpp-viz-wrap,.cp-cranial-wiring:-webkit-full-screen .cpp-viz-wrap{flex:1 1 auto;min-height:0}
.cp-cranial-wiring:fullscreen .viz-canvas,.cp-cranial-wiring:-webkit-full-screen .viz-canvas{flex:1 1 auto;min-height:0!important}
.cp-cranial-wiring:fullscreen .continue-row,.cp-cranial-wiring:-webkit-full-screen .continue-row{display:none!important}

/* Findings-tab fit-to-fold (Zoom / laptop heights). The .lr-viz-canvas min-height
   is clamp(440px,56vh,680px) (lr-classes.css). The forward CTA is a sticky
   bottom:0 footer the content scrolls under; with ~490px of chrome reserved
   (green header + score band + tab bar + viz title + footer), a 56vh canvas
   collides with the footer whenever 56vh > 100vh-490, i.e. for any viewport
   shorter than ~1113px — which is most laptop / Zoom heights, both on the
   progressive Your-Progress tab (taller score band, worst case) and the initial
   Findings tab. Cap the canvas to the room above the footer via a height query so
   the WHOLE skull sits above the footer and the footer reads as a clean bar below
   it (cranial-reveal.js's ResizeObserver re-fits the camera to the smaller canvas
   — verified it re-fits rather than clips). Threshold was 920px, which missed the
   921-1113px band (the bug Anthony caught on the prod walk). Excludes fullscreen,
   which has its own rule above giving the canvas all the room. */
@media (max-height:1120px){
  .cpp-container .cpp-page .cp-cranial-wiring:not(:fullscreen):not(:-webkit-full-screen) .lr-viz-canvas{min-height:0;height:max(200px,calc(100vh - 490px))}
}

/* ═══════════════════════════════════════════════════════════════════════════
   ═══ CRANIAL VIZ RESPONSIVE (D1 — docs/designs/cranial-viz-responsive-plan.md
   ═══════════════════════════════════════════════════════════════════════════
   Viz-specific 1024px breakpoint with 16px hysteresis (1024/1040). Chip rail
   relocates from the in-canvas right-column overlay to a `.cpp-chip-rail`
   sibling BELOW the canvas at ≤1024px. cranial-reveal.js _onResize drives
   the relocation; this CSS handles the visibility. */

/* .cpp-viz-wrap — flex column containing the .viz-canvas + .cpp-chip-rail */
.cpp-viz-wrap{display:flex;flex-direction:column;gap:16px}

/* .cpp-chip-rail — sibling below the canvas. Default hidden at wide widths;
   shown at ≤1039px to host the chip stack. The actual chip rendering is
   controlled by cranial-overlay.js's external mount; this rule just gates
   visibility of the container itself.
   2026-05-28: bumped from ≤1024px to ≤1039px to match JS NARROW_HI=1040
   (cranial-reveal.js). Pre-fix, the JS hysteresis (1024 LO, 1040 HI) would
   pick narrow → external mount in the 1025-1039 buffer band, but CSS hid
   .cpp-chip-rail starting at >1024 — chips rendered into a hidden box.
   Codex caught this via /review 2026-05-28. The CSS now extends through
   the buffer (≤1039) so the rail stays visible whenever JS routes chips
   to it. At ≥1040 chips go to the in-canvas internal mount and the rail
   is hidden. */
.cpp-chip-rail{display:none}
@media (max-width:1039px){
  .cpp-chip-rail{display:block}
}
/* 2026-05-28: dropped the `:fullscreen .cpp-chip-rail{display:block}` override.
   Codex /review caught: at fullscreen on a wide viewport (>1039), JS routes
   chips to the in-canvas internal mount, but the override force-rendered the
   external rail visible — empty white strip below the canvas. Letting the
   media query gate visibility instead matches the JS routing: narrow fullscreen
   shows the rail (JS routes chips there), wide fullscreen hides it (JS routes
   chips to the canvas overlay). */

/* .viz-fs-btn-pulse — one-shot pulse animation on the [↗] fullscreen button at
   first narrow-width entry (≤1024px). 2 cycles × 600ms = 1.2s total. Sage
   box-shadow ring expanding 0→8px. Triggered by care-plan.js
   cpMaybePulseFullscreenBtn, removed on click / fullscreenchange / 1.6s timeout. */
@keyframes viz-fs-pulse{
  0%,100%{box-shadow:0 0 0 0 rgba(123,166,138,0.6)}
  50%{box-shadow:0 0 0 8px rgba(123,166,138,0)}
}
.viz-fs-btn-pulse{animation:viz-fs-pulse 600ms ease-in-out 2}
/* prefers-reduced-motion (vestibular safety per WCAG 2.3.3 + DESIGN.md
   "minimal-functional, motion confirms, never entertains"). Disable the
   animation; show a static sage outline instead so screen-magnifier + low-
   vision users still see the visual hint. */
@media (prefers-reduced-motion:reduce){
  .viz-fs-btn-pulse{animation:none;box-shadow:0 0 0 2px #7BA68A}
}

/* .cpp-fs-denied-toast — sage-mist toast when requestFullscreen() rejects
   (iOS Safari canvas restriction, restricted contexts). 3-second auto-dismiss
   via care-plan.js cpShowFsDeniedToast. DESIGN.md sage-mist #EDF5F0 bg,
   gray-dark #3B3F3C text. */
.cpp-fs-denied-toast{
  position:absolute;
  top:16px;left:50%;
  transform:translateX(-50%);
  background:#EDF5F0;
  color:#3B3F3C;
  border:1px solid #C4DDCC;
  border-radius:9999px;
  padding:8px 16px;
  font-family:"DM Sans",system-ui,sans-serif;
  font-size:13px;
  font-weight:500;
  box-shadow:0 4px 12px rgba(0,0,0,0.10);
  z-index:1000;
  pointer-events:none;
}

/* ═══════════════════════════════════════════════════════════════════════════
   ═══ MOBILE / TABLET RESPONSIVE — docs/designs/mobile-tablet-responsive-plan.md
   ═══════════════════════════════════════════════════════════════════════════
   Surface-scoped breakpoint system (DESIGN.md "App-Screen Responsive
   Breakpoints"):
     · Clinical app screens — 768px (reflow), 480px (phone tighten)
     · In-app Report (#screenReport) — ~900px (its own surface breakpoint)
     · Care Plan legacy thresholds (959/767/640/500) — left as-is, see above.
   Every rule below lives inside an @media block so the desktop layout
   (≥769px, or ≥901px for the report) is byte-untouched. No visual-identity
   change — DESIGN.md tokens only. The cranial 3D viz is OUT OF SCOPE (deferred
   follow-up PR, plan §5.7 / D1) — no .lr-viz-canvas / cranial-overlay rules. */

/* ─── T5 — In-app Report fluid block — #screenReport-scoped, ≤900px ─────────
   SYNC NOTE: an equivalent fluid block exists in print.css (the ≤800px block).
   Keep the shared report classes consistent between the two files, but do NOT
   add a matching comment to print.css — print.css is baked into the CSP hashes
   by scripts/gen-report-css.mjs and any byte change breaks csp-deinline.test.js.
   The print.css ≤800px block opens with a GLOBAL body{padding} rule; here every
   rule is prefixed #screenReport so nothing leaks to other app screens. The
   816px .page + 44px wrapper padding needs ~860px of viewport, so this fires at
   ≤900px — iPad portrait (834px) gets the fluid report, not a clipped page.
   `screen and` qualifier keeps these mobile rules out of the print context
   (Letter print width ≈816px would otherwise match the bare width query). */
@media screen and (max-width:900px){
  #screenReport .report-wrapper{padding:16px 12px 80px;gap:12px;background:#D4DDD7}
  #screenReport .print-bar{width:100%;position:sticky;top:0;border-radius:8px;padding:10px 14px;flex-wrap:wrap;gap:8px;z-index:60}
  #screenReport .page{width:100%;min-height:auto;height:auto;overflow:visible;box-shadow:0 4px 24px rgba(0,0,0,0.12)}
  #screenReport .header,#screenReport .ifr-header{padding:12px 16px}
  #screenReport .report-main,#screenReport .ifr-content,#screenReport .pr-content{padding:16px}
  #screenReport .patient-band,#screenReport .ifr-patient-band{grid-template-columns:1fr 1fr;gap:12px;padding:12px 16px}
  #screenReport .r-score-hero{grid-template-columns:1fr;gap:16px;text-align:center;justify-items:center}
  #screenReport .r-component-cards{grid-template-columns:1fr;gap:12px}
  #screenReport .ifr-cards-asym,#screenReport .ifr-cards-equal{grid-template-columns:1fr;gap:12px}
  #screenReport .ifr-card-focus{grid-row:auto}
  #screenReport .ifr-two-col,#screenReport .pr-two-col{grid-template-columns:1fr;gap:16px}
  #screenReport .ifr-narrative-row,#screenReport .pr-narrative-row{flex-direction:column;gap:12px}
  #screenReport .ifr-narrative,#screenReport .ifr-narrative-text,#screenReport .pr-narrative-text{max-width:none}
  #screenReport .pr-domain-grid,#screenReport .pr-domain-grid.cols-2{grid-template-columns:1fr}
  #screenReport .pr-domain-grid.cols-1{max-width:none}
  #screenReport .r-notes-row{grid-template-columns:1fr;gap:12px}
  #screenReport .r-footer,#screenReport .ifr-footer{padding:12px 16px}
  #screenReport .r-sig-row{gap:20px;flex-wrap:wrap}
  #screenReport .r-tier-legend{width:100%;flex-wrap:wrap}
  #screenReport .cp-print-page{width:100%}
  #screenReport .cp-print-header{padding:12px 16px}
  #screenReport .cp-print-body{padding:16px}
  #screenReport .cp-print-band{grid-template-columns:1fr 1fr;gap:12px;padding:12px 16px}
  #screenReport .cp-print-pay-grid{grid-template-columns:1fr}
}
@media (max-width:480px){
  #screenReport .report-wrapper{padding:12px 8px 80px}
  #screenReport .patient-band,#screenReport .ifr-patient-band,#screenReport .cp-print-band{grid-template-columns:1fr}
  #screenReport .report-title,#screenReport .report-subtitle{font-size:20px}
  #screenReport .print-bar{font-size:11px}
}

/* ─── T2 — Cross-cutting: top-bar wrap, modals, fixed-bottom safe-area ──────── */
@media (max-width:768px){
  /* §6.6 — top bar wraps its action cluster (no overflow menu, labels stay) */
  .top-bar{padding:12px 16px;flex-wrap:wrap;gap:8px}
  .top-bar-actions{flex-wrap:wrap}
  .top-bar .btn{padding:8px 12px}
  .cp-topbar{padding:14px 16px;flex-wrap:wrap;gap:8px}
  .cp-topbar-actions{flex-wrap:wrap}
  .folder-bar{padding:8px 16px}
  .view-only-banner{padding:8px 16px}
  /* §6.4 — fixed/sticky bottom elements honor the iOS home-indicator inset */
  .scoring-bottom-bar{padding-bottom:calc(12px + env(safe-area-inset-bottom))}
  /* Doubled class: base .lr-save-bar (lr-classes.css, loaded later) sets the
     `padding` shorthand, which clobbered this single-class padding-bottom — so
     the iOS home-indicator inset was dropped on notched phones. (QA polish pass.) */
  .lr-save-bar.lr-save-bar{padding-bottom:calc(14px + env(safe-area-inset-bottom))}
}
@media (max-width:480px){
  /* §6.1 — modals fill the viewport with a 16px gutter; bodies scroll.
     NOTE — the .lr-modal-* / .lr-flex-end-* class overrides for this breakpoint
     live in lr-classes.css, NOT here: lr-classes.css is <link>ed AFTER app.css,
     so a same-specificity rule there wins by source order. Putting them here
     would be silently overridden. The .modal base class is app.css-owned. */
  .modal{width:calc(100vw - 32px);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);overflow-y:auto;padding:20px}
  .modal-actions{flex-direction:column;align-items:stretch}
  .modal-actions .btn{width:100%;min-height:44px}
}

/* ─── T6 — Patient Manager / Dashboard / Practice Health grids ────────────── */
@media (max-width:768px){
  /* §5.1 — Manager: card grid floor 280→260 */
  .patient-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}
  /* §5.2 — Dashboard header wraps, score block drops below the name */
  .dash-header{flex-wrap:wrap;gap:12px}
  .dash-score-display{text-align:left}
  .dash-score-num{font-size:40px}
  /* §5.5 — Practice Health grids → 2-col.
     The 1fr-track default minimum is auto = content size, so a Chart.js
     canvas (HTML width attr) or a `white-space:nowrap` table inside a
     stacked 1fr column blows the track out past the viewport. Pin the
     minimum at 0 so the track can shrink to the viewport. */
  .ph-stats-bar{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ph-comp-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ph-tier-row{grid-template-columns:minmax(0,1fr)}
  .ph-filter-body.open{grid-template-columns:repeat(2,minmax(0,1fr))}
  /* §5.5 — wide tier table scrolls horizontally rather than crushing columns
     (display:block + overflow-x — same pattern tenant-admin.css uses). */
  .ph-tier-tbl{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:nowrap}
}
@media (max-width:480px){
  .manager-body{padding:20px 16px}
  .dash-body{padding:20px 16px}
  /* §5.2 — delete-confirm input full-width */
  .delete-confirm-input{width:100%}
  /* §5.5 — phone: tighter Practice Health grids (stats stay 2-col) */
  .ph-stats-bar{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ph-comp-grid{grid-template-columns:minmax(0,1fr)}
  .ph-filter-body.open{grid-template-columns:minmax(0,1fr)}
}

/* ─── T3 — Scoring screen ⚠ PRIORITY 1 ─────────────────────────────────────
   §5.3 — stack the 1fr/340px grid, reset the inner-scroll height caps, reflow
   the fixed-px scoring rows, 44px score buttons, and turn #scoringSidebar into
   a collapsible bottom sheet (the SAME element repositioned by CSS — the live-
   score update IDs in boot.js are untouched). Every rule is media-scoped so the
   desktop grid cell is byte-untouched; the boot.js toggle is a no-op above 768. */
@media (max-width:768px){
  .scoring-layout{grid-template-columns:1fr}
  /* Reset the desktop inner-scroll caps so the page scrolls as one document.
     padding-bottom clears the now-fixed action bar (#23: stacked = count row +
     three 48px buttons, ~216px) + collapsed sheet (72px) + iOS safe-area, so the
     last scoring row stays reachable above the taller bar. */
  .scoring-main{max-height:none;overflow:visible;padding:16px;padding-bottom:calc(320px + env(safe-area-inset-bottom))}
  /* The sidebar becomes a fixed bottom sheet — collapsed by default. The
     #scoringSidebar element is reused as-is; boot.js writes a peek-strip
     <button> as its first child + toggles .sheet-expanded on the element. */
  .scoring-sidebar{position:fixed;left:0;right:0;bottom:0;border-left:none;border-top:1px solid var(--border);
    max-height:calc(72px + env(safe-area-inset-bottom));overflow:hidden;z-index:80;
    box-shadow:0 -4px 24px rgba(0,0,0,0.12);padding:0;transition:max-height 0.2s ease}
  .scoring-sidebar.sheet-expanded{max-height:75vh;overflow-y:auto;-webkit-overflow-scrolling:touch;
    padding:0 16px calc(16px + env(safe-area-inset-bottom))}
  /* The peek strip — a full-width button showing the live-score header.
     Stays pinned at the top of the sheet while the body scrolls under it. */
  .scoring-sheet-peek{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;
    background:var(--white);border:none;border-bottom:1px solid var(--border);
    padding:14px 16px;cursor:pointer;font-family:'DM Sans',sans-serif;text-align:left;
    position:sticky;top:0;z-index:1;min-height:44px}
  .scoring-sidebar.sheet-expanded .scoring-sheet-peek{margin:0 -16px}
  .scoring-sheet-peek-label{font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:var(--gray-light);font-weight:600}
  .scoring-sheet-peek-score{font-family:'Cormorant Garamond',serif;font-size:24px;font-weight:300;color:var(--sage-dark);line-height:1}
  .scoring-sheet-peek-chevron{font-size:11px;color:var(--gray-light);transition:transform 0.2s;margin-left:auto}
  .scoring-sidebar.sheet-expanded .scoring-sheet-peek-chevron{transform:rotate(180deg)}
  /* The action bar floats ABOVE the collapsed sheet — position:fixed at
     bottom = sheet-height + safe-area, z-index above the sheet (sheet z=80,
     bar z=90). margin-bottom on a sticky bar does NOT lift it off viewport
     bottom; only position:fixed + bottom: offset places it above the fixed
     sheet. .scoring-main gets the corresponding bottom padding so content
     scrolls past both. (Fix from /review 2026-05-22 — multi-source confirmed.) */
  .scoring-bottom-bar{position:fixed;left:0;right:0;bottom:calc(72px + env(safe-area-inset-bottom));z-index:90}
  /* #23: stack on phones — count row on top, then the three actions full-width,
     48px touch targets (WCAG). DOM order is [Save, Generate, Build], so Build Care
     Plan (the warm primary) lands at the BOTTOM = thumb reach, and tab order matches
     the visual order (no CSS `order`). Works WITH the inline display:flex that
     renderScoring sets on #scoringBottomBar (just adds flex-direction). */
  .scoring-bottom-bar{flex-direction:column;align-items:stretch;gap:8px}
  .scoring-bottom-bar .lr-items-scored{text-align:center}
  .scoring-bottom-bar .lr-flex-gap10{flex-direction:column;gap:8px;width:100%}
  .scoring-bottom-bar .lr-flex-gap10 .btn{width:100%;min-height:48px}
  /* §5.3 — reflow the fixed-px control columns so they don't overflow 375px */
  .scoring-item.cranial-exam{grid-template-columns:1fr;gap:8px}
  .measure-item{grid-template-columns:1fr 1fr;gap:8px}
  /* T8 — 44px touch targets for the segmented score / disposition / toggle
     controls on the clinical-screen tier (they're 20-30px on desktop). */
  .score-btn,.vest-btn,.dir-btn,.wa-btn,.toggle-btn{min-height:44px}
  .lr-jump-unscored{min-height:44px}
}
/* The bottom sheet must not appear at desktop width even if boot.js toggled the
   class — desktop layout is byte-untouched. (No rule needed: every .scoring-
   sidebar override above is inside the ≤768px query; the desktop grid cell wins
   above 769px. The peek-strip <button> is display:none above the breakpoint.) */
@media (min-width:769px){
  .scoring-sheet-peek{display:none}
}
@media (max-width:480px){
  .scoring-main{padding:16px}
  /* §5.3 — score-control column wraps below its item label */
  .scoring-item{grid-template-columns:1fr;gap:8px}
  .vest-item{grid-template-columns:1fr;gap:8px}
  .vest-btns{justify-content:flex-start}
  /* §6.4 — 44px touch targets for the score / vest / direction buttons */
  .score-btn{min-height:44px;min-width:44px}
  .vest-btn{min-height:44px}
  .toggle-btn{min-height:44px}
}

/* ─── T4 — Care Plan present mode ⚠ PRIORITY 3 — tab/grid reflow only ──────
   §5.7 — the 3D cranial viz is DEFERRED (D1, cranial-overlay.js). This handles
   the tab strip, the absolutely-positioned rate toggle, and the full
   progressive .lr-* fixed-layout set. */
@media (max-width:768px){
  /* §5.7 — present-mode tab strip scrolls horizontally with an affordance */
  /* Keep desktop's justify-content:center — overflow-x:auto + scroll-snap still
     scroll horizontally when the strip overflows. Forcing flex-start would
     left-justify a short tab strip that fits the viewport (a visual inconsistency
     with desktop centered tabs and no functional benefit). */
  .cpp-tabs{overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch;
    scroll-snap-type:x proximity;gap:16px}
  .cpp-tab{scroll-snap-align:start;flex:0 0 auto;min-height:44px;display:inline-flex;align-items:center}
  .cpp-content,.cpp-page{padding-left:12px;padding-right:12px}
  /* §5.7 — the rate toggle is position:absolute over the centered tabs — bring
     it in-flow so it can't overlap a horizontally-scrolling tab strip */
  .cp-rate-toggle{position:static;transform:none;justify-content:center;margin:8px auto 0;flex-wrap:wrap}
  /* §5.7 — the full progressive fixed-layout set stacks / reflows.
     SCOPED UNDER .cpp-container ON PURPOSE: the base .lr-* rules live in
     lr-classes.css, which index.html loads AFTER app.css. At equal specificity
     the later file wins, so a bare `.lr-band{grid-template-columns:1fr}` here was
     DEAD — the 4-column score band never reflowed and overflowed the viewport at
     phone widths. `.cpp-container .lr-band` (0,2,0) outranks `.lr-band` (0,1,0)
     regardless of load order. All present-mode .lr-* elements live inside
     .cpp-container (care-plan.js:2714/2858). (QA polish pass.) */
  .cpp-container .lr-band{grid-template-columns:1fr;gap:14px}
  .cpp-container .lr-band-comp{border-right:none;border-bottom:1px solid var(--border);padding-right:0;padding-bottom:14px}
  .cpp-container .lr-timeline-row{flex-wrap:wrap;gap:16px;padding:16px 8px;justify-content:center}
  .cpp-container .lr-tl-conn{display:none}
  .cpp-container .lr-viz-header{flex-direction:column;align-items:flex-start;gap:10px}
  .cpp-container .lr-viz-controls-wrap{flex-wrap:wrap}
  .cpp-container .lr-benefits-grid{grid-template-columns:1fr}
  .cpp-container .lr-member-row{flex-wrap:wrap;gap:8px}
  .cpp-container .lr-addon-row{flex-wrap:wrap;gap:8px}
  .cpp-rec-phase-stats{flex-wrap:wrap;gap:10px}
  .cpp-container{margin:8px}
  /* progressive + initial present-mode both widen .cp-body / .cpp-page above the
     phone-reflow tier — collapse both back to 100% so the wider treatment
     doesn't overflow at ≤768px. (Initial added 2026-05-28 parallel to progressive.) */
  .cp-body.cp-body--progressive,.cp-body.cp-body--progressive .cpp-page,
  .cp-body.cp-body--initial,.cp-body.cp-body--initial .cpp-page{max-width:100%}
}
@media (max-width:480px){
  .cpp-tab{font-size:14px}
  .cpp-inv-hero-num{font-size:42px}
}

/* ─── T7 — Care Plan edit residuals + Care Plan Settings ───────────────────
   §5.6 — edit-mode gaps the legacy breakpoints miss.
   §5.8 — the centralized pricing config screen. */
@media (max-width:480px){
  /* §5.6 — service row: qty/price controls wrap below the service name */
  .cp-svc-row{grid-template-columns:auto 1fr;gap:8px}
  .cp-svc-row .cp-edit-inp,.cp-svc-row .cp-svc-tot,.cp-svc-row .cp-svc-toggle{grid-column:2}
  /* §5.6 — phase config row wraps */
  .cp-phase-row{flex-wrap:wrap}
  .cp-phase-visits{margin-left:0}
}
@media (max-width:768px){
  /* §5.8 — Care Plan Settings: panels/cards stack, rates table scrolls */
  .cp-settings-body{padding:24px 16px}
  .cp-settings-svc{flex-wrap:wrap}
  .cp-settings-svc-fields{grid-template-columns:1fr;gap:6px}
  /* Doubled class for specificity: the base .lr-svc-fields-grid (lr-classes.css,
     loaded AFTER app.css) sets grid-template-columns, so a single-class media
     override here was dead and the service-fee inputs never stacked on mobile.
     0,2,0 beats the 0,1,0 base regardless of load order. (QA polish pass.) */
  .lr-svc-fields-grid.lr-svc-fields-grid{grid-template-columns:1fr;gap:6px}
  /* §5.8 — the wellness-rates table scrolls horizontally rather than crushing.
     The table is rendered bare (no wrapper div) — make the table itself the
     scroll container, same pattern as the Practice Health tier table. */
  .lr-rates-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:nowrap}
  .lr-phasedef-row .lr-flex-gap16,.lr-flex-gap16-wrap{flex-wrap:wrap}
  .lr-flex-wrap-14{flex-wrap:wrap}
}
@media (max-width:480px){
  .cp-settings-panel{padding:16px}
  /* §5.8 — sticky save bar button goes full-width */
  .lr-save-bar .lr-btn-save{width:100%}
}

/* ─── §6.5 — Scroll affordance for horizontal-scroll strips / tables ───────
   A soft edge shadow cueing more content sideways. The radial gradients pin
   to the scroll container (background-attachment:scroll) and fade out as the
   content reaches each edge (the white cover gradients are background-
   attachment:local so they move with the content). Media-scoped — desktop
   never scrolls these. */
@media (max-width:768px){
  /* Edge cover gradients use white (matches .cp-tabs / .lr-rates-table /
     .ph-tier-tbl backgrounds; on .cpp-tabs cream the seam is ~2px and tolerable).
     Picking white over cream avoids a visible color seam on 3 of 4 surfaces. */
  .cpp-tabs,.cp-tabs,.lr-rates-table,.ph-tier-tbl{
    background-image:linear-gradient(90deg,#ffffff 30%,rgba(255,255,255,0)),
               linear-gradient(90deg,rgba(255,255,255,0),#ffffff 70%),
               radial-gradient(farthest-side at 0 50%,rgba(0,0,0,0.08),transparent),
               radial-gradient(farthest-side at 100% 50%,rgba(0,0,0,0.08),transparent);
    background-position:0 0,right 0,0 0,right 0;
    background-repeat:no-repeat;
    background-size:32px 100%,32px 100%,14px 100%,14px 100%;
    background-attachment:local,local,scroll,scroll}
}

/* ─── T8 — Orientation: landscape phone / short-height tablet ──────────────
   §6.3 — compact the sticky top + bottom chrome, prioritize vertical scroll. */
@media (orientation:landscape) and (max-height:500px) and (max-width:768px){
  .top-bar{padding:8px 16px}
  .cp-topbar{padding:8px 16px}
  .scoring-bottom-bar{padding:8px 16px;padding-bottom:calc(8px + env(safe-area-inset-bottom))}
  /* keep the scoring sheet shallow so the canvas/main area stays usable */
  .scoring-sidebar.sheet-expanded{max-height:88vh}
  /* Doubled class — see the safe-area note above; base .lr-save-bar `padding`
     shorthand would otherwise clobber these landscape paddings. */
  .lr-save-bar.lr-save-bar{padding-top:8px;padding-bottom:calc(8px + env(safe-area-inset-bottom))}
  .modal{max-height:calc(100dvh - 24px)}
}

/* ===========================================
   lr-modal-snapshot (Goal 1.8 PR-2 — design P1-P7)
   Layered on top of .lr-modal-content. Owned by openSnapshotModal in boot.js.
   Token map per docs/designs/goal-1.8-bb-parity.md "Post /plan-design-review
   locked design (2026-05-28)" P5 table. The modal envelope is provided by
   the lr-modal primitive; these classes paint the inside.
   =========================================== */
.lr-modal-content.lr-modal-snapshot.lr-modal-content--card{padding:0;width:100%;max-width:980px;max-height:90vh;display:flex;flex-direction:column;overflow:hidden}
.lr-modal-content.lr-modal-snapshot.lr-modal-content--fullscreen{padding:0;display:flex;flex-direction:column;overflow:hidden}

/* Header strip — sage-dark bg + white text (P5). */
.lr-snap-header{flex:0 0 auto;background:var(--sage-dark);color:#fff;padding:14px 20px;display:flex;align-items:center;gap:16px;flex-wrap:wrap;box-shadow:0 2px 8px rgba(0,0,0,.15)}
.lr-snap-meta{flex:1 1 auto;min-width:0}
.lr-snap-eval{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:22px;line-height:1.2;color:#fff;margin-bottom:4px}
.lr-snap-recipient{font-family:'DM Sans',sans-serif;font-size:13px;line-height:1.4;color:#fff}
.lr-snap-sent-at{font-family:'DM Sans',sans-serif;font-size:11px;color:var(--sage-light);margin-top:2px}
/* "(typed override)" label — clinical audit signal (recipient was hand-typed,
   not auto-resolved). Original P1 spec was 8px/opacity .85 against sage-dark
   bg — adversarial review caught the contrast failure (<4.5:1, under WCAG
   1.4.3 AA). Bumped to 11px/opacity 1 so the doctor can SEE the signal at
   audit-record distance. Avant Garde retained for the design system feel. */
.lr-snap-override{display:inline-block;margin-left:6px;font-family:'ITC Avant Garde Std','DM Sans',sans-serif;font-size:11px;text-transform:uppercase;letter-spacing:1.2px;opacity:1}
.lr-snap-header-actions{flex:0 0 auto;display:flex;gap:10px;align-items:center}

/* Print button — sage bg + currentColor SVG. Hover sage-dark. (P5) */
.lr-snap-print-btn{display:inline-flex;align-items:center;gap:8px;background:var(--sage);color:#fff;border:0;border-radius:5px;padding:8px 14px;font-family:'DM Sans',sans-serif;font-size:13px;font-weight:600;cursor:pointer;min-height:36px;-webkit-tap-highlight-color:transparent}
.lr-snap-print-btn:hover{background:var(--sage-dark)}
.lr-snap-print-btn.lr-disabled,.lr-snap-print-btn[disabled]{opacity:.5;cursor:not-allowed}
.lr-snap-print-icon{flex:0 0 auto;color:currentColor}
.lr-snap-print-label{flex:0 0 auto}

/* Close button — transparent + light border + white. (P5) */
.lr-snap-close-btn{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.4);border-radius:5px;padding:6px 14px;font-family:'DM Sans',sans-serif;font-size:13px;cursor:pointer;min-height:36px;-webkit-tap-highlight-color:transparent}
.lr-snap-close-btn:hover{background:rgba(255,255,255,.1)}

/* Failed-send banner — red tone, sits below header above body. */
.lr-snap-failed-banner{flex:0 0 auto;background:var(--red);color:#fff;padding:10px 20px;font-family:'DM Sans',sans-serif;font-size:13px;font-weight:500}

/* Previous-sends collapsible bar — sage-mist tone with sage-dark text (P5). */
.lr-snap-prev{flex:0 0 auto;background:var(--sage-mist);color:var(--sage-dark);font-family:'DM Sans',sans-serif;font-size:12px;padding:0 20px;border-bottom:1px solid var(--border)}
.lr-snap-prev-summary{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 0}
.lr-snap-prev-count{font-weight:600}
.lr-snap-prev-toggle{background:transparent;color:var(--sage-dark);border:1px solid var(--sage-light);border-radius:5px;padding:4px 12px;font-family:inherit;font-size:12px;cursor:pointer}
.lr-snap-prev-toggle:hover{background:var(--white)}
/* P5 motion: 0.15s expand/collapse (NOT BB's 0.2s). prefers-reduced-motion below disables this. */
.lr-snap-prev-list{padding:0 0 12px 0;display:flex;flex-direction:column;gap:6px;max-height:260px;overflow-y:auto;transition:max-height 0.15s ease}
.lr-snap-prev-row{display:flex;align-items:center;gap:10px;background:var(--white);border:1px solid var(--border);border-radius:5px;padding:8px 10px;font-family:inherit;font-size:12px;text-align:left;cursor:pointer;color:var(--gray-dark);width:100%;transition:background 0.15s ease, border-color 0.15s ease}
.lr-snap-prev-row:hover{background:var(--sage-light);border-color:var(--sage)}
.lr-snap-prev-row.is-current{background:var(--sage);color:#fff;border-color:var(--sage);cursor:default}
.lr-snap-prev-row.is-current:hover{background:var(--sage)}
.lr-snap-prev-row-date{flex:0 0 auto;color:var(--gray-mid)}
.lr-snap-prev-row.is-current .lr-snap-prev-row-date{color:rgba(255,255,255,.85)}
.lr-snap-prev-row-recipient{flex:1 1 auto;font-weight:500}
.lr-snap-prev-row-status{flex:0 0 auto;background:rgba(0,0,0,.06);padding:2px 6px;border-radius:3px;font-size:10px;text-transform:capitalize}
.lr-snap-prev-row.is-current .lr-snap-prev-row-status{background:rgba(255,255,255,.18)}
.lr-snap-prev-row-viewing{flex:0 0 auto;font-size:10px;opacity:.7;margin-left:auto}

/* Body container — sage-tinted bg around the white iframe. The #E4EBE6 value
   is the design's "--bg" sage-tinted-cream token (P5). It is not yet in the
   :root token set; hardcoded with the design-source comment for traceability. */
.lr-snap-body{flex:1 1 auto;background:#E4EBE6;display:flex;align-items:stretch;min-height:0}
.lr-snap-iframe{flex:1 1 auto;width:100%;border:0;background:#fff}
.lr-snap-loading,.lr-snap-error,.lr-snap-unavailable{margin:auto;padding:24px;text-align:center;font-family:'DM Sans',sans-serif;font-size:14px;color:var(--sage-dark);max-width:520px}
.lr-snap-unavailable small,.lr-snap-error small{display:block;margin-top:8px;font-size:12px;color:var(--gray-mid)}
.lr-snap-error{color:var(--warm-dark)}

/* iOS pinch-to-PDF hint — below the iframe on mobile only. */
.lr-snap-pinch-hint{flex:0 0 auto;font-family:'DM Sans',sans-serif;font-size:11px;color:var(--gray-light);text-align:center;padding:8px 16px;background:var(--cream)}

/* Email badge — button variant (was span pre-Goal-1.8-PR-2). The badge tones
   (lr-email-badge--sage / --warn / --bad / --pending / --legacy) live in
   lr-classes.css; this rule normalises the button reset so the visual is
   identical to the prior span. */
/* Button reset — KEEP border + border-radius matching the existing
   `.lr-email-badge` rule in lr-classes.css (1px transparent + 10px) so
   the button variant is visually identical to the prior span variant
   across all 5 tone classes. font:inherit normalises the user-agent
   button font. */
button.lr-email-badge{font:inherit;cursor:pointer;background:transparent;padding:2px 8px;border-radius:10px;border:1px solid transparent;-webkit-tap-highlight-color:transparent}
button.lr-email-badge:hover{filter:brightness(0.96)}
button.lr-email-badge.lr-disabled,button.lr-email-badge[disabled]{cursor:default;filter:none}
button.lr-email-badge[aria-haspopup="dialog"]:focus-visible{outline:2px solid var(--sage-dark);outline-offset:2px}

/* Mobile responsive (≤768px). 44px touch targets per DESIGN.md WCAG 2.5.5. */
@media (max-width: 768px){
  .lr-snap-header{padding:12px 14px;gap:10px}
  .lr-snap-eval{font-size:18px}
  .lr-snap-header-actions{width:100%;justify-content:space-between}
  .lr-snap-print-btn,.lr-snap-close-btn{min-height:44px;font-size:14px;flex:1 1 auto;justify-content:center}
  .lr-snap-prev{padding:0 14px}
  .lr-snap-prev-list{max-height:220px}
  .lr-snap-prev-row{padding:10px;font-size:13px}
  .lr-snap-loading,.lr-snap-error,.lr-snap-unavailable{padding:20px}
}

/* P6b accessibility: respect prefers-reduced-motion — disable the prev-sends
   max-height transition. The collapse becomes an instant show/hide. */
@media (prefers-reduced-motion: reduce){
  .lr-snap-prev-list,.lr-snap-prev-row{transition:none}
}

/* ── Security / MFA modals (roadmap step 1, T5) ──────────────────────────────
   The enroll walkthrough, sign-in challenge, emergency-codes, and enforcement
   overlays render inside LRModal (.lr-modal-content). No inline style (CSP). */
.lr-mfa-modal.lr-modal-content--card{max-width:460px}
.lr-mfa-step{display:flex;flex-direction:column;gap:6px}
/* The fullscreen MFA lock owns the vertical scroll (scoped to .lr-mfa-modal so
   the snapshot + any other fullscreen modal stay untouched), so the scrollbar
   sits at the window edge, not inside the centered .lr-mfa-step-enforce column.
   The base .lr-modal-content--fullscreen keeps its env(safe-area-inset-bottom)
   padding; the inner step keeps its 24px padding but no longer scrolls. */
.lr-mfa-modal.lr-modal-content--fullscreen{overflow-y:auto}
.lr-mfa-modal.lr-modal-content--fullscreen .lr-mfa-step{padding:24px}
.lr-mfa-title{font-family:'Cormorant Garamond',serif;font-weight:300;font-style:italic;font-size:26px;color:var(--sage-dark);margin:4px 0 2px}
.lr-mfa-sub{font-size:13px;color:var(--gray-mid);margin:0 0 10px}
.lr-mfa-h{font-size:15px;font-weight:600;color:var(--gray-dark);margin:12px 0 4px}
.lr-mfa-p{font-size:14px;color:var(--gray-mid);line-height:1.55;margin:0 0 8px}
.lr-mfa-hint{font-size:12px;color:var(--gray-light);margin:8px 0 0;line-height:1.5}
.lr-mfa-sprout{font-size:34px;text-align:center;margin:4px 0}
.lr-mfa-dots{display:flex;gap:6px;justify-content:center;margin:2px 0 8px}
.lr-mfa-dots span{width:8px;height:8px;border-radius:999px;background:#D4DDD7}
.lr-mfa-dots span.on{background:var(--sage)}
.lr-mfa-qr{display:flex;justify-content:center;align-items:center;min-height:160px;background:var(--white);border:1px solid var(--border);border-radius:10px;padding:10px;margin:6px 0;color:var(--gray-mid);font-size:13px}
.lr-mfa-qr svg{width:200px;height:200px;max-width:100%}
.lr-mfa-manual-intro{margin:8px 0 4px}
.lr-mfa-key{display:block;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:15px;letter-spacing:2px;background:var(--sage-mist);color:var(--gray-dark);padding:10px 12px;border-radius:8px;word-break:break-all;text-align:center}
.lr-mfa-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:16px;flex-wrap:wrap}
.lr-mfa-actions-left{justify-content:flex-start;margin-top:10px}
.lr-mfa-field{margin:0 0 12px}
.lr-mfa-link{background:none;border:none;color:var(--sage-dark);font-family:'DM Sans',sans-serif;font-size:13px;text-decoration:underline;cursor:pointer;padding:10px 4px;margin-top:4px;align-self:flex-start;min-height:44px}
.lr-mfa-link:focus-visible{outline:2px solid var(--sage);outline-offset:2px}
.lr-mfa-codes{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:10px 0}
.lr-mfa-code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:14px;letter-spacing:1px;background:var(--sage-mist);color:var(--gray-dark);padding:8px 10px;border-radius:6px;text-align:center}
@media (max-width:768px){.lr-mfa-codes{grid-template-columns:1fr}}
/* Mandatory-MFA enforce gate — a full-screen, non-dismissible lock (persistent
   LRModal, opaque cream content covers the app). Center a calm readable column,
   hide the voluntary wizard's step-dots (enforce flow is QR -> code), and style
   the only escape: a quiet "Sign out" link. */
.lr-mfa-enforce .lr-mfa-step-enforce{max-width:480px;width:100%;margin:0 auto;box-sizing:border-box}
.lr-mfa-enforce .lr-mfa-dots{display:none}
.lr-mfa-enforce .lr-mfa-title,.lr-mfa-enforce .lr-mfa-sub{text-align:center}
.lr-mfa-signout-row{display:flex;justify-content:center;margin-top:20px}
.lr-mfa-signout{background:none;border:none;color:var(--gray-light);font-family:'DM Sans',sans-serif;font-size:13px;text-decoration:underline;cursor:pointer;padding:10px 8px;min-height:44px}
.lr-mfa-signout:focus-visible{outline:2px solid var(--sage);outline-offset:2px}
/* single-page enroll (QR + code on one screen, BB parity, v1.43.0.2) */
.lr-mfa-enroll-row{display:flex;gap:12px;align-items:flex-start;text-align:left;margin:0;padding:14px 0}
/* separators BETWEEN rows only — :first-of-type can't be used here because the
   rows are preceded by the sprout/dots divs, so it never matches (Codex /review) */
.lr-mfa-enroll-row + .lr-mfa-enroll-row{border-top:1px solid var(--border)}
.lr-mfa-enroll-n{flex:0 0 26px;width:26px;height:26px;border-radius:999px;background:var(--sage-dark);color:var(--white);font-family:'DM Sans',sans-serif;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center;margin-top:2px}
.lr-mfa-enroll-body{flex:1 1 auto;min-width:0}
.lr-mfa-enroll-t{font-size:15px;font-weight:600;color:var(--gray-dark);margin:1px 0 6px;line-height:1.35}
.lr-mfa-enroll-d{font-size:13px;color:var(--gray-mid);margin:0;line-height:1.5}
.lr-mfa-actions-stack{flex-direction:column;align-items:stretch;gap:6px;margin-top:14px}
.lr-mfa-actions-stack .btn{width:100%;min-height:48px}
.lr-mfa-actions-stack .btn[disabled]{opacity:.45;cursor:not-allowed}
.lr-mfa-enroll-help{text-align:center;margin:0}

/* shared OTP input — ONE real input with a boxy monospace treatment (not six
   inputs): paste- + screen-reader-friendly. */
.lr-otp-wrap{margin:6px 0}
.lr-otp-label{display:block;font-size:10px;text-transform:uppercase;letter-spacing:1.6px;color:var(--gray-light);font-weight:600;margin-bottom:6px}
.lr-otp{width:100%;box-sizing:border-box;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:26px;letter-spacing:12px;text-align:center;padding:12px 10px;border:1px solid #D4DDD7;border-radius:10px;background:var(--white);color:var(--gray-dark)}
.lr-otp:focus{outline:none;border-color:var(--sage)}

/* ====== #14 first-time walkthrough (welcome screen + getting-started guide) ======
   Tokens per DESIGN.md (sage/warm/blue, sprout, Cormorant hero, no clinical
   icons). CSP-clean: the progress fill uses onb-fill-N width classes, never an
   inline style attr. */

/* --- Welcome screen (#screenWelcome) --- */
.onb-welcome{max-width:880px;margin:0 auto;padding:54px 24px 56px;text-align:center}
.onb-welcome-sprout{font-size:42px;line-height:1}
.onb-welcome-h1{font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:300;font-size:42px;color:var(--gray-dark);margin:14px 0 8px}
.onb-welcome-lede{font-size:15px;color:var(--gray-mid);max-width:540px;margin:0 auto 36px;line-height:1.55}
.onb-welcome-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;text-align:left}
.onb-wcard{background:var(--cream);border:1px solid var(--border);border-radius:12px;padding:0 22px 22px;overflow:hidden}
.onb-wcard-bar{height:5px;margin:0 -22px 20px}
.onb-wcard-1 .onb-wcard-bar{background:var(--sage)}
.onb-wcard-2 .onb-wcard-bar{background:var(--blue)}
.onb-wcard-3 .onb-wcard-bar{background:var(--warm)}
.onb-wcard-eyebrow{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:9px;letter-spacing:2px;text-transform:uppercase;font-weight:600;color:var(--sage-dark);margin-bottom:8px}
.onb-wcard-2 .onb-wcard-eyebrow{color:var(--blue)}
.onb-wcard-3 .onb-wcard-eyebrow{color:var(--warm-dark)}
.onb-wcard-h3{font-size:15px;font-weight:600;color:var(--gray-dark);margin-bottom:8px}
.onb-wcard-p{font-size:13px;color:var(--gray-mid);line-height:1.5}
.onb-welcome-cta{margin-top:38px;display:flex;flex-direction:column;align-items:center;gap:12px}
.onb-welcome-start{padding:13px 30px}
.onb-welcome-skip{background:none;border:none;color:var(--gray-mid);font-size:12px;font-weight:500;cursor:pointer;text-decoration:underline;text-underline-offset:3px;min-height:44px}
.onb-welcome-skip:focus-visible{outline:2px solid var(--sage);outline-offset:2px}

/* --- Getting-started guide: shared card (State E) + strip (State P) --- */
.onb-card{background:var(--cream);border:1px solid var(--border);border-radius:14px;padding:30px 34px;max-width:680px;margin:8px auto}
.onb-eyebrow{font-family:'ITC Avant Garde Gothic',sans-serif;font-size:9px;letter-spacing:2.5px;text-transform:uppercase;font-weight:600;color:var(--sage-dark)}
.onb-card-h{font-family:'Cormorant Garamond',serif;font-style:italic;font-weight:300;font-size:25px;color:var(--gray-dark);margin:8px 0 6px}
.onb-sub{font-size:13px;color:var(--gray-mid);margin-bottom:8px}
.onb-progress{display:flex;align-items:center;gap:10px;margin:18px 0 22px}
.onb-track{flex:1;height:6px;background:var(--sage-mist);border-radius:9999px;overflow:hidden}
.onb-fill{height:100%;background:var(--sage);border-radius:9999px;transition:width .3s}
/* Six-step getting-started spine (2026-06-16): width = doneCount / 6. */
.onb-fill-0{width:0}
.onb-fill-1{width:16.6667%}
.onb-fill-2{width:33.3333%}
.onb-fill-3{width:50%}
.onb-fill-4{width:66.6667%}
.onb-fill-5{width:83.3333%}
.onb-fill-6{width:100%}
.onb-pct{font-size:11px;color:var(--gray-mid);font-weight:600;letter-spacing:.3px;white-space:nowrap}
.onb-step{display:flex;align-items:flex-start;gap:14px;padding:15px 0;border-top:1px solid var(--border)}
.onb-step:first-of-type{border-top:none}
/* Active row: a quiet sage-mist highlight + a "You're here" pill so the escort
   (which spotlights the same step) and the spine visibly agree (2026-06-16). */
.onb-step-active{background:var(--sage-mist);border-radius:8px;margin:0 -10px;padding-left:10px;padding-right:10px}
.onb-step-here{flex:0 0 auto;align-self:center;font-size:9px;font-weight:600;letter-spacing:.8px;text-transform:uppercase;color:var(--sage-dark);background:var(--white);border:1px solid var(--sage-light);border-radius:9999px;padding:3px 9px;white-space:nowrap}
.onb-check{flex:0 0 auto;width:24px;height:24px;border-radius:50%;border:2px solid var(--sage-light);margin-top:1px;display:flex;align-items:center;justify-content:center;font-size:13px;color:transparent}
.onb-step-done .onb-check{background:var(--sage);border-color:var(--sage);color:var(--white)}
.onb-step-body{flex:1}
.onb-step-t{font-size:14px;font-weight:600;color:var(--gray-dark)}
.onb-step-done .onb-step-t{color:var(--gray-light);text-decoration:line-through}
.onb-step-d{font-size:12px;color:var(--gray-mid);margin-top:2px;line-height:1.45}
.onb-step-go{flex:0 0 auto;align-self:center;font-size:11px;font-weight:600;letter-spacing:.3px;padding:9px 16px;min-height:38px;border-radius:6px;border:1px solid var(--warm);background:var(--warm);color:var(--white);cursor:pointer}
.onb-step-go:focus-visible{outline:2px solid var(--sage);outline-offset:2px}
.onb-foot{margin-top:22px;padding-top:16px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.onb-foot-hint{font-size:11px;color:var(--gray-light)}
.onb-replay{font-size:11px;color:var(--gray-mid);font-weight:500;text-decoration:underline;text-underline-offset:2px;background:none;border:none;cursor:pointer;min-height:44px}
.onb-replay:focus-visible{outline:2px solid var(--sage);outline-offset:2px}

/* State-P strip: the same rows in a slimmer surface above the grid */
.onb-strip{margin:0 0 16px}
.onb-strip-inner{background:var(--cream);border:1px solid var(--border);border-radius:12px;padding:16px 20px}
.onb-strip-head{display:flex;align-items:center;gap:14px;margin-bottom:4px;flex-wrap:wrap}
.onb-strip-head .onb-progress{margin:0;flex:1;min-width:160px}
.onb-strip-dismiss{font-size:11px;color:var(--gray-mid);font-weight:500;background:none;border:none;cursor:pointer;text-decoration:underline;text-underline-offset:2px;min-height:38px}
.onb-strip-dismiss:focus-visible{outline:2px solid var(--sage);outline-offset:2px}
.onb-strip .onb-step{padding:11px 0}

/* --- responsive (clinical-screen 768px tier per DESIGN.md) --- */
@media (max-width:768px){
  .onb-welcome{padding:36px 16px 40px}
  .onb-welcome-h1{font-size:34px}
  .onb-welcome-cards{grid-template-columns:1fr;gap:14px}
  .onb-wcard{padding:0 18px 18px}
  .onb-card{padding:24px 20px;border-radius:12px}
  .onb-step-go{width:100%;margin-top:8px}
  .onb-strip-head{flex-direction:column;align-items:stretch}
  /* Six rows is tall on a phone; in the SLIM STRIP only, drop the per-step
     descriptions + tighten padding so the count + titles stay scannable. The
     full card (empty Manager) keeps every description as the focal content. */
  .onb-strip .onb-step-d{display:none}
  .onb-strip .onb-step{padding:8px 0}
  .onb-step-here{font-size:8px;padding:2px 7px}
}
/* Report-presentation walkthrough — the quiet top-bar "? Help" button + the
   Help-picker item rows (rendered into an LRModal card by onbHelpOpen). */
/* color:#fff — the "? Help" button sits in the sage-green top-bar header. Its
   btn-ghost base color is the same sage as the header (contrast 1.00 = invisible
   until text-selected); white matches its btn-secondary nav siblings. The
   light-background Help-picker rows use .pw-help-item, so this never affects them. */
.onb-help-btn{font-weight:500;opacity:.85;color:#fff}
.onb-help-btn:hover{opacity:1}
.pw-help-item{display:block;width:100%;text-align:left;background:var(--cream);border:1px solid var(--border);border-radius:10px;padding:13px 16px;margin-top:10px;cursor:pointer;transition:border-color .15s,box-shadow .15s}
.pw-help-item:hover{border-color:var(--sage-light);box-shadow:0 2px 8px rgba(59,63,60,.06)}
.pw-help-item:focus-visible{outline:2px solid var(--sage);outline-offset:2px}
.pw-help-item-t{font-size:14px;font-weight:600;color:var(--gray-dark)}
.pw-help-item-d{font-size:12px;color:var(--gray-mid);line-height:1.45;margin-top:2px}
/* Pre-flight primer (LRModal card) — 3 numbered beats + 3 CTAs. */
.lr-modal-w560 .lr-modal-content,.lr-modal-content.lr-modal-w560{max-width:560px}
.pw-beat{display:flex;gap:14px;padding:14px 0;border-top:1px solid var(--border)}
.pw-beat:first-of-type{border-top:none}
.pw-beat-num{flex:0 0 auto;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff}
.pw-beat.beat-1 .pw-beat-num{background:var(--sage)}
.pw-beat.beat-2 .pw-beat-num{background:var(--blue)}
.pw-beat.beat-3 .pw-beat-num{background:var(--warm)}
.pw-beat-t{font-size:13.5px;font-weight:600;color:var(--gray-dark)}
.pw-beat-d{font-size:12px;color:var(--gray-mid);line-height:1.5;margin-top:2px}
.pw-primer-cta{margin-top:22px;padding-top:16px;border-top:1px solid var(--border);display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.pw-primer-go{background:var(--warm);color:#fff;border:none;border-radius:6px;padding:12px 24px;font-size:12px;font-weight:600;letter-spacing:.3px;cursor:pointer;min-height:42px}
.pw-primer-rehearse{background:none;border:1px solid var(--sage);color:var(--sage-dark);border-radius:6px;padding:11px 18px;font-size:12px;font-weight:600;cursor:pointer;min-height:42px}
.pw-primer-skip{background:none;border:none;color:var(--gray-mid);font-size:12px;font-weight:500;text-decoration:underline;text-underline-offset:3px;cursor:pointer;min-height:42px}
.pw-primer-go:focus-visible,.pw-primer-rehearse:focus-visible,.pw-primer-skip:focus-visible{outline:2px solid var(--sage);outline-offset:2px}
@media (max-width:768px){.pw-primer-cta{flex-direction:column;align-items:stretch}.pw-primer-go,.pw-primer-rehearse{width:100%}}
