@charset "UTF-8";
:root{--forest:#0d2d25;--ink:#17392f;--paper:#f4f4ed;--white:#fff;--muted:#6b7b71;--line:#d9dfd4;--lime:#d6ee9e;--sage:#a8beb0;--soft:#e7eddf;--error:#a64132;--radius:18px;--ease:cubic-bezier(.22,.8,.24,1);--header:76px;--serif:Georgia,'Times New Roman',serif;--sans:Inter,'Helvetica Neue',Arial,sans-serif}
*{box-sizing:border-box}html{scroll-behavior:auto}body{margin:0;font-family:var(--sans);color:var(--ink);background:var(--paper);overflow:hidden;-webkit-font-smoothing:antialiased}button,input,textarea,select{font:inherit}button,a,input,textarea,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button{color:inherit}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:4px}button:focus-visible,a:focus-visible{outline:3px solid #91b863;outline-offset:4px}button:disabled{opacity:.5;cursor:not-allowed}input:focus,textarea:focus,select:focus{outline:2px solid #91b863;outline-offset:2px}textarea{resize:vertical}svg{display:block}h1,h2,h3,h4,p{margin-top:0}h1,h2,h3{letter-spacing:-.045em}h1,h2{font-weight:600}button{border:0;background:none}img{max-width:100%}[hidden]{display:none!important}.mono,.eyebrow,.serial{font-size:11px;font-weight:600;letter-spacing:.13em;text-transform:uppercase}.eyebrow{color:var(--muted);line-height:1.5}.muted{color:var(--muted)}.serif{font-family:var(--serif);font-weight:400;font-style:italic}.brand-mark{display:grid;place-items:center;width:38px;height:38px;border:1px solid currentColor;border-radius:11px;font-weight:800;font-size:24px;flex-shrink:0;letter-spacing:-.1em;padding-right:3px}.boot{min-height:100vh;display:grid;place-content:center;gap:24px}.loading-line{height:2px;background:var(--ink);width:38px;animation:pulse 1.4s infinite}@keyframes pulse{50%{opacity:.2;transform:scaleX(.3)}}.icon{width:20px;height:20px;display:inline-block;flex-shrink:0}.icon-btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:50%;height:40px;width:40px;transition:background .2s,border-color .2s;flex-shrink:0}.icon-btn:hover{background:var(--soft);border-color:var(--sage)}.btn{display:inline-flex;gap:10px;align-items:center;justify-content:center;border:1px solid var(--line);background:transparent;padding:12px 18px;border-radius:9px;font-size:13px;font-weight:600;letter-spacing:-.015em;transition:background .2s,border-color .2s;min-height:44px}.btn:hover{background:var(--soft);border-color:var(--sage)}.btn.primary{background:var(--forest);color:var(--paper);border-color:var(--forest)}.btn.primary:hover{background:#224b3d}.btn.lime{background:var(--lime);border-color:var(--lime);color:var(--forest)}.btn.small{padding:8px 11px;min-height:34px;font-size:12px}.btn.danger{color:var(--error)}.text-btn{display:inline-flex;gap:9px;align-items:center;padding:8px 0;border-bottom:1px solid currentColor;font-size:13px;font-weight:600}.text-btn .icon{width:17px;height:17px;transition:transform .25s var(--ease)}.text-btn:hover .icon{transform:translateX(4px)}.pill{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line);border-radius:99px;padding:6px 10px;font-size:11px;line-height:1.25;letter-spacing:.015em}.pill.dot:before{content:'';width:5px;height:5px;background:#649669;border-radius:50%}.pill.warning{background:#f7edd8;border-color:#eadabe;color:#78602a}.pill.dark{background:var(--forest);color:var(--paper);border-color:var(--forest)}.spacer{flex:1}.row{display:flex;align-items:center;gap:12px}.wrap{flex-wrap:wrap}.stack{display:grid;gap:18px}.rule{height:1px;background:var(--line);margin:24px 0}.error{font-size:13px;color:var(--error);line-height:1.6;padding:10px 0}.notice{padding:14px 17px;background:var(--soft);border-left:2px solid #89a86c;font-size:13px;line-height:1.6}.small-note{font-size:12px;color:var(--muted);line-height:1.65}.empty{padding:50px 0;max-width:600px}.empty h2{font-size:36px}.empty p{font-size:16px;color:var(--muted);line-height:1.7}.section-label{font-size:12px;color:var(--muted);letter-spacing:.08em;text-transform:uppercase;margin-bottom:25px}
/* The front door contains no client identifiers. */
.login{display:grid;grid-template-columns:1.05fr 1fr;min-height:100svh}.login-art{position:relative;background:var(--forest);color:var(--paper);overflow:hidden;display:flex;flex-direction:column;padding:42px 50px}.login-wordmark{display:flex;gap:15px;align-items:center}.login-wordmark span:last-child{font-size:13px;font-weight:600;letter-spacing:.05em}.login-statement{position:relative;z-index:2;margin:auto 0;font-size:clamp(56px,6.4vw,102px);line-height:.95;letter-spacing:-.07em;padding:60px 0}.login-statement em{font-family:var(--serif);font-weight:400;color:var(--lime);display:block}.login-geometry{position:absolute;width:62vw;height:62vw;border:1px solid #91a89433;border-radius:50%;left:23%;top:25%;box-shadow:0 0 0 35px #8aa79106,0 0 0 110px #8aa79105;transform:rotate(-18deg)}.login-geometry:before,.login-geometry:after{content:'';position:absolute;width:100%;height:1px;background:#adc4aa26;top:50%;transform:rotate(42deg)}.login-geometry:after{transform:rotate(-42deg)}.login-bottom{font-size:11px;letter-spacing:.11em;text-transform:uppercase;color:var(--sage)}.login-form-side{display:flex;flex-direction:column;padding:42px clamp(30px,6.5vw,110px);justify-content:center}.login-form-side .eyebrow{margin-bottom:32px}.login-form-side h1{font-size:clamp(36px,4vw,58px);line-height:1.03;max-width:380px;margin-bottom:34px}.access-form{display:grid;gap:16px;max-width:450px}.access-code{width:100%;padding:20px 16px;border:1px solid #bfcabd;border-radius:8px;background:#ffffff85;color:var(--forest);font-size:17px;letter-spacing:.04em}.access-form .btn{width:100%;justify-content:space-between;padding:17px 20px}.login-admin{margin-top:32px;text-align:left;font-size:12px;color:var(--muted);width:max-content}.preview-keys{border-top:1px solid var(--line);margin-top:24px;padding-top:20px;display:flex;gap:8px;flex-wrap:wrap}.preview-keys button{border:1px solid var(--line);padding:9px 12px;border-radius:6px;font-size:11px}
/* One project shell; a quiet index at the edge. */
.shell{height:100svh;display:grid;grid-template-rows:var(--header) minmax(0,1fr)}.topbar{position:relative;display:flex;align-items:center;gap:18px;padding:0 28px;background:var(--paper);border-bottom:1px solid var(--line);z-index:30}.identity{display:flex;align-items:center;gap:15px;min-width:0}.identity-text{max-width:350px;line-height:1.2}.identity-text b{font-size:17px;letter-spacing:-.03em;display:block}.identity-text small{display:block;margin-top:3px;color:var(--muted);font-size:10px;letter-spacing:.045em}.mode-switch{display:flex;align-items:center;border:1px solid var(--line);border-radius:30px;padding:3px;gap:2px}.mode-switch button{font-size:12px;padding:8px 14px;border-radius:24px;color:var(--muted)}.mode-switch button.active{background:var(--forest);color:var(--paper)}.top-actions{display:flex;align-items:center;gap:9px}.account-avatar{width:35px;height:35px;background:var(--soft);border-radius:50%;font-size:12px;font-weight:700}.menu-pop{position:absolute;right:25px;top:65px;background:var(--paper);box-shadow:0 20px 70px #062b242b;border:1px solid var(--line);border-radius:14px;width:265px;padding:9px;z-index:120;animation:enter .18s var(--ease)}.menu-pop .menu-user{padding:14px 12px;border-bottom:1px solid var(--line);margin-bottom:6px}.menu-pop button{width:100%;text-align:left;display:flex;gap:12px;align-items:center;padding:12px;border-radius:8px;font-size:13px}.menu-pop button:hover{background:var(--soft)}.menu-pop .icon{width:18px}.viewport{min-height:0;overflow:auto;position:relative;scrollbar-width:thin;scrollbar-color:#bccaba transparent;scroll-snap-type:y proximity}.viewport.present{scroll-snap-type:none}.viewport.present .scene:not(.current){display:none}.viewport.present .scene{min-height:calc(100svh - var(--header))}.preview-bar{position:relative;z-index:29;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:6px 16px;padding:7px 16px;border-bottom:1px solid #c9d9b4;background:var(--lime);color:var(--forest);font-size:11px;line-height:1.4;text-align:center}.shell.previewing{grid-template-rows:var(--header) auto minmax(0,1fr)}.shell.candidate.previewing{grid-template-rows:auto var(--header) auto minmax(0,1fr)}.preview-bar button{font-size:11px;text-decoration:underline}.prototype-tag{position:fixed;z-index:150;bottom:9px;left:12px;font-size:10px;background:var(--paper);color:var(--muted);padding:6px 9px;border:1px solid var(--line);border-radius:5px}.spine{position:fixed;right:0;top:calc(var(--header) + 12%);bottom:16%;width:38px;z-index:35;display:flex;align-items:center;justify-content:center}.spine-trigger{width:32px;border-radius:14px 0 0 14px;background:#f4f4ede6;backdrop-filter:blur(18px);border:1px solid #9faf9d55;border-right:0;padding:20px 7px;display:grid;gap:5px}.spine-trigger i{height:2px;width:11px;background:#778c7c;display:block;margin-left:auto;transition:width .25s}.spine-trigger i.current{width:21px;background:var(--forest)}.spine-index{position:absolute;right:20px;top:0;bottom:0;width:min(335px,calc(100vw - 40px));background:var(--forest);border:1px solid #5b7568;border-radius:15px;color:var(--paper);box-shadow:0 18px 70px #071e2440;padding:22px;overflow:auto;opacity:0;visibility:hidden;transform:translateX(15px);transition:.22s var(--ease);scrollbar-width:thin}.spine.open .spine-index,.spine:focus-within .spine-index{opacity:1;visibility:visible;transform:none}.spine-index header{font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--sage);margin-bottom:24px;display:flex;justify-content:space-between}.spine-index h4{font-size:13px;letter-spacing:-.02em;margin:22px 0 8px;color:var(--lime)}.spine-index button{display:block;text-align:left;width:100%;font-size:12px;line-height:1.45;padding:8px 10px;color:#bfcfc5;border-left:1px solid #738d7940;border-radius:0;white-space:normal}.spine-index button.active{color:#fff;border-left:2px solid var(--lime);background:#ffffff09}.spine-index button:hover{color:#fff}.present-controls{position:fixed;bottom:23px;left:50%;transform:translateX(-50%);display:flex;gap:17px;align-items:center;border:1px solid var(--line);border-radius:30px;background:var(--paper);box-shadow:0 8px 30px #0c2e2612;padding:6px;z-index:32}.present-controls span{font-size:12px;font-variant-numeric:tabular-nums}.present-controls .icon-btn{border:0;height:34px;width:34px}.present-controls .icon-btn:disabled{opacity:.3;cursor:default;background:none}
/* Editorial scenes are content-led, not one repeated slide master. */
.scene{position:relative;min-height:calc(100svh - var(--header));padding:clamp(45px,6vh,85px) clamp(34px,6vw,100px) 60px;scroll-snap-align:start;overflow:hidden;border-bottom:1px solid var(--line);isolation:isolate}.scene-inner{max-width:1370px;margin:0 auto;position:relative}.scene.dark{background:var(--forest);color:var(--paper);border-bottom-color:#466454}.scene.dark .eyebrow,.scene.dark .muted{color:#a7bdb0}.scene.dark .btn{border-color:#819e8b70;color:var(--paper)}.scene.dark .btn:hover{background:#ffffff13}.scene.dark .pill{border-color:#819e8b70;color:#bdd0bc}.scene.dark .text-btn{color:var(--paper)}.scene.dark .scene-points p{color:#bdd0c4}.scene.dark .scene-foot{border-top-color:#7893804a}.scene-kicker{display:flex;align-items:center;gap:22px;margin-bottom:clamp(26px,5vh,55px);color:var(--muted)}.scene-kicker .line{height:1px;width:55px;background:currentColor;opacity:.5}.scene.dark .scene-kicker{color:var(--sage)}.scene h2{font-size:clamp(43px,5.7vw,87px);line-height:1.025;max-width:1110px;margin-bottom:28px;white-space:pre-line;overflow-wrap:normal}.scene .lead{font-size:clamp(17px,1.65vw,24px);line-height:1.5;max-width:850px;letter-spacing:-.018em;color:var(--muted)}.scene.dark .lead{color:#bacebf}.scene-foot{margin-top:45px;padding-top:20px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:20px;align-items:center}.scene-foot .serial{font-size:10px;letter-spacing:.06em;color:var(--muted)}.scene.dark .scene-foot .serial{color:#9bb4a5}.scene-foot .foot-actions{display:flex;gap:25px;align-items:center;flex-wrap:wrap}.scene .actions{display:flex;gap:12px}.scene-points{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:30px;margin-top:36px}.scene-points>div{border-top:1px solid var(--line);padding-top:20px}.scene.dark .scene-points>div{border-color:#8aa69055}.scene-points h3{font-size:21px;line-height:1.2;letter-spacing:-.025em;margin-bottom:10px}.scene-points p{font-size:15px;line-height:1.6;color:var(--muted);max-width:400px}.kind-hero{display:flex;align-items:center}.kind-hero h2{font-size:clamp(50px,7.3vw,112px);line-height:.99;letter-spacing:-.066em;max-width:1100px}.kind-hero .scene-inner{width:100%}.hero-end{display:flex;justify-content:space-between;align-items:end;gap:30px;margin-top:50px}.hero-end .lead{max-width:490px;font-size:18px}.hero-symbol{width:155px;height:155px;border:1px solid #89a27f55;border-radius:50%;position:relative;margin-right:30px;flex-shrink:0}.hero-symbol:before{content:'';position:absolute;top:50%;left:-30px;width:215px;height:1px;background:var(--lime);transform:rotate(-25deg)}.hero-symbol:after{content:'';position:absolute;top:calc(50% - 6px);left:calc(50% - 6px);width:12px;height:12px;background:var(--lime);border-radius:50%}.kind-divider{min-height:58vh;display:flex;align-items:center;background:var(--soft);padding-bottom:75px}.kind-divider .scene-inner{width:100%;display:grid;grid-template-columns:220px 1fr;gap:45px;align-items:center}.divider-num{font-family:var(--serif);font-size:190px;font-weight:400;line-height:1;letter-spacing:-.1em;color:#879f8266}.kind-divider h2{font-size:clamp(50px,6vw,94px);margin:10px 0 24px;max-width:800px}.kind-divider .lead{max-width:650px;font-size:21px}.kind-divider .scene-foot{display:none}.kind-manifesto{display:flex;align-items:center}.kind-manifesto .scene-inner{width:100%}.kind-manifesto h2{font-size:clamp(50px,6.5vw,96px);max-width:1020px}.kind-manifesto .lead{font-family:var(--serif);font-style:italic;font-size:clamp(23px,2.6vw,38px);max-width:950px}.kind-manifesto .scene-points{grid-template-columns:repeat(2,1fr);max-width:950px}.kind-question{text-align:center}.kind-question h2{margin:0 auto 30px;max-width:1000px;font-size:clamp(44px,5vw,74px)}.kind-question .lead{margin:0 auto;font-family:var(--serif);font-size:clamp(21px,2.1vw,31px)}.question-list{margin:35px auto 0;text-align:left;max-width:1040px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 45px}.question-item{display:grid;grid-template-columns:30px 1fr;gap:15px;padding:20px 0;border-top:1px solid var(--line)}.question-item .num{font-size:11px;color:var(--muted);padding-top:3px}.question-item h3{font-size:19px;margin-bottom:8px;font-weight:500;letter-spacing:-.02em}.question-item p{font-size:14px;color:var(--muted);line-height:1.5;margin:0}.kind-question .scene-foot{text-align:left}.kind-editorial h2{font-size:clamp(44px,4.8vw,72px);max-width:920px}.editorial-grid{display:grid;grid-template-columns:1fr 1fr;gap:8vw;align-items:start}.editorial-grid .big-serif{font-family:var(--serif);font-size:clamp(90px,14vw,205px);letter-spacing:-.085em;font-weight:400;line-height:.9;color:#a9baa0;margin-top:35px}.editorial-grid .scene-points{display:block;margin:0}.editorial-grid .scene-points>div{margin-bottom:25px;padding-top:22px}.kind-sequence h2{max-width:880px;font-size:clamp(44px,5vw,76px)}.sequence-list{margin-top:42px;display:grid;gap:0}.sequence-item{display:grid;grid-template-columns:50px minmax(170px,.75fr) 1.4fr;gap:25px;align-items:baseline;padding:25px 0;border-top:1px solid var(--line)}.sequence-item .num{font-family:var(--serif);font-size:27px;color:#80937b}.sequence-item h3{font-size:25px;font-weight:500;margin:0}.sequence-item p{font-size:17px;line-height:1.6;color:var(--muted);margin:0;max-width:670px}.kind-sequence.has-image .sequence-layout{display:grid;grid-template-columns:.95fr 1fr;gap:60px}.sequence-layout .sequence-item{grid-template-columns:28px 1fr;gap:12px}.sequence-layout .sequence-item p{grid-column:2;font-size:15px}.scene-image{position:relative;overflow:hidden;min-height:470px;border-radius:3px;background:#a8b4a1}.scene-image img{width:100%;height:100%;position:absolute;inset:0;object-fit:cover;transform-origin:center;transition:filter .4s}.scene-image figcaption{position:absolute;bottom:16px;left:16px;color:white;font-size:10px;background:#10291fd9;padding:7px 9px;border-radius:5px;max-width:80%}.scene-image .image-action{position:absolute;right:14px;top:14px;border-radius:7px;background:#f4f4ede8;padding:9px 12px;color:var(--forest);font-size:11px;opacity:0;transition:opacity .2s}.scene-image:hover .image-action,.scene-image:focus-within .image-action{opacity:1}.kind-image .image-layout.split{display:grid;grid-template-columns:1.05fr 1fr;gap:60px}.kind-image h2{font-size:clamp(41px,4.6vw,68px);max-width:640px}.kind-image .lead{font-size:18px}.kind-image .scene-points{display:block;margin-top:25px}.kind-image .scene-points>div{padding-top:15px;margin-top:15px;display:grid;grid-template-columns:.75fr 1.15fr;gap:25px}.kind-image .scene-points h3{font-size:17px}.kind-image .scene-points p{font-size:14px}.kind-image .scene-image{min-height:580px}.kind-image.bleed{background:var(--forest);color:var(--paper);min-height:800px}.bleed-bg{position:absolute;inset:0;z-index:-2;overflow:hidden}.bleed-bg img{width:100%;height:100%;object-fit:cover}.bleed-bg:after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,#052820eb 0%,#052820ce 35%,#05282038 80%)}.kind-image.bleed .image-layout.split{display:block}.kind-image.bleed h2{font-size:clamp(50px,5.7vw,85px);max-width:750px}.kind-image.bleed .lead{max-width:580px;color:#d3dfd6}.kind-image.bleed .scene-points{max-width:600px}.kind-image.bleed .scene-image{display:none}.kind-image.bleed .scene-foot{max-width:700px}.kind-canvas h2,.kind-diagnostic h2,.kind-evidence h2,.kind-alignment h2,.kind-outputs h2,.kind-roles h2,.kind-readiness h2,.kind-stage h2,.kind-talent h2,.kind-comparison h2,.kind-semafor h2,.kind-timeline h2,.kind-budget h2{font-size:clamp(40px,4.8vw,72px)}.canvas-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:38px;border-top:1px solid var(--line);border-left:1px solid var(--line)}.canvas-cell{padding:24px;border-bottom:1px solid var(--line);border-right:1px solid var(--line);min-height:165px;transition:background .25s;text-align:left}.canvas-cell:hover,.canvas-cell:focus-visible{background:var(--soft)}.canvas-cell .num{display:block;font-size:10px;color:var(--muted);margin-bottom:17px}.canvas-cell h3{font-size:21px;font-weight:500;margin:0 0 10px}.canvas-cell p{font-size:14px;line-height:1.55;color:var(--muted);margin:0}.diagnostic-layout{display:grid;grid-template-columns:.8fr 1.2fr;gap:80px;margin-top:34px}.question-counter{font-family:var(--serif);font-size:118px;line-height:1;color:#9db092;letter-spacing:-.065em}.diagnostic-question{border-top:1px solid var(--line);padding-top:22px}.diagnostic-question h3{font-family:var(--serif);font-weight:400;font-size:31px;line-height:1.35;margin-bottom:25px;letter-spacing:-.025em;min-height:128px}.diagnostic-controls{display:flex;align-items:center;gap:18px}.diagnostic-controls .small-note{margin:0}.alignment-map{display:grid;grid-template-columns:1fr 130px 1fr;gap:30px;margin:50px 0 15px;align-items:center}.alignment-side{padding:26px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.alignment-side h3{font-size:30px;line-height:1.1;margin-bottom:16px}.alignment-side p{font-size:17px;line-height:1.65;color:var(--muted);margin-bottom:0}.alignment-mid{display:grid;place-items:center;gap:8px}.alignment-mid .icon{width:60px;height:60px;stroke-width:1}.alignment-output{max-width:780px;font-size:20px;font-family:var(--serif);font-style:italic;text-align:center;margin:38px auto 0;line-height:1.5}.evidence-matrix{width:100%;margin-top:38px;border-collapse:collapse;table-layout:fixed;text-align:left}.evidence-matrix th{font-size:11px;letter-spacing:.035em;text-transform:uppercase;padding:15px 15px 15px 0;border-bottom:1px solid var(--ink);font-weight:600}.evidence-matrix td{padding:25px 15px 25px 0;border-bottom:1px solid var(--line);font-size:15px;line-height:1.6;vertical-align:top;color:var(--muted)}.evidence-matrix .open-dash{display:block;width:26px;height:1px;background:#97aa91;margin:10px 0}.role-tabs{display:flex;margin-top:40px;border-bottom:1px solid var(--line);gap:25px}.role-tabs button{padding:15px 0;font-size:18px;color:var(--muted);border-bottom:2px solid transparent}.role-tabs button.active{color:var(--ink);border-color:var(--ink)}.role-content{display:grid;grid-template-columns:.7fr 1fr;gap:60px;padding:35px 0;min-height:190px}.role-content h3{font-size:47px;font-family:var(--serif);font-weight:400;line-height:1.05}.role-content p{font-size:20px;line-height:1.6;color:var(--muted)}.output-list{margin-top:32px;display:grid;grid-template-columns:repeat(2,1fr);gap:0 55px}.output-item{display:flex;gap:20px;padding:23px 0;border-top:1px solid var(--line);align-items:center}.output-item .num{font-size:11px;color:var(--muted)}.output-item b{font-size:22px;font-weight:500;letter-spacing:-.025em}.readiness-track{margin-top:42px;position:relative}.track{display:grid;grid-template-columns:140px 1fr;align-items:center;gap:20px;margin-bottom:20px}.track>span{font-size:12px;color:var(--muted)}.track-bar{background:#dce5d3;height:70px;display:flex;align-items:center;justify-content:space-around;gap:18px;padding:18px;position:relative}.track-bar.dark{background:var(--forest);color:var(--paper);margin-left:12%}.track-bar span{font-size:13px;line-height:1.35}.track-bar:after{content:'';position:absolute;right:-1px;top:0;border-top:35px solid var(--paper);border-bottom:35px solid var(--paper);border-left:14px solid transparent}.talent-lists{display:grid;grid-template-columns:1fr 1fr;gap:60px;margin-top:36px}.talent-lists h3{font-size:24px;margin-bottom:22px}.talent-slot{padding:20px 0;border-top:1px solid var(--line);display:flex;gap:20px;align-items:center}.talent-slot .number{font-family:var(--serif);font-size:30px;color:#84977b}.talent-slot b{font-size:16px;font-weight:500}.talent-slot small{display:block;margin-top:6px;color:var(--muted);font-size:12px}.comparison-layout{display:grid;grid-template-columns:.8fr 1.2fr;gap:55px;margin-top:36px}.enhancement-tabs{display:grid;gap:0;align-content:start}.enhancement-tabs button{padding:22px 0;text-align:left;border-top:1px solid var(--line);font-size:23px;letter-spacing:-.035em;color:var(--muted)}.enhancement-tabs button.active{color:var(--ink)}.enhancement-tabs button small{display:block;letter-spacing:.08em;text-transform:uppercase;font-size:10px;margin-bottom:9px}.comparison-detail{padding:32px 36px;background:#e4ebd8;min-height:360px}.comparison-detail h3{font-size:32px;margin-bottom:24px}.comparison-detail dl{margin:0;display:grid;gap:24px}.comparison-detail dt{font-size:10px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px}.comparison-detail dd{font-size:15px;line-height:1.65;margin:0}.comparison-detail .conclusion{font-family:var(--serif);font-size:22px;line-height:1.45;margin:30px 0 0;border-top:1px solid #b8c7a8;padding-top:22px}.semafor-grid{display:grid;grid-template-columns:1fr 1fr;gap:70px;margin-top:40px}.semafor-name{font-family:var(--serif);font-size:clamp(60px,8vw,118px);font-weight:400;letter-spacing:-.06em;line-height:1.1;word-break:break-word;margin-bottom:35px}.pedigree{display:grid;gap:24px}.pedigree h4{font-size:19px;margin:0 0 8px;letter-spacing:-.02em}.pedigree p{font-size:15px;line-height:1.6;color:var(--muted);margin:0}.institution-list{display:flex;flex-wrap:wrap;gap:16px 22px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:25px 0;margin:20px 0 30px;font-size:19px;letter-spacing:-.03em}.timeline-steps{display:grid;grid-template-columns:repeat(5,1fr);margin-top:45px;gap:18px}.timeline-step{border-top:1px solid var(--ink);padding-top:25px;position:relative}.timeline-step:before{content:'';position:absolute;width:7px;height:7px;border-radius:50%;background:var(--ink);top:-4px;left:0}.timeline-step .num{font-size:11px;color:var(--muted)}.timeline-step h3{font-size:20px;margin:22px 0 12px}.timeline-step p{font-size:14px;line-height:1.6;color:var(--muted)}.budget-rows{margin-top:40px}.budget-row{display:grid;grid-template-columns:42px 1fr 1fr 170px;gap:25px;padding:25px 0;border-top:1px solid var(--line);align-items:start}.budget-row .num{font-family:var(--serif);font-size:26px;color:#91a386}.budget-row h3{font-size:24px;margin:0}.budget-row p{font-size:15px;color:var(--muted);line-height:1.6;margin:0}.budget-row .amount{font-size:13px;text-align:right;color:var(--muted)}.kind-ending{background:var(--forest);color:var(--paper);display:flex;align-items:center}.kind-ending .scene-inner{width:100%}.kind-ending h2{font-size:clamp(60px,8vw,116px);max-width:1140px}.year-duo{display:grid;grid-template-columns:1fr 1fr;gap:65px;margin:38px 0}.year-duo>div{border-top:1px solid #71907066;padding:22px 0}.year-duo small{color:var(--sage);font-size:11px;letter-spacing:.12em;text-transform:uppercase}.year-duo p{font-family:var(--serif);font-size:clamp(26px,3vw,40px);font-weight:400;color:var(--lime);line-height:1.2;margin:20px 0 0}
/* Reading depth and editing: one lateral layer, never a page reflow. */
.overlay-backdrop{position:fixed;inset:0;background:#06282066;backdrop-filter:blur(7px);z-index:90;animation:fadeIn .2s var(--ease)}.sheet{position:absolute;right:0;top:0;bottom:0;width:min(950px,100%);background:var(--paper);display:flex;flex-direction:column;box-shadow:-30px 0 90px #031b2426;animation:slideIn .38s var(--ease)}.sheet.wide{width:min(1200px,100%)}.sheet-head{display:flex;align-items:center;gap:20px;padding:23px 35px;border-bottom:1px solid var(--line);flex-shrink:0}.sheet-head .eyebrow{flex:1}.sheet-body{overflow:auto;padding:40px clamp(23px,4vw,66px) 60px;scrollbar-width:thin;flex:1;min-height:0}.sheet-body h2{font-size:clamp(32px,3.6vw,50px);line-height:1.12;max-width:780px;margin-bottom:28px;white-space:pre-line}.sheet-body .intro{font-family:var(--serif);font-size:24px;line-height:1.5;color:var(--muted);margin-bottom:38px}.depth-block{padding:28px 0;border-top:1px solid var(--line)}.depth-block h3{font-size:24px;margin-bottom:17px;line-height:1.2}.depth-block p{font-size:18px;line-height:1.8;color:#3d5448;white-space:pre-line}.sheet-footer{display:flex;justify-content:space-between;gap:15px;padding:18px 35px;border-top:1px solid var(--line);background:var(--paper);flex-shrink:0}.source-chip{font-size:11px;border:1px solid var(--line);padding:8px 10px;border-radius:5px}.source-body{font-size:15px;white-space:pre-wrap;line-height:1.8;overflow-wrap:anywhere;color:#405448}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.field{display:grid;gap:9px;margin-bottom:20px;min-width:0}.field label,.field>span{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600}.field input,.field select,.field textarea{width:100%;border:1px solid #bdcaba;border-radius:7px;background:#fff9;padding:12px 13px;color:var(--ink);font-size:14px;line-height:1.5}.field textarea{min-height:120px}.field input[type=range]{padding:0}.field.checkbox{display:flex;align-items:flex-start;gap:12px}.field.checkbox input{width:17px;height:17px;accent-color:var(--forest);flex-shrink:0;margin-top:2px}.field.checkbox label{font-size:13px;line-height:1.55;letter-spacing:0;text-transform:none;color:var(--ink);font-weight:400}.edit-block{border-top:1px solid var(--line);padding-top:22px;margin:25px 0}.edit-block header{display:flex;align-items:center;gap:12px;margin-bottom:17px}.edit-block h3{margin:0;font-size:20px}.edit-points{display:grid;grid-template-columns:.6fr 1.4fr;gap:12px;margin-bottom:14px}.edit-points input,.edit-points textarea{width:100%;border:1px solid var(--line);border-radius:6px;padding:12px;background:#fff9;color:var(--ink);font-size:13px;min-height:85px}.image-edit-preview{height:320px;position:relative;overflow:hidden;background:var(--soft);margin:25px 0;border-radius:6px}.image-edit-preview img{height:100%;width:100%;object-fit:cover}.asset-library{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:20px}.asset-library button{padding:0;text-align:left}.asset-library img{width:100%;aspect-ratio:1.5;object-fit:cover;border-radius:5px;border:2px solid transparent}.asset-library button.selected img{border-color:var(--ink)}.asset-library small{font-size:11px;display:block;padding-top:7px}.publish-row{display:flex;align-items:center;gap:16px;padding:16px 0;border-top:1px solid var(--line)}.publish-row input{width:17px;height:17px;accent-color:var(--ink)}.publish-row b{font-size:14px;font-weight:500;flex:1}.publish-row .pill{flex-shrink:0}.code-result{font-size:22px;line-height:1.6;font-family:monospace;letter-spacing:.02em;padding:25px;border:1px solid var(--line);background:var(--soft);overflow-wrap:anywhere;margin:22px 0;user-select:all}.drawer-list{display:grid;gap:0}.drawer-list button{padding:20px 0;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:20px;text-align:left}.drawer-list button b{font-size:21px;font-weight:500}.drawer-list button small{font-size:12px;color:var(--muted);display:block;margin-top:5px}
/* The work side is an editorial workspace, not a marketing dashboard. */
.work-page{max-width:1420px;padding:48px 55px 100px;margin:auto}.work-head{display:flex;align-items:end;gap:25px;justify-content:space-between;margin-bottom:36px}.work-head h1{font-size:clamp(38px,5vw,65px);margin:13px 0 0;line-height:1;letter-spacing:-.055em}.work-head .small-note{max-width:470px;margin:15px 0 0}.workspace-nav{display:flex;gap:28px;border-bottom:1px solid var(--line);margin-bottom:30px}.workspace-nav button{font-size:14px;padding:13px 0;color:var(--muted);border-bottom:2px solid transparent}.workspace-nav button.active{color:var(--ink);border-bottom-color:var(--ink)}.work-table{width:100%;border-collapse:collapse;text-align:left;table-layout:auto}.work-table th{font-size:10px;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);font-weight:600;border-bottom:1px solid var(--ink);padding:16px 14px}.work-table td{font-size:14px;border-bottom:1px solid var(--line);padding:20px 14px;line-height:1.5;vertical-align:middle}.work-table td:first-child,.work-table th:first-child{padding-left:0}.work-table td:last-child{text-align:right;padding-right:0}.work-table small{font-size:11px;color:var(--muted);display:block;margin-top:4px}.person-name{display:flex;align-items:center;gap:13px}.person-name .initial{display:grid;place-items:center;background:#dde7d4;border-radius:50%;width:36px;height:36px;font-size:12px;font-weight:600;flex-shrink:0}.admin-layout{display:grid;grid-template-columns:1.2fr .8fr;gap:70px}.admin-block{border-top:1px solid var(--line);padding:27px 0}.admin-block h2{font-size:26px;margin:0 0 22px}.admin-block .field{margin-bottom:23px}.status-line{display:flex;gap:15px;align-items:center;padding:17px 0;border-bottom:1px solid var(--line);font-size:13px}.status-line b{flex:1;font-weight:500}.settings-side{padding:27px 28px;background:var(--soft);align-self:start;border-radius:3px}.settings-side h3{font-size:22px;margin-bottom:20px}.settings-side p{font-size:14px;line-height:1.7;color:#4c6654}.settings-side code{font-size:12px;word-break:break-word}.source-list{border-top:1px solid var(--ink)}.source-row{display:grid;grid-template-columns:55px 1fr 110px 25px;gap:20px;padding:24px 0;border-bottom:1px solid var(--line);text-align:left;width:100%;align-items:center}.source-row:hover{background:#e6edde55}.source-row .source-number{font-family:var(--serif);font-size:30px;color:#8ba182}.source-row b{font-size:20px;font-weight:500;letter-spacing:-.02em}.source-row small{font-size:12px;color:var(--muted);display:block;margin-top:8px}.source-search{border:0;border-bottom:1px solid var(--ink);background:transparent;font-size:17px;padding:13px 0;width:280px;color:var(--ink);border-radius:0}.book-toolbar{display:flex;align-items:center;gap:22px;border-bottom:1px solid var(--line);padding-bottom:20px;margin-bottom:30px;flex-wrap:wrap}.book{max-width:850px;margin:auto;white-space:pre-wrap;font-family:var(--serif);font-size:17px;line-height:1.7;color:#29483a;padding:35px 50px;background:#fff8;border:1px solid var(--line);box-shadow:0 10px 40px #11312108}.book-page-title{font-family:var(--sans);font-size:26px;font-weight:600;letter-spacing:-.03em;display:block;margin:30px 0 12px}.inbox-row{display:grid;grid-template-columns:120px minmax(0,1fr) 145px 22px;gap:24px;padding:24px 0;border-bottom:1px solid var(--line);width:100%;text-align:left;align-items:center}.inbox-row h3{font-size:20px;font-weight:500;margin:0 0 7px;letter-spacing:-.025em}.inbox-row p{margin:0;font-size:13px;line-height:1.6;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.inbox-row .date{font-size:11px;line-height:1.5;color:var(--muted)}.message-body{font-size:17px;white-space:pre-wrap;line-height:1.8;color:#3c5747}.attachment{display:flex;gap:12px;padding:13px 15px;border:1px solid var(--line);margin:12px 0;font-size:13px}.proposal-diff{padding:23px;background:var(--soft);border-left:2px solid var(--forest);margin:25px 0}.proposal-diff h3{font-size:22px}.proposal-diff p{font-size:15px;line-height:1.6;white-space:pre-line}.task-row{display:grid;grid-template-columns:1fr 170px 110px 150px;gap:20px;padding:18px 0;border-top:1px solid var(--line);align-items:center}.task-row h3{font-size:16px;font-weight:500;margin:0 0 6px;letter-spacing:-.01em}.task-row small{font-size:11px;color:var(--muted)}.task-row select,.inline-select{font-size:12px;background:transparent;border:1px solid var(--line);padding:8px 10px;border-radius:6px;color:var(--ink)}.task-actions{display:flex;flex-direction:column;align-items:flex-end;gap:6px}.deliverable-group{margin-bottom:35px}.deliverable-title{display:flex;gap:18px;align-items:baseline;padding:20px 0;border-top:1px solid var(--ink)}.deliverable-title h3{font-size:24px;margin:0;flex:1;font-weight:500}.deliverable-title .count{font-size:12px;color:var(--muted)}.delivery-empty{font-size:13px;color:var(--muted);padding:0 0 18px}.history-item{padding:22px 0;border-top:1px solid var(--line);display:grid;grid-template-columns:100px 1fr;gap:25px}.history-item .date{font-size:11px;line-height:1.6;color:var(--muted)}.history-item h3{font-size:19px;margin-bottom:9px}.history-item p{font-size:14px;line-height:1.5;color:var(--muted)}.coverage-list{display:grid;grid-template-columns:1fr 1fr;gap:0 40px}.coverage-item{border-top:1px solid var(--line);padding:22px 0}.coverage-item small{font-size:10px;letter-spacing:.08em;color:var(--muted)}.coverage-item p{font-size:15px;line-height:1.6;margin:12px 0}.supplier-page{max-width:1200px;margin:auto;padding:60px 65px 120px}.supplier-page h1{font-size:clamp(44px,6vw,80px);margin:25px 0 38px;max-width:870px;line-height:1.02}.supplier-columns{display:grid;grid-template-columns:1.2fr .8fr;gap:90px}.supplier-brief{font-family:var(--serif);font-size:21px;line-height:1.75;white-space:pre-line;color:#3c5645}.supplier-side{border-top:1px solid var(--ink);padding-top:26px}.supplier-side h2{font-size:26px}.supplier-side p{font-size:14px;line-height:1.6;color:var(--muted)}.supplier-submissions{margin-top:55px}.supplier-submissions h2{font-size:29px}
/* Chat is a working surface, not a floating icon covering a form. */
.chat-fab{position:fixed;right:24px;bottom:26px;z-index:45;width:58px;height:58px;border-radius:50%;background:var(--forest);color:var(--paper);box-shadow:0 9px 35px #06251d33;border:1px solid #7c968677;display:grid;place-items:center;touch-action:none;user-select:none}.chat-fab .icon{width:25px;height:25px}.chat-fab:hover{background:#255141}.chat-panel{position:fixed;top:15px;bottom:15px;right:15px;width:min(565px,calc(100vw - 30px));background:var(--paper);border:1px solid #b5c4b0;border-radius:18px;z-index:100;display:flex;flex-direction:column;box-shadow:0 20px 100px #04271c55;animation:slideIn .35s var(--ease)}.chat-header{display:flex;align-items:center;gap:17px;padding:22px 23px;border-bottom:1px solid var(--line)}.chat-header strong{font-size:19px;letter-spacing:-.035em;display:block}.chat-header small{font-size:10px;color:var(--muted);display:block;margin-top:4px}.chat-body{padding:28px 26px;flex:1;min-height:0;overflow:auto;scrollbar-width:thin}.chat-welcome{padding:30px 0}.chat-welcome h2{font-size:43px;line-height:1.03;margin-bottom:28px;max-width:350px}.chat-prompts{display:grid;gap:10px}.chat-prompts button{font-size:14px;text-align:left;padding:15px 0;display:flex;justify-content:space-between;border-bottom:1px solid var(--line);line-height:1.5}.chat-message{margin-bottom:28px;font-size:15px;line-height:1.75;overflow-wrap:anywhere}.chat-message.user{margin-left:45px;padding:15px 18px;background:var(--soft);border-radius:12px 12px 2px 12px}.chat-message.assistant{padding:0 0 10px}.chat-message .message-label{font-size:10px;letter-spacing:.09em;text-transform:uppercase;margin-bottom:12px;color:var(--muted)}.chat-message p{white-space:pre-wrap;margin:0 0 13px}.chat-message .answer-actions{margin-top:13px;display:flex;gap:9px;flex-wrap:wrap}.chat-message .answer-actions button{font-size:11px;padding:8px 10px;border:1px solid var(--line);border-radius:6px}.chat-message .contrarian{border-left:2px solid #b4c895;padding:12px 0 12px 16px;margin-top:20px;font-size:14px;color:#547054}.chat-compose{padding:16px 20px 20px;border-top:1px solid var(--line)}.chat-input-wrap{display:flex;align-items:end;gap:10px;border:1px solid #b6c6ae;border-radius:12px;background:#fff8;padding:10px}.chat-input-wrap textarea{min-height:44px;max-height:160px;width:100%;border:0;resize:none;background:transparent;padding:9px;font-size:15px;line-height:1.5;color:var(--ink);overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.chat-input-wrap textarea:focus{outline:0}.chat-input-wrap:focus-within{outline:2px solid #a7bf86;outline-offset:2px}.chat-input-wrap button{flex-shrink:0;border-radius:9px;width:42px;height:42px;background:var(--forest);color:white;display:grid;place-items:center}.chat-footnote{font-size:10px;color:var(--muted);margin:10px 0 0;display:flex;justify-content:space-between;gap:10px}.job-pending{display:flex;align-items:center;gap:13px;color:var(--muted);font-size:12px;padding:16px 0}.job-pending i{width:7px;height:7px;background:var(--ink);border-radius:50%;animation:pulse 1s infinite}.job-pending button{margin-left:auto;text-decoration:underline;font-size:11px}#toast{position:fixed;z-index:250;bottom:28px;left:50%;max-width:85vw;transform:translate(-50%,20px);opacity:0;visibility:hidden;background:var(--forest);border:1px solid #8aa383;color:var(--paper);padding:14px 22px;border-radius:8px;font-size:13px;line-height:1.5;box-shadow:0 8px 30px #031b2440;transition:.2s}#toast.show{opacity:1;visibility:visible;transform:translate(-50%,0)}
@keyframes slideIn{from{transform:translateX(70px);opacity:.5}to{transform:none;opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes enter{from{opacity:0;transform:translateY(-7px)}to{opacity:1;transform:none}}.reveal{opacity:0;transform:translateY(22px);transition:opacity .65s var(--ease),transform .7s var(--ease)}.reveal.is-visible{opacity:1;transform:none}.scene.current .reveal{opacity:1;transform:none}::view-transition-old(root){animation:fadeIn .18s reverse}::view-transition-new(root){animation:fadeIn .24s}
@media(min-width:1300px){.scene{padding-left:7.2vw;padding-right:7.2vw}.kind-stage .scene-inner{max-width:1270px}}
@media(max-width:1100px){.topbar{gap:10px;padding:0 20px}.identity-text{max-width:290px}.topbar .user-pill{display:none}.scene{padding-left:48px;padding-right:55px}.scene h2{font-size:58px}.kind-hero h2{font-size:78px}.kind-divider .scene-inner{grid-template-columns:155px 1fr;gap:30px}.divider-num{font-size:145px}.kind-image .image-layout{gap:35px;grid-template-columns:1fr 1fr}.kind-image h2{font-size:48px}.kind-image .scene-image{min-height:530px}.kind-image .scene-points>div{display:block}.kind-image .scene-points p{margin-bottom:5px}.kind-image.bleed h2{font-size:65px}.diagnostic-layout{gap:45px}.admin-layout{gap:35px}.work-page{padding-left:32px;padding-right:32px}.semafor-grid{gap:40px}.supplier-columns{gap:45px}.comparison-layout{gap:30px}.timeline-steps{grid-template-columns:repeat(3,1fr);gap:35px}}
@media(max-width:760px){:root{--header:65px}.topbar{padding:0 15px;gap:10px}.identity{gap:10px}.brand-mark{width:31px;height:31px;font-size:21px}.identity-text b{font-size:14px}.identity-text small{font-size:9px;max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.top-actions{gap:6px}.topbar .mode-switch,.topbar .header-edit,.topbar .publish-btn,.topbar .view-pill{display:none}.topbar .icon-btn{width:34px;height:34px}.login{grid-template-columns:1fr;min-height:100svh}.login-art{min-height:31svh;padding:25px 28px}.login-statement{font-size:50px;padding:24px 0;margin:0;max-width:400px}.login-statement em{display:inline}.login-geometry{width:85vw;height:85vw;top:0;left:40%}.login-bottom{display:none}.login-form-side{padding:35px 28px;justify-content:start}.login-form-side .eyebrow{margin-bottom:15px}.login-form-side h1{font-size:38px;margin-bottom:25px}.scene{min-height:auto;padding:40px 27px 43px;scroll-snap-align:none}.scene h2{font-size:42px;line-height:1.065;letter-spacing:-.055em;white-space:normal}.scene .lead{font-size:17px}.scene-kicker{margin-bottom:28px;gap:14px}.scene-kicker .eyebrow{font-size:10px}.scene-foot{margin-top:30px;align-items:start;gap:18px;flex-direction:column}.scene-foot .foot-actions{gap:22px}.scene-foot .serial{font-size:9px}.kind-hero{min-height:calc(100svh - var(--header))}.kind-hero h2{font-size:clamp(46px,10.5vw,66px);line-height:1.025;white-space:pre-line}.hero-end{margin-top:37px;gap:15px}.hero-end .lead{font-size:15px}.hero-symbol{width:65px;height:65px;margin-right:0}.hero-symbol:before{width:95px;left:-15px}.hero-symbol:after{width:7px;height:7px;top:calc(50% - 3px);left:calc(50% - 3px)}.kind-divider{min-height:45vh;padding:50px 27px}.kind-divider .scene-inner{display:block}.divider-num{font-size:85px;margin-bottom:25px;letter-spacing:-.075em}.kind-divider h2{font-size:49px}.kind-divider .lead{font-size:17px}.editorial-grid{display:block}.editorial-grid .big-serif{display:none}.scene-points{grid-template-columns:1fr;gap:12px}.scene-points>div{padding-top:18px}.scene-points p{font-size:15px;max-width:none}.kind-manifesto{min-height:80vh}.kind-manifesto h2{font-size:47px}.kind-manifesto .lead{font-size:25px}.kind-manifesto .scene-points{grid-template-columns:1fr}.question-list{display:block}.question-item{padding:18px 0;gap:8px;grid-template-columns:24px 1fr}.question-item h3{font-size:18px}.kind-question h2{font-size:40px}.kind-question .lead{font-size:22px}.sequence-item{grid-template-columns:30px 1fr;gap:10px 15px;padding:22px 0}.sequence-item h3{font-size:23px}.sequence-item p{grid-column:2;font-size:15px}.kind-sequence.has-image .sequence-layout{display:flex;flex-direction:column;gap:25px}.scene-image{min-height:340px;margin:0}.scene-image .image-action{opacity:1}.kind-image .image-layout{display:block}.kind-image .scene-image{margin-top:32px;min-height:360px}.kind-image h2{font-size:44px}.kind-image .scene-points>div{display:grid;grid-template-columns:.9fr 1.3fr;gap:15px}.kind-image .scene-points h3{font-size:16px}.kind-image .scene-points p{font-size:13px}.kind-image.bleed{min-height:780px}.kind-image.bleed h2{font-size:47px}.bleed-bg:after{background:linear-gradient(90deg,#052820f0,#052820c4 62%,#05282066)}.bleed-bg img{object-position:70% center}.kind-image.bleed .scene-points>div{display:block}.canvas-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.canvas-cell{padding:18px 15px;min-height:155px}.canvas-cell h3{font-size:19px}.canvas-cell p{font-size:13px}.diagnostic-layout{display:block}.question-counter{font-size:80px;margin:25px 0}.diagnostic-question h3{font-size:28px;min-height:130px}.alignment-map{grid-template-columns:1fr;gap:15px;margin-top:25px}.alignment-mid .icon{width:36px;height:36px;transform:rotate(90deg)}.alignment-output{font-size:21px}.evidence-matrix{display:block;overflow-x:auto;min-width:0;table-layout:fixed}.evidence-matrix th,.evidence-matrix td{min-width:135px;font-size:12px;padding-right:20px}.role-tabs{gap:22px;overflow:auto}.role-tabs button{font-size:16px;white-space:nowrap}.role-content{grid-template-columns:1fr;gap:5px;padding-top:27px}.role-content h3{font-size:38px}.role-content p{font-size:18px}.output-list{grid-template-columns:1fr}.output-item b{font-size:20px}.track{grid-template-columns:1fr;gap:12px}.track-bar{font-size:12px;height:auto;min-height:75px;padding:14px;gap:10px}.track-bar span{font-size:11px}.track-bar.dark{margin-left:5%}.talent-lists{display:block}.talent-lists>div{margin-bottom:30px}.comparison-layout{display:block}.enhancement-tabs{display:flex;overflow:auto;gap:18px;margin-bottom:22px}.enhancement-tabs button{font-size:17px;min-width:170px;padding:17px 0}.comparison-detail{padding:25px 23px;min-height:300px}.comparison-detail h3{font-size:27px}.semafor-grid{display:block}.semafor-name{font-size:90px}.semafor-grid>div:last-child{margin-top:35px}.institution-list{font-size:17px}.timeline-steps{grid-template-columns:1fr 1fr;gap:30px}.timeline-step h3{font-size:19px}.timeline-step p{font-size:13px}.budget-row{grid-template-columns:28px 1fr;gap:12px;padding:22px 0}.budget-row h3{font-size:23px}.budget-row p{grid-column:2;font-size:14px}.budget-row .amount{grid-column:2;text-align:left;font-size:11px}.kind-ending{min-height:75vh}.kind-ending h2{font-size:49px}.year-duo{gap:25px}.year-duo p{font-size:27px}.spine{width:25px;top:30%;bottom:30%}.spine-trigger{padding:16px 5px;width:25px}.spine-trigger i.current{width:15px}.spine-trigger i{width:8px}.spine-index{right:12px;position:fixed;top:80px;bottom:100px;width:315px}.chat-fab{width:51px;height:51px;right:17px;bottom:19px}.chat-panel{top:0;bottom:0;right:0;width:100%;border:0;border-radius:0}.chat-header{padding:20px}.chat-body{padding:23px 20px}.chat-compose{padding:14px 16px max(18px,env(safe-area-inset-bottom));}.chat-welcome h2{font-size:40px}.chat-message{font-size:15px}.sheet-head{padding:20px}.sheet-body{padding:30px 24px 55px}.sheet-body h2{font-size:36px}.sheet-body .intro{font-size:22px}.depth-block p{font-size:17px}.sheet-footer{padding:15px 20px max(17px,env(safe-area-inset-bottom));flex-wrap:wrap}.form-grid{grid-template-columns:1fr;gap:0}.field{margin-bottom:20px}.edit-points{grid-template-columns:1fr;gap:7px}.asset-library{grid-template-columns:repeat(2,1fr)}.image-edit-preview{height:235px}.work-page{padding:35px 23px 100px}.work-head{display:block;margin-bottom:28px}.work-head h1{font-size:45px}.work-head>.row{margin-top:22px}.workspace-nav{gap:23px;overflow:auto}.workspace-nav button{white-space:nowrap;font-size:13px}.work-table{font-size:12px}.work-table th{padding:12px 7px}.work-table td{padding:17px 7px;font-size:12px}.work-table .optional-col{display:none}.person-name{gap:9px}.person-name .initial{display:none}.work-table .btn.small{padding:7px;font-size:10px;min-height:30px}.admin-layout{display:block}.settings-side{margin-top:25px;padding:23px}.source-row{grid-template-columns:28px 1fr 20px;gap:14px;padding:21px 0}.source-row b{font-size:17px}.source-row .source-meta{display:none}.source-number{font-size:23px!important}.source-search{width:100%;font-size:16px}.book{padding:25px 21px;font-size:16px}.inbox-row{grid-template-columns:1fr 22px;gap:10px;padding:21px 0}.inbox-row .pill{width:max-content;grid-column:1}.inbox-row .date{grid-column:1}.inbox-row .icon{grid-column:2;grid-row:2}.inbox-row h3{font-size:18px}.task-row{grid-template-columns:1fr 120px;gap:12px}.task-row .task-date{grid-column:1}.deliverable-title{flex-wrap:wrap;gap:14px}.deliverable-title h3{font-size:21px;flex-basis:65%}.coverage-list{grid-template-columns:1fr}.history-item{grid-template-columns:80px 1fr;gap:18px}.history-item h3{font-size:17px}.supplier-page{padding:40px 25px 100px}.supplier-page h1{font-size:48px}.supplier-columns{display:block}.supplier-brief{font-size:19px}.supplier-side{margin-top:35px}.supplier-submissions{margin-top:35px}.preview-bar{position:sticky;top:0;font-size:10px;padding:7px 12px}.prototype-tag{max-width:250px;font-size:9px;left:7px;bottom:7px}.present-controls{bottom:19px}.code-result{font-size:17px;padding:18px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.reveal{opacity:1;transform:none}::view-transition-group(*){animation:none!important}}
@media print{body{overflow:visible;background:#fff}.topbar,.spine,.chat-fab,.chat-panel,.present-controls,.prototype-tag,.preview-bar,.scene-foot,.overlay-backdrop,.image-action{display:none!important}.shell{display:block;height:auto}.viewport{overflow:visible;height:auto}.scene,.viewport.present .scene{display:block!important;page-break-before:always;break-inside:avoid;min-height:0;max-height:none;padding:1cm;overflow:visible;print-color-adjust:exact;-webkit-print-color-adjust:exact}.scene h2{font-size:30pt}.scene .lead{font-size:13pt}.scene p{font-size:11pt}.reveal{opacity:1!important;transform:none!important}.scene-image{min-height:300px}.scene[data-hide-image=true] .scene-image,.scene[data-hide-image=true] .bleed-bg{display:none}.kind-divider{min-height:16cm}.kind-hero{min-height:20cm}.book{border:0;box-shadow:none;padding:0}}
.image-ai-panel{padding:22px 0;border-top:1px solid var(--line);margin-top:24px}.image-ai-panel #imageAIStatus{margin-top:12px}.image-ai-panel textarea{min-height:94px}
.brand-logo{display:block;width:76px;height:76px;object-fit:contain;flex-shrink:0}.brand-home{display:flex;align-items:center;justify-content:center;width:76px;height:64px;padding:0;flex-shrink:0}.brand-home .brand-logo{width:64px;height:64px}.login-wordmark .login-logo{width:160px;height:160px}.chat-header .brand-logo{width:56px;height:56px}.boot .brand-logo{width:128px;height:128px}@media(max-width:760px){.login-wordmark .login-logo{width:104px;height:104px}.brand-home{width:50px;height:50px}.brand-home .brand-logo{width:50px;height:50px}}

/* ═══ #33 · Actions must look like actions ════════════════════════════════
   Rule applied throughout: filled = primary, bounded = secondary,
   underline = genuine links only. Written readably on purpose; the rest of
   this file is minified, and these rules are load-bearing for usability. */

/* 1 · Scene actions. "The thinking", "Ask" and "Edit" were hairline-underlined
       text — visually identical to the serial metadata sitting beside them
       ("01.02 · WORKING RECOMMENDATION"). They are now real bounded buttons. */
.text-btn{
  padding: 9px 15px;
  border: 1px solid var(--line);
  border-radius: 9px;
  min-height: 40px;
  font-size: 12px;
  transition: background .2s, border-color .2s, color .2s;
}
.text-btn:hover { background: var(--soft); border-color: var(--sage); }

/* The depth action is the primary action of every scene — it is how the
   proposal's strategic depth is actually reached — so it is filled. */
.foot-actions .text-btn[data-action="depth"]{
  background: var(--forest);
  color: var(--paper);
  border-color: var(--forest);
}
.foot-actions .text-btn[data-action="depth"]:hover{
  background: #224b3d; border-color: #224b3d;
}

/* Dark scenes: same hierarchy, inverted. Lime is the approved accent. */
.scene.dark .text-btn{ border-color: #8aa89670; color: var(--paper); }
.scene.dark .text-btn:hover{ background: #ffffff16; border-color: var(--sage); }
.scene.dark .foot-actions .text-btn[data-action="depth"]{
  background: var(--lime); color: var(--forest); border-color: var(--lime);
}
.scene.dark .foot-actions .text-btn[data-action="depth"]:hover{
  background: #c6e488; border-color: #c6e488;
}

/* 2 · The image action was opacity:0 until hover — an action that cannot be
       seen is an action that does not exist. Visible at rest. */
.scene-image .image-action{
  opacity: 1;
  border: 1px solid #0a231b1f;
  box-shadow: 0 2px 10px #0a231b24;
  font-weight: 600;
}
.scene-image:hover .image-action,
.scene-image:focus-within .image-action{ background: var(--paper); border-color: var(--sage); }

/* 3 · Tabs read as plain muted text at rest, giving no hint they are
       clickable. A resting underline makes the row legible as a control. */
.role-tabs button, .enhancement-tabs button{
  transition: color .2s, border-color .2s, background .2s;
}
.role-tabs button:not(.active){ border-bottom-color: var(--line); }
.role-tabs button:hover:not(.active),
.enhancement-tabs button:hover:not(.active){ color: var(--ink); }
.enhancement-tabs button:not(.active):hover{ background: var(--soft); }

/* 4 · Canvas cells are buttons that look like table cells. Give them a
       resting affordance rather than relying on discovery by hover. */
.canvas-cell{ position: relative; }
.canvas-cell:after{
  content: '';
  position: absolute; right: 16px; bottom: 16px;
  width: 13px; height: 13px;
  border-right: 1.5px solid var(--sage);
  border-bottom: 1.5px solid var(--sage);
  opacity: .8;
  transition: opacity .2s, transform .2s;
}
.canvas-cell:hover:after, .canvas-cell:focus-visible:after{ opacity: 1; transform: translate(2px, 2px); }

/* 5 · Disabled was a flat 50% fade that still looked pressable. */
button:disabled, .btn:disabled, .text-btn:disabled{
  opacity: .45;
  cursor: not-allowed;
  filter: grayscale(.4);
}
button:disabled:hover, .btn:disabled:hover{ background: transparent; border-color: var(--line); }

/* 6 · Loading. Nothing in the app had one: a pressed button simply went
       dead until the request returned. */
.btn[aria-busy="true"], .text-btn[aria-busy="true"], .icon-btn[aria-busy="true"]{
  position: relative;
  color: transparent !important;
  pointer-events: none;
}
.btn[aria-busy="true"] > *, .text-btn[aria-busy="true"] > *, .icon-btn[aria-busy="true"] > *{ visibility: hidden; }
.btn[aria-busy="true"]:after, .text-btn[aria-busy="true"]:after, .icon-btn[aria-busy="true"]:after{
  content: '';
  position: absolute;
  top: 50%; left: 50%;
  width: 15px; height: 15px;
  margin: -7.5px 0 0 -7.5px;
  border: 2px solid currentColor;
  border-top-color: transparent;
  border-radius: 50%;
  color: var(--ink);
  animation: btn-spin .7s linear infinite;
}
.btn.primary[aria-busy="true"]:after,
.foot-actions .text-btn[data-action="depth"][aria-busy="true"]:after{ color: var(--paper); }
.scene.dark .text-btn[aria-busy="true"]:after{ color: var(--paper); }
.scene.dark .foot-actions .text-btn[data-action="depth"][aria-busy="true"]:after{ color: var(--forest); }
@keyframes btn-spin{ to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce){
  .btn[aria-busy="true"]:after, .text-btn[aria-busy="true"]:after, .icon-btn[aria-busy="true"]:after{
    animation-duration: 2.4s;
  }
}

/* 7 · The section index hung off an unlabelled sliver at the right edge.
       Give it a legible vertical label so it can be found deliberately. */
.spine-trigger{ align-content: center; }
.spine-trigger .spine-label{
  writing-mode: vertical-rl;
  text-orientation: mixed;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: #4d6455;
  margin: 0 auto 9px;
}
.spine-trigger:hover{ background: var(--paper); border-color: var(--sage); }
.spine-trigger:hover i{ width: 15px; }
@media(max-width:760px){ .spine-trigger .spine-label{ display: none; } }

/* 8 · Proper 40px touch targets are taller than the 33px text links they
       replaced, which pushed the action row further below the fold. Reclaim
       the difference from an over-generous foot margin rather than shrinking
       the target. Net effect on scene height: slightly shorter than before. */
.scene-foot{ margin-top: 34px; }
@media(max-width:760px){ .scene-foot{ margin-top: 26px; } }

/* ═══ #34 · Visual rhythm and full-size chapter breaks ════════════════════
   Before this, 5 of 33 scenes were dark and scenes #7-#20 ran FOURTEEN
   consecutive ivory backgrounds. Tone now follows what a scene does
   (see sceneTone() in app.js); longest identical run is three. */

/* ── The ground tone: working surfaces (canvas, diagnostic, evidence,
      comparison, budget, question). Instruments, not prose — they sit on a
      tint so they read as something you work with. No new colour: --soft is
      the divider's old background, freed now that dividers are dark. */
.scene.ground{ background: var(--soft); border-bottom-color: #c7d3bd; }
.scene.ground .btn,
.scene.ground .text-btn{ border-color: #bcc9b2; }
.scene.ground .btn:hover,
.scene.ground .text-btn:hover{ background: var(--paper); border-color: var(--sage); }
.scene.ground .scene-points > div,
.scene.ground .question-item,
.scene.ground .sequence-item,
.scene.ground .budget-row,
.scene.ground .canvas-cell{ border-color: #c7d3bd; }
.scene.ground .canvas-grid{ border-color: #c7d3bd; }
.scene.ground .canvas-cell:hover,
.scene.ground .canvas-cell:focus-visible{ background: var(--paper); }
.scene.ground .scene-foot{ border-top-color: #c7d3bd; }
.scene.ground .evidence-matrix td{ border-bottom-color: #c7d3bd; }
.scene.ground .comparison-detail{ background: #dce5d0; }
/* the diagnostic/comparison surfaces were already tinted — lift them so they
   stay distinct from their own ground rather than disappearing into it */
.scene.ground .track-bar:not(.dark){ background: #d2dec6; }
.scene.ground .track-bar:after{ border-top-color: var(--soft); border-bottom-color: var(--soft); }

/* ── Chapter breaks are now full-size and dark. They were a small centred
      cluster stranded in a tall empty field — short content reading as a
      half-height panel. This gives them intentional scale instead of filler:
      the numeral becomes the composition. */
.kind-divider{
  min-height: calc(100svh - var(--header));
  padding-bottom: clamp(45px, 6vh, 85px);
  align-items: stretch;
}
.kind-divider .scene-inner{
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr auto;
  align-items: end;
  gap: 0;
}
.kind-divider .divider-num{
  font-size: clamp(190px, 34vh, 400px);
  line-height: .78;
  color: #ffffff14;
  align-self: start;
  margin: 0;
  letter-spacing: -.08em;
}
.kind-divider h2{
  font-size: clamp(50px, 6.4vw, 104px);
  max-width: 15ch;
  margin: 0 0 22px;
}
.kind-divider .lead{ max-width: 620px; font-size: clamp(17px, 1.7vw, 22px); }
.kind-divider .divider-body{ padding-top: 28px; border-top: 1px solid #7a968550; }

@media(max-width:760px){
  .kind-divider{ min-height: calc(100svh - var(--header)); padding: 40px 27px 43px; }
  .kind-divider .divider-num{ font-size: clamp(120px, 26vh, 210px); }
  .kind-divider h2{ font-size: 46px; }
  .kind-divider .lead{ font-size: 17px; }
}

/* ── Every tone must carry a readable focus ring. The default ring is tuned
      for ivory; on forest and on the tint it needs its own value. */
.scene.dark button:focus-visible,
.scene.dark a:focus-visible{ outline-color: var(--lime); }
.scene.ground button:focus-visible,
.scene.ground a:focus-visible{ outline-color: #4d7a3f; }

/* ── The bleed image scene carried a fixed 800px min-height, so on a taller
      viewport it fell short of the fold while every other scene filled it.
      Tie it to the viewport like the rest. */
.kind-image.bleed{ min-height: calc(100svh - var(--header)); }
@media(max-width:760px){ .kind-image.bleed{ min-height: calc(100svh - var(--header)); } }

/* ── Secondary text failed WCAG AA. Measured on the running app:
      --muted #6b7b71 was 4.05:1 on paper — already below the 4.5:1 minimum
      before this ticket — and 3.74:1 on the new tint. Same hue, 11% darker,
      now 4.92:1 on paper and 4.55:1 on the tint. This fixes a pre-existing
      failure as well as the one the new tone would have introduced. */
:root{ --muted: #5f6d65; }

/* ── The large decorative ordinals failed even the 3:1 large-text threshold on
      the tint (sequence 2.76:1, budget worse). They are decoration — the order
      is already carried by position — so they are hidden from assistive tech
      and darkened to clear 3:1 with margin on every tone. */
.sequence-item .num,
.budget-row .num,
.talent-slot .number{ color: #6f8169; }
.scene.dark .sequence-item .num,
.scene.dark .budget-row .num,
.scene.dark .talent-slot .number{ color: #9fb69a; }

/* ── The diagnostic counter carries real information (how many questions) but
      sat at 1.94:1 on the tint and ~2.2:1 on paper — failing even the 3:1
      large-text threshold on both, before this ticket. Same value as the
      ordinals, for consistency. */
.question-counter{ color: #6f8169; }
.scene.dark .question-counter{ color: #9fb69a; }

/* ═══ #32 · Development requests — master-detail, no side drawer ═══════════ */
.request-layout{ display:grid; grid-template-columns: minmax(280px,.9fr) 1.6fr; gap:48px; margin-top:28px; align-items:start; }
.request-list{ border-top:1px solid var(--line); }
.request-row{ display:block; width:100%; text-align:left; padding:18px 14px; border-bottom:1px solid var(--line); border-left:3px solid transparent; }
.request-row:hover{ background:var(--soft); }
.request-row.active{ border-left-color:var(--forest); background:var(--soft); }
.request-row h3{ font-size:17px; margin:9px 0 6px; letter-spacing:-.02em; }
.request-row small{ color:var(--muted); font-size:12px; }
.request-pane{ background:var(--soft); padding:30px 34px; border-radius:3px; min-height:360px; }
.request-detail h2{ font-size:32px; margin:8px 0 18px; }
.request-detail h3{ font-size:12px; letter-spacing:.08em; text-transform:uppercase; color:var(--muted); margin:26px 0 8px; }
.request-body{ white-space:pre-wrap; font-size:16px; line-height:1.6; }
.request-message{ padding:14px 16px; background:var(--paper); border-left:3px solid var(--line); margin-bottom:10px; }
.request-message.kind-question{ border-left-color:#c9a13a; }
.request-message.kind-result{ border-left-color:var(--forest); }
.request-message small{ color:var(--muted); font-size:11px; }
.request-message p{ margin:7px 0 0; white-space:pre-wrap; font-size:15px; line-height:1.55; }
.request-actions{ margin-top:26px; padding-top:20px; border-top:1px solid #c7d3bd; }
/* #79 brief block + collapsed full text; #78 policy row */
.request-brief{background:var(--paper);padding:18px 20px;border-radius:6px;margin:10px 0 18px}.brief-summary{font-size:18px;line-height:1.5;margin:0 0 10px}.brief-points{margin:0 0 6px 18px;line-height:1.55}.brief-pc{display:grid;grid-template-columns:1fr 1fr;gap:18px}.brief-pc ul{margin:0 0 0 18px;line-height:1.5}.request-full>summary,details.request-message>summary{cursor:pointer;font-weight:600}.request-full{margin:8px 0 18px}.policy-row{padding:12px 14px;border:1px solid var(--line);border-radius:6px;margin-bottom:12px}
@media(max-width:760px){ .request-layout{ display:block; } .request-pane{ margin-top:24px; padding:22px 20px; } }

/* ═══ #95/#96 · Pending changes — word-level diff + its own list+detail page ═
   .pending-pane reuses the .request-pane look (same soft background, padding,
   radius) inside the existing .request-layout grid — full remaining width,
   never capped like the job-proposal sheet. .diff-del/.diff-add reuse the
   file's own error/good tints (see .pill.error/.pill.good above) rather than
   inventing a new palette. */
.pending-pane{ background:var(--soft); padding:30px 34px; border-radius:3px; min-height:360px; }
@media(max-width:760px){ .pending-pane{ margin-top:24px; padding:22px 20px; } }
.diff-del{ color:var(--error); text-decoration:line-through; background:#f6e3df; padding:0 1px; }
.diff-add{ color:#2f6a55; text-decoration:underline; background:#e3efe4; padding:0 1px; }
/* #98 review fix — a vh-based max-height on .pending-list (100vh minus a hand-counted budget for
   the header, .work-page's own padding, pageHead and the filter row) never accounted for
   .work-page's BOTTOM padding either, so on real viewport heights the list box could still run
   taller than the space actually left inside #main/.viewport — the one real scroll container for
   the whole app (`.viewport{min-height:0;overflow:auto}` inside `.shell{height:100svh;
   grid-template-rows:var(--header) minmax(0,1fr)}`, same mechanism .sheet-body's
   `flex:1;min-height:0;overflow:auto` already uses). That let .viewport ALSO start scrolling —
   double scroll — instead of only .pending-list scrolling, which defeats the point of a pinned
   filter row.
   Fix: no magic number. .pending-page pins itself to exactly #main's own box (height:100%, a
   definite value here since .shell gives .viewport a definite height) and never scrolls itself
   (overflow:hidden); .request-layout is given the remaining flex space after the page head and
   filter row (flex:1;min-height:0) and stretches its two columns to that same height
   (align-items:stretch, scoped to THIS page only — Development requests' .request-layout keeps
   its own align-items:start); .pending-list and .pending-pane each get min-height:0 so their OWN
   overflow-y:auto is what scrolls, bounded by the layout engine's real remaining space rather than
   a guessed pixel count. Scoped to .pending-page/.pending-list/.pending-pane (page-specific
   classes) so Development requests' .work-page/.request-layout/.request-list are untouched. */
.pending-page{ height:100%; display:flex; flex-direction:column; overflow:hidden; }
.pending-page .request-layout{ flex:1; min-height:0; grid-template-rows:minmax(0,1fr); align-items:stretch; }
.pending-list{ min-height:0; overflow-y:auto; }
.pending-pane{ min-height:0; overflow-y:auto; }
@media(max-width:760px){ .pending-page{ height:auto; display:block; overflow:visible; } .pending-page .request-layout{ display:block; } .pending-list,.pending-pane{ overflow-y:visible; } }
/* #98 — reject/comment/reviewer-edit affordances added to the pane, below the read-only diff; each
   reuses .field/.eyebrow/.row/.btn rather than inventing new form styling. */
.reviewer-edit-fields,.comment-box,.reject-box{ margin-top:20px; padding-top:16px; border-top:1px solid var(--line); }

/* ═══ #35 · Journalist / moderator candidate profiles ══════════════════════
   Reuses the comparison tabs-and-detail layout. Four SEPARATE status fields
   sit in their own row so "not approached" never reads as the whole answer. */
.candidate-layout{ grid-template-columns: .7fr 1.3fr; }
.candidate-tabs button{ padding: 16px 0; font-size: 19px; }
.candidate-tabs button small{ margin-bottom: 6px; }
.candidate-detail{ min-height: 460px; }
.candidate-head{ margin-bottom: 14px; }
.candidate-detail h3{ margin-bottom: 4px; }
.candidate-role{ color: var(--muted); font-size: 14px; margin: 0 0 22px; }
.candidate-detail dl{ gap: 18px; }
.candidate-detail dd{ font-size: 14px; line-height: 1.6; }
.candidate-status{ display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 14px; margin-top: 26px; padding-top: 20px; border-top: 1px solid #b8c7a8; }
.candidate-status small{ display: block; font-size: 10px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); margin-bottom: 6px; }
.candidate-status b{ font-size: 13px; font-weight: 600; line-height: 1.4; }
.candidate-sources{ margin: 22px 0 0; }
.candidate-sources a{ text-decoration: underline; }
@media(max-width:760px){ .candidate-layout{ display: block; } .candidate-tabs{ display: flex; overflow: auto; gap: 18px; margin-bottom: 22px; } .candidate-tabs button{ min-width: 180px; } .candidate-status{ grid-template-columns: 1fr 1fr; } }

/* ═══ #49 · See as client / supplier — administrators only ═════════════════
   Reuses the existing preview mechanism; the control sits bottom-left, away
   from the chat button (bottom-right) and the read-only bar (bottom-centre). */
.view-as{ position: fixed; left: 18px; bottom: 18px; z-index: 31; display: flex; align-items: center; gap: 8px; padding: 6px 8px 6px 14px; background: var(--paper); border: 1px solid var(--line); border-radius: 30px; box-shadow: 0 8px 30px #0c2e2612; }
.view-as .eyebrow{ margin-right: 4px; }
.view-as-list .inbox-row{ grid-template-columns: 130px minmax(0,1fr) 120px 22px; }
@media(max-width:760px){ .view-as{ left: 12px; bottom: 82px; padding: 5px 6px 5px 11px; gap: 6px; } .view-as .eyebrow{ display: none; } }

/* ═══ #53 · Deliverables & tasks — the work views ═════════════════════════
   The `.arena` wrapper is a boundary, not a theme: it redefines the prototype
   tokens locally so the prototype's CSS ports verbatim under the prefix. Only
   prototype markup (the deliverables table, later the timeline grid, the brain
   canvas and the export grid) sits inside it; the detail pane, taskRows, the
   deliverable form, .pill and .btn.small stay outside on portal tokens. */
.pill.good{background:#e3efe4;border-color:#bfd8c2;color:#2f6a55}.pill.error{background:#f6e3df;border-color:#e9c4bc;color:var(--error)}
/* #83 — the Overview order rows on the admin page; the view toggle reuses .mode-switch untouched */
.overview-row{display:flex;gap:10px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line);font-size:14px}.overview-row b{flex:1;font-weight:500}.overview-row .icon-btn[disabled]{opacity:.3}
@media(max-width:760px){.topbar [data-work-chip]{display:none}}

/* ── arena: ported prototype rules ── */
.arena{--ink:#102f27;--muted:#6e7d76;--line:#d7ded8;--lime:#d4f083;--dark:#0b2b23;--bg:#f4f5ef;--paper:#fbfcf8;--r:18px;color-scheme:light;color:var(--ink)}
/* L8 — verbatim, prefix only */
.arena .spacer{flex:1}.arena .chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;border-radius:999px;padding:7px 10px;font-size:12px;color:#3e574e}.arena .dot{width:7px;height:7px;border-radius:50%;background:#62a36d}.arena .btn{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:11px;padding:9px 12px;font-weight:730;cursor:pointer}.arena .btn:hover{border-color:#9fb0a5}.arena .btn.primary{background:var(--dark);color:#fff;border-color:var(--dark)}.arena .btn.ghost{background:transparent}.arena .btn.tiny{font-size:11px;padding:6px 8px;border-radius:8px}.arena .page{max-width:1440px;margin:0 auto;padding:34px 36px 96px}.arena .pagehead{display:flex;align-items:end;gap:20px;margin-bottom:26px}.arena .pagehead h2{font-size:clamp(38px,5vw,66px);line-height:.94;letter-spacing:-.055em;margin:0}.arena .eyebrow{text-transform:uppercase;letter-spacing:.15em;font-size:10px;font-weight:850;color:#708178}.arena .kpis{display:flex;gap:10px;flex-wrap:wrap}.arena .kpi{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 14px;min-width:118px}.arena .kpi b{font-size:20px;display:block}.arena .kpi span{font-size:11px;color:var(--muted)}
/* L9 — status words map from the portal's one vocabulary (see deliverableRows in app.js) */
.arena .status{display:inline-flex;width:max-content;padding:6px 9px;border-radius:999px;font-size:10px;font-weight:800;background:#edf1ee;color:#52635b}.arena .status.progress{background:#e3f0e2;color:#386a3d}.arena .status.planned{background:#fff0ce;color:#765817}.arena .status.ready{background:#dcefe5;color:#286347}.arena .status.exploring{background:#eeeaf6;color:#635489}
.arena .status.review{background:#f7edd8;color:#78602a}.arena .status.declined{background:#eee;color:#666}.arena .status.contested{background:#fae9e4;color:#a64132}
/* L28 — the deliverables table */
.arena .filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}.arena .del-table{background:#fff;border:1px solid var(--line);border-radius:18px;overflow:hidden}.arena .del-row{display:grid;grid-template-columns:minmax(220px,1.4fr) 190px 120px 120px 110px 80px;gap:10px;align-items:center;padding:13px 15px;border-top:1px solid #e8ece8}.arena .del-row:first-child{border-top:0}.arena .del-row:hover{background:#f8faf6}.arena .del-row b{font-size:13px}.arena .del-row small{color:var(--muted)}
/* L72 (the prototype's 1100px viewport collapse, which hid Progress and →) is deliberately NOT ported: in the split the
   table's width is the pane's, not the viewport's, and the per-row counts are never hidden — see the container rules below. */
/* ── portal additions under the same prefix: the row is a button, the table has a header row, the page has a split ── */
.arena .btn{min-height:0;font-family:inherit;transition:border-color .2s,background .2s}.arena .btn.active{background:var(--dark);color:#fff;border-color:var(--dark)}.arena .filters .eyebrow{align-self:center;margin-left:6px}
.arena .del-row{width:100%;text-align:left;font:inherit;cursor:pointer}.arena .del-row small{display:block;margin-top:3px;font-size:11px}.arena .del-row[aria-current]{background:#eef3ea;box-shadow:inset 3px 0 0 var(--dark)}
.arena .del-head{cursor:default;background:#f5f7f2;padding:10px 15px;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#708178}.arena .del-head:hover{background:#f5f7f2}
.arena .del-group{padding:9px 15px 5px;border-top:1px solid #e8ece8;background:#fbfcf8;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#708178}.arena .del-empty{padding:26px 15px;color:var(--muted);font-size:13px}
.arena .kpi.warn{border-color:#e9c4bc;background:#fae9e4}.arena .kpi.warn b{color:#a64132}
.work-split{grid-template-columns:minmax(280px,.9fr) 1.6fr;margin-top:0}
/* #53 review — the table collapses on the PANE's width (a container query), never the viewport's. L28's six spec columns
   need 920px; a compact six fits from 680px; below that four columns stay: Deliverable · Stage · Progress · →. Owner and
   Due (both shown in the pane) go first; the per-row counts and the arrow never go. The pane scrolls sideways as the last resort. */
.work-split>.arena{container-type:inline-size;min-width:0;overflow-x:auto}
@container (max-width:920px){.arena .del-row{grid-template-columns:minmax(160px,1.6fr) 120px 110px 90px 90px 30px}}
@container (max-width:680px){.arena .del-row{grid-template-columns:minmax(0,1fr) 105px 90px 30px}.arena .del-row>*:nth-child(2),.arena .del-row>*:nth-child(4){display:none}}
@media(max-width:1400px){.work-split{grid-template-columns:minmax(280px,1fr) 1.2fr}}
.deliverable-detail h2{font-size:30px;margin:8px 0 22px}.deliverable-detail h3{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:22px 0 12px}.deliverable-detail .field input:disabled,.deliverable-detail .field select:disabled{opacity:.7}
.deliverable-work{margin-top:28px;padding-top:18px;border-top:1px solid #c7d3bd}.deliverable-work .row{margin-bottom:6px}.deliverable-work .task-row{grid-template-columns:1fr 130px 90px 130px;gap:12px}
.workspace-nav .pill,.workspace-nav .btn.small{align-self:center;margin-bottom:6px}
.deliverable-group.is-target .deliverable-title{background:var(--soft)}
@media(max-width:760px){.work-split{display:block}}
/* ── #54 timeline: L29 ported verbatim under the prefix, then the spec's changes (16 → var, 920px → calc; sticky head; month tick; today; hover; group rows; span; the two portal states with no prototype colour) ── */
.arena .timeline{background:#fff;border:1px solid var(--line);border-radius:18px;overflow:auto}.arena .tl-head,.arena .tl-row{display:grid;grid-template-columns:260px repeat(var(--tl-days,16),minmax(38px,1fr));min-width:calc(260px + 38px*var(--tl-days,16))}.arena .tl-head>div,.arena .tl-row>div{border-left:1px solid #edf0ed;padding:8px 5px;text-align:center;font-size:10px;color:var(--muted)}.arena .tl-head>div:first-child,.arena .tl-row>div:first-child{border-left:0;text-align:left;padding-left:14px}.arena .tl-row{border-top:1px solid #e8ece8;min-height:52px;align-items:center}.arena .tl-title b{display:block;font-size:12px;color:var(--ink)}.arena .tl-title span{font-size:10px}.arena .bar{height:8px;border-radius:999px;background:#7ca18b}.arena .bar.proposed{background:#d2b66e}.arena .bar.complete{background:#456e5b}.arena .bar.active{background:#6c93c6}
.arena .tl-head{position:sticky;top:0;background:#fff;z-index:1}
.arena .tl-head small{display:block;font-size:9px;letter-spacing:.08em;text-transform:uppercase}
.arena .tl-head>div.today,.arena .tl-row>div.today{background:#f1f5ee}
.arena .tl-row{cursor:pointer}.arena .tl-row:hover{background:#f6f8f4}
.arena .bar.proposed{background:#d2b66e}.arena .bar.active{background:#6c93c6}.arena .bar.complete{background:#456e5b}
.arena .bar.blocked{background:#a64132}.arena .bar.declined{background:#c9d2cc}
.arena .tl-row.group{background:#fbfcf8;font-weight:600}.arena .span{height:3px;background:#7ca18b;opacity:.5;border-radius:2px}
/* portal additions under the same prefix: the grid scrolls itself so the sticky head has a scrollport; a cell is the span's
   positioning box (the span runs from the centre of the first-task column to the centre of the deliverable column, its width
   is (columns apart)×100% of one equal column); an Unassigned marker is the base sage at half opacity (barClass ''); the
   deliverable's own ◆; task rows indent under their deliverable; the title (.tl-name) is the keyboard-reachable control,
   not a link — it sits inside the title cell so the Accept button is its sibling, never a child of a role=button (#54 review).
   #54 review — the first column is sticky (the grid is wider than any viewport once October exists): the label and the
   Accept control stay put while the days scroll; the head is raised above the sticky cells so the corner stays on top.
   These are additions after the verbatim L29 lines, not changes to them. */
.arena .timeline{max-height:calc(100svh - 330px);min-height:260px}
.arena .tl-row>div{position:relative;min-width:0}.arena .tl-row.group{cursor:default}.arena .tl-row.group:hover{background:#fbfcf8}.arena .tl-name:focus-visible{outline:2px solid var(--dark);outline-offset:-2px}
.arena .tl-head>div:first-child,.arena .tl-row>div:first-child{position:sticky;left:0;z-index:2;background:#fff}.arena .tl-row.group>div:first-child{background:#fbfcf8}.arena .tl-row:hover>div:first-child{background:#f6f8f4}.arena .tl-row.group:hover>div:first-child{background:#fbfcf8}
.arena .tl-head{z-index:3}.arena .tl-head>div:first-child{z-index:3}
.arena .tl-row.task .tl-title{padding-left:28px}.arena .tl-title .btn.tiny{margin-top:6px}.arena .tl-row.yours .tl-title b::before{content:'●';color:#d2b66e;margin-right:6px;font-size:9px;vertical-align:middle}
.arena .tl-title .tl-due,.arena .tl-title .tl-reassign{display:block;width:auto;max-width:170px;margin-top:6px;font-size:10px;padding:4px 6px;border:1px solid var(--line);border-radius:5px;background:#fff;color:var(--ink)}
.arena .tl-row .bar:not(.proposed):not(.active):not(.complete):not(.blocked):not(.declined){opacity:.5}
.arena .span{position:absolute;left:50%;top:50%;transform:translateY(-50%);z-index:0}.arena .due{position:relative;z-index:1;color:#456e5b;font-size:12px;line-height:1}
.arena .tl-lane .lane-head{border-top:2px solid #d7ded8}.arena .tl-lane .tl-title span{color:var(--muted)}.arena .kpi.yours{border-color:#c9dd8f;background:#f3f8df}
/* ── #55 vault: L30 ported verbatim under the prefix (.brain, .gnode, .learning, .learning-item, .friction); the grid is the boundary container
   (like .work-split) so the portal aside can sit beside the .arena canvas, hence unprefixed. 1-col ≤1100 is the prototype's L72 rule. ── */
.vault-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(320px,.8fr);gap:18px}
@media(max-width:1100px){.vault-grid{grid-template-columns:1fr}}
.arena .brain{height:520px;background:#0d1e19;border-radius:22px;position:relative;overflow:hidden}.arena .brain svg{position:absolute;inset:0;width:100%;height:100%}.arena .brain .gnode{position:absolute;transform:translate(-50%,-50%);border:1px solid #48675b;background:#16382e;color:#e8f2ec;border-radius:999px;padding:9px 11px;font-size:10px;white-space:nowrap;box-shadow:0 6px 22px rgba(0,0,0,.16)}.arena .brain .gnode.current{background:var(--lime);color:var(--dark);border-color:var(--lime);font-weight:800}
.arena .learning{background:#fff;border:1px solid var(--line);border-radius:18px;padding:18px}.arena .learning-item{border-top:1px solid #e8ece8;padding:13px 0}.arena .learning-item:first-child{border-top:0}.arena .learning-item b{display:block;font-size:13px}.arena .learning-item p{font-size:12px;color:#52685f;line-height:1.45;margin:6px 0}
.arena .friction{background:#fff6de;border:1px solid #edd8a9;border-radius:15px;padding:14px;margin-top:12px}.arena .friction b{font-size:12px}.arena .friction p{font-size:12px;line-height:1.45;margin:6px 0 0;color:#5d5339}
/* portal additions under the same prefix: the SVG draws UNDER the pills; strokes do not scale with the anisotropic viewBox; the column
   headers (real counts) sit above a node box whose % coordinates are the §2.3 formula; the canvas grows with the tallest column so a
   whole-project graph never stacks pills; a node is a button; friction links and the learning tabs are prototype .btn.tiny controls. */
.arena .brain svg{z-index:0}.arena .brain .gnode{z-index:1}.arena .brain svg line{vector-effect:non-scaling-stroke}
.arena .brain{height:max(520px,calc(var(--g-rows,1)*34px + 70px))}
.arena .brain .gcols{position:absolute;top:12px;left:0;right:0;display:flex;z-index:2;pointer-events:none}.arena .brain .gcol{flex:1;text-align:center;font-size:9px;font-weight:850;letter-spacing:.12em;text-transform:uppercase;color:#8fa79b;padding:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.arena .brain .gbox{position:absolute;top:40px;left:0;right:0;bottom:14px}
.arena .brain .gnode{font:inherit;font-size:10px;cursor:pointer;max-width:calc(100%/var(--g-cols,7) - 10px);overflow:hidden;text-overflow:ellipsis;min-height:0}.arena .brain .gnode:hover{border-color:#8fb3a1}.arena .brain .gnode:focus-visible{outline:2px solid var(--lime);outline-offset:2px}
/* #62 — the list view of the same graph: the canvas ⇄ list switch and the name filter sit under the canvas; the list groups pills by
   column, and each relationship is a row `A → (kind) → B`. A learning's limitations / conditions are two labelled lines under its text. */
.arena .gtools{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:12px}.arena .gfilter{font:inherit;font-size:12px;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);min-width:200px;flex:1;max-width:340px}
.arena .glist{background:#fff;border:1px solid var(--line);border-radius:18px;padding:12px 18px 16px;margin-top:12px}.arena .ggroup h4{font-size:9px;font-weight:850;letter-spacing:.12em;text-transform:uppercase;color:#8fa79b;margin:12px 0 6px}.arena .ggroup:first-child h4{margin-top:4px}
.arena .gitem{font:inherit;font-size:11px;border:1px solid #d7ded8;background:#f6f8f5;color:var(--ink);border-radius:999px;padding:5px 10px;margin:2px 4px 2px 0;cursor:pointer;min-height:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.arena .gitem:hover{border-color:#8fb3a1}.arena .gitem.current{background:var(--lime);border-color:var(--lime);font-weight:800}.arena .gitem:focus-visible{outline:2px solid var(--dark);outline-offset:2px}
.arena .gedges ul{list-style:none;margin:0;padding:0}.arena .gedges li{font-size:11px;padding:5px 0;border-top:1px solid #eef1ee;display:flex;align-items:center;gap:4px;flex-wrap:wrap}.arena .gkind{color:#52685f;white-space:nowrap}
.arena .learning-item .lmeta{color:#3f564c}.arena .learning-item .llabel{font-style:normal;font-weight:800;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:#8fa79b;margin-right:4px}
.arena .friction{margin-top:0;margin-bottom:12px}.arena .friction .flink{font:inherit;font-size:11px;padding:2px 7px;border:1px solid #e0c98f;border-radius:999px;background:#fff;color:#5d5339;cursor:pointer;min-height:0;margin:2px 2px 0 0}.arena .friction .flink:hover{border-color:#c9a13a}
.arena .learning .ltabs{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:10px}.arena .learning-item small{display:block;font-size:11px;color:var(--muted);margin-top:4px}.arena .learning-item[aria-current]{background:#f3f8df;margin:0 -10px;padding-left:10px;padding-right:10px;border-radius:10px}
.arena .learning .ldecide{display:flex;gap:6px;align-items:center;margin-top:8px;flex-wrap:wrap}.arena .learning .lnote{flex:1;min-width:140px;font:inherit;font-size:11px;padding:6px 8px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}
.vault-form{margin-top:14px;padding:22px 24px;background:var(--soft);border-radius:3px}.vault-hub select{font-size:13px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--white);color:var(--ink);max-width:320px}.vault-hub{display:flex;align-items:center;gap:8px}
@media(max-width:760px){.vault-hub select{max-width:100%}}
/* #55 review — a friction link lands on the inbox row itself (no drawer); the row is marked current until the next navigation. */
.inbox-row[aria-current]{background:var(--soft)}
/* ── #56 export: L31 ported verbatim under the prefix (.export-grid, the .slide family, .export-image); the 2- and 1-column
   breakpoints are the prototype's L72 / L73 rules. Only the card grid sits inside .arena; the head, the notice and the
   omitted list are portal markup outside it. ── */
.arena .export-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.arena .slide{aspect-ratio:16/9;background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px;display:flex;flex-direction:column;justify-content:space-between;cursor:pointer;overflow:hidden;position:relative}.arena .slide.dark{background:var(--dark);color:#edf4ee}.arena .slide.question{background:#eef3e6;text-align:center}.arena .slide.split{display:grid;grid-template-columns:1.05fr .95fr;gap:14px}.arena .slide.split>div:last-child{align-self:end}.arena .slide.steps .mini-steps{display:flex;gap:4px;margin-top:9px}.arena .slide.steps .mini-steps i{height:4px;flex:1;border-radius:99px;background:#bdd0c4}.arena .slide.evidence:after{content:"";position:absolute;right:14px;bottom:14px;width:35%;height:38%;border:1px solid currentColor;border-radius:8px;opacity:.18}.arena .slide.editorial:before{content:attr(data-num);font-size:54px;font-weight:850;letter-spacing:-.08em;opacity:.10;position:absolute;right:14px;top:8px}.arena .slide small{color:var(--muted)}.arena .slide.dark small{color:#9db7aa}.arena .slide h3{font-size:20px;line-height:1.05;letter-spacing:-.04em;margin:0;max-width:90%}.arena .slide.hero h3{font-size:27px}.arena .slide.question h3{margin:auto;max-width:88%}.arena .slide p{font-size:11px;line-height:1.35;color:#4b655b;margin:8px 0 0}.arena .slide.dark p{color:#bed0c8}
.arena .export-image{margin-top:10px;border-radius:10px;overflow:hidden;max-height:112px}.arena .export-image img{display:block;width:100%;height:112px;object-fit:cover}
@media(max-width:1100px){.arena .export-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.arena .export-grid{grid-template-columns:1fr}}
/* portal additions under the same prefix: a card is a keyboard-reachable button (data-action=jump); the split card's copy column may shrink; the
   on-screen crop scales about the centre like the proposal image; the interactive footer and the `+N more` label are muted. */
.arena .slide{font-family:inherit;text-align:left}.arena .slide:focus-visible{outline:2px solid var(--dark);outline-offset:2px}.arena .slide.question{text-align:center}.arena .slide.split>div{min-width:0}.arena .export-image img{transform-origin:center}.arena .slide .export-foot{display:block;font-size:10px;margin-top:8px}.arena .slide .export-more{color:var(--muted)}
.export-notice{margin-bottom:18px}.export-omitted{margin-top:22px}.export-omitted ul{margin:8px 0 0;padding-left:18px;font-size:13px;line-height:1.7;color:var(--muted)}.export-page .work-head .pill{margin-right:4px}
/* PDF = the same cards, one landscape page per card, through the print block; the chrome is hidden by the print rules above.
   #56 review — the landscape page rule is NOT here: an at-page rule cannot be scoped by a selector, so a static one would turn
   the proposal's Print / save PDF (the client's path) landscape too. app.js exportPdf injects it as <style id="deckPage"> for
   the deck's print only and removes it on afterprint. */
@media print{.export-page .export-grid{display:block}.export-page .slide{page-break-before:always;break-inside:avoid;aspect-ratio:auto;width:100%;height:calc(100vh - 2cm);border:0;border-radius:0}}
@media print{.export-page .work-head,.export-page .export-notice,.export-page .export-omitted,.view-as{display:none!important}.export-page{padding:0;max-width:none}.export-page .arena{display:block}.export-page .slide:first-child{page-break-before:auto}.export-page .slide{print-color-adjust:exact;-webkit-print-color-adjust:exact}.export-page .export-image,.export-page .export-image img{max-height:40vh;height:40vh}}
/* #63 — a printed draft is marked internal on EVERY page: the on-screen notice above is hidden in print, so the draft grid carries a
   fixed banner (a fixed element repeats on each printed page) and every card carries its own tag; both exist only in draft mode
   (exportGridHTML) and only in print — on screen the notice already says it. Published output has neither element. */
.export-draft-mark,.export-draft-tag{display:none}
@media print{.export-page .export-draft-mark{display:block;position:fixed;top:0;left:0;right:0;z-index:99;text-align:center;font-size:11pt;font-weight:850;letter-spacing:.14em;text-transform:uppercase;color:#8a1c1c;background:#fff;border-bottom:2pt solid #8a1c1c;padding:4pt 0;print-color-adjust:exact;-webkit-print-color-adjust:exact}.export-page .slide .export-draft-tag{display:block;font-size:9pt;font-weight:850;letter-spacing:.1em;text-transform:uppercase;color:#8a1c1c;margin-top:6pt}.export-page .slide{padding-top:1.4cm}}
/* #86 — the release-candidate banner is a shell row above the top bar (never fixed over it) and prints with the page; the toggle sits in the See-as and preview bars. */
.shell.candidate{grid-template-rows:auto var(--header) minmax(0,1fr)}.candidate-banner{background:#78602a;color:#fff;font-size:11px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;text-align:center;padding:8px 16px;line-height:1.4}.candidate-toggle{font-size:11px;white-space:nowrap}.candidate-toggle.on{background:#78602a;border-color:#78602a;color:#fff}.preview-bar .candidate-toggle{min-height:26px;padding:4px 9px}@media print{.candidate-banner{display:block!important;print-color-adjust:exact;-webkit-print-color-adjust:exact}}

/* ═══ #90 · the scope schedule under a timeline section ═══════════════════════ */
.scope-wrap{overflow-x:auto;margin-top:34px;-webkit-overflow-scrolling:touch}
.scope-table{width:100%;border-collapse:collapse;font-size:13px;line-height:1.5;background:var(--paper,#fbfcf8);border:1px solid var(--line,#d7ded8);border-radius:14px;overflow:hidden}
.scope-table th,.scope-table td{text-align:left;vertical-align:top;padding:10px 12px;border-top:1px solid var(--line,#d7ded8)}
.scope-table thead th{border-top:0;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted,#6e7d76);white-space:nowrap}
.scope-table td small{color:var(--muted,#6e7d76)}
.export-line{font-size:9px;line-height:1.4;margin:4px 0 0;color:var(--muted,#6e7d76)}
@media(max-width:720px){.scope-table,.scope-table thead,.scope-table tbody,.scope-table tr,.scope-table td{display:block}.scope-table thead{position:absolute;left:-9999px}.scope-table tr{border-top:1px solid var(--line,#d7ded8);padding:8px 0}.scope-table td{border-top:0;padding:4px 12px}.scope-table td::before{content:attr(data-label);display:block;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted,#6e7d76);margin-bottom:2px}}
.comment-box{margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}.comment-input{min-height:44px;max-height:90px;margin:10px 0}.proposal-diff>.pill{margin-top:16px}
/* #108 — scene 04-01, the audience-view stage (B §3, §5): about one-third copy left, two-thirds plate right, a 32px gap.
   One dominant 16:9 plate whose box never changes size; four native selector buttons that look like buttons before hover
   (selected = lime surface, visible focus); the selected caption and the permanent caption always visible; the detail
   crop of the SAME plate only from 1200px. Mobile: copy, plate, 2×2 selectors, captions, natural scroll. */
.stage-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:32px;align-items:start}
.stage-copy h2{font-size:clamp(34px,3.1vw,50px);line-height:1.04;white-space:normal}
.lime-em{font-style:normal;color:var(--lime);background:var(--ink);padding:0 .14em;border-radius:5px;-webkit-box-decoration-break:clone;box-decoration-break:clone}
.stage-copy .lead{max-width:none;font-size:clamp(16px,1.25vw,19px)}
.stage-qualifier{margin:20px 0 22px;max-width:440px;color:var(--ink)}
.stage-copy .btn{background:var(--white)}
.stage-copy .btn:hover{background:var(--soft);border-color:var(--sage)}
.stage-plate{position:relative;aspect-ratio:16/9;width:100%;background:#dde6d2;border-radius:3px;overflow:hidden;isolation:isolate}
.stage-plate>*,.stage-crop>*{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:cover;transition:opacity .25s var(--ease)}
.stage-plate>.enter,.stage-crop>.enter{opacity:0}
.mode-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:12px}
.mode-btn{display:block;width:100%;min-height:44px;padding:9px 12px;text-align:left;border:1px solid var(--line);border-radius:9px;background:var(--white);color:var(--ink);font-size:12.5px;line-height:1.3;font-weight:600;letter-spacing:-.01em;transition:background .2s,border-color .2s;cursor:pointer}
.mode-btn:hover{background:var(--soft);border-color:var(--sage)}
.mode-btn[aria-selected="true"],.mode-btn[aria-selected="true"]:hover{background:var(--lime);border-color:var(--lime);color:var(--forest)}
.mode-btn:focus-visible{outline:2px solid var(--forest);outline-offset:2px}
.stage-captions{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;margin-top:16px;align-items:start}
.stage-caption{font-size:16px;line-height:1.55;margin:0;color:var(--ink);min-height:calc(3 * 1.55em)}
.stage-permanent{margin:10px 0 0}
.stage-crop{display:none}
@media(min-width:1200px){.stage-captions{grid-template-columns:minmax(0,1fr) 190px}.stage-crop{display:block;position:relative;aspect-ratio:16/9;border-radius:3px;overflow:hidden;background:#dde6d2}.stage-crop img{transform-origin:center}}
@media(max-width:1100px){.stage-split{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr);gap:26px}.mode-btn{font-size:12px;padding:8px 10px}}
@media(max-width:760px){.stage-split{display:block}.stage-copy h2{font-size:38px}.stage-copy .btn{width:auto}.stage-view{margin-top:26px}.mode-tabs{grid-template-columns:1fr 1fr}.stage-caption{min-height:0}.stage-captions{margin-top:14px}}
/* #108 — the running-order sheet: MM–MM / beat / what happens. */
.running-order{list-style:none;margin:22px 0 0;padding:0;border-top:1px solid var(--line)}
.running-row{display:grid;grid-template-columns:76px minmax(0,1fr);gap:18px;padding:14px 0;border-bottom:1px solid var(--line)}
.running-time{font-variant-numeric:tabular-nums;font-weight:700;font-size:14px;color:var(--forest);padding-top:2px}
.running-row b{display:block;font-size:16px;margin-bottom:4px}
.running-row p{margin:0;font-size:14px;line-height:1.55;color:var(--muted)}
.running-pending{margin:22px 0 0;padding:16px 18px;background:var(--soft);border-radius:6px;font-size:15px;line-height:1.5}
.running-foot{margin-top:18px}
/* #111 — project proposal diffs: the overview as an ordered list, stages/enhancements as a compact table (changed / added / removed rows only). */
.overview-diff{margin:8px 0 18px;padding-left:26px;font-size:14px;line-height:1.7}.overview-diff li{padding:2px 0}.overview-diff .pill{margin-left:6px}
.rows-diff{margin:8px 0 18px;font-size:13px}.rows-diff th,.rows-diff td{padding:10px 10px;vertical-align:top}.rows-diff tbody th{font-family:var(--mono,monospace);font-size:12px;font-weight:600;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}.rows-diff tr.removed td,.rows-diff tr.removed th{opacity:.75}.rows-diff td{white-space:pre-line}
@media(max-width:720px){.rows-diff thead{position:absolute;left:-9999px}.rows-diff,.rows-diff tbody,.rows-diff tr,.rows-diff td,.rows-diff tbody th{display:block}.rows-diff tr{border-top:1px solid var(--line);padding:8px 0}.rows-diff td{border-top:0;padding:4px 10px}.rows-diff td:empty{display:none}.rows-diff td::before{content:attr(data-label);display:block;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:2px}}
/* #114 — scene extras: strip chips under the lead, the small note, the step rail with CSS arrows (stacks ≤760px), the closing
   line, the one View… button and the Back-to-origin button. Dark scenes get the paper palette; nothing here touches a scene without extras. */
.scene-strip{display:flex;flex-wrap:wrap;gap:10px;margin:22px 0 0;max-width:950px}
.strip-chip{display:inline-flex;align-items:baseline;gap:7px;border:1px solid var(--line);border-radius:99px;padding:7px 13px;font-size:13px;line-height:1.3;background:var(--white)}
.strip-chip small{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.strip-chip b{font-weight:600}
.strip-chip i{font-style:normal;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border-left:1px solid var(--line);padding-left:7px}
.scene.dark .strip-chip{background:#ffffff10;border-color:#8aa89670;color:var(--paper)}.scene.dark .strip-chip small,.scene.dark .strip-chip i{color:#bacebf;border-color:#8aa89670}
.scene-note{font-size:13px;line-height:1.6;color:var(--muted);max-width:760px;margin:16px 0 0;font-style:italic}
.scene.dark .scene-note{color:#bacebf}
.scene-sequence{margin-top:38px;max-width:1180px}
.sequence-rail{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:0 34px}
.sequence-rail li{position:relative;border-top:1px solid var(--ink);padding:18px 0 0}
.sequence-rail li+li:before{content:'';position:absolute;left:-26px;top:-5px;width:9px;height:9px;border-top:1px solid var(--ink);border-right:1px solid var(--ink);transform:rotate(45deg)}
.sequence-rail .num{display:block;font-size:10px;letter-spacing:.14em;color:var(--muted);margin-bottom:8px}
.sequence-rail b{display:block;font-size:15px;line-height:1.3;letter-spacing:-.01em}
.sequence-rail p{margin:8px 0 0;font-size:13px;line-height:1.6;color:var(--muted)}
.sequence-caption{margin:20px 0 0;font-size:13px;line-height:1.6;color:var(--muted);font-style:italic;max-width:760px}
.scene.dark .sequence-rail li,.scene.dark .sequence-rail li+li:before{border-color:#8aa896}.scene.dark .sequence-rail p,.scene.dark .sequence-rail .num,.scene.dark .sequence-caption{color:#bacebf}
.scene-closing{margin:36px 0 0;max-width:850px;font-family:var(--serif);font-style:italic;font-size:clamp(19px,1.9vw,27px);line-height:1.4;letter-spacing:-.012em}
.scene-detail{margin-top:26px}
.scene-back{margin:0 0 22px;display:inline-flex}
.tools-list{margin-top:8px}
@media(max-width:760px){.sequence-rail{grid-template-columns:1fr;gap:0}.sequence-rail li{border-top:0;border-left:1px solid var(--ink);padding:0 0 18px 18px}.sequence-rail li+li:before{left:-5px;top:-4px;transform:rotate(135deg)}.scene-strip{gap:8px}.strip-chip{padding:6px 11px;font-size:12px}.scene-closing{font-size:19px}}
/* #fixA — on a phone the topbar's Overview/Full proposal and Explore/Present switches are hidden, so the project menu carries them (same 'view' / 'mode' actions). */
.menu-switches{display:none}
@media(max-width:760px){.topbar .menu-pop .menu-switches{display:grid;gap:8px;padding:4px 2px 10px;margin-bottom:6px;border-bottom:1px solid var(--line)}.topbar .menu-pop .mode-switch{display:flex}.menu-pop .mode-switch button{flex:1;width:auto;justify-content:center;padding:9px 10px;border-radius:24px;font-size:12px}.menu-pop .mode-switch button.active,.menu-pop .mode-switch button.active:hover{background:var(--forest);color:var(--paper)}}
/* #125 — People & codes: a person's code revealed inline on their row (masked until Show code). */
.code-reveal{margin-top:8px}.code-reveal:empty{display:none}.code-reveal .error:empty{display:none}.code-shown{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:4px}.code-inline{font-family:monospace;font-size:15px;letter-spacing:.02em;padding:4px 8px;border:1px solid var(--line);background:var(--soft);user-select:all;overflow-wrap:anywhere}
