/* DemandForge client portal.
   Tokens: BoneWhite shell (webui/_shared/df-bonewhite.css). Brand rules from the workshop
   template handoff: hairlines, mono labels, ember used sparingly, frames with the hard
   "printed offset" shadow (never a blur), pills fully round, motion bounded and returning to rest. */
@font-face{font-family:'Outfit';src:url('/fonts/Outfit.ttf') format('truetype');font-weight:100 900;font-display:swap}
@font-face{font-family:'Spline Sans Mono';src:url('/fonts/SplineSansMono.ttf') format('truetype');font-weight:300 700;font-display:swap}
:root{
  --ink:#141310;--ink-2:#343432;--paper:#FAFAF8;--card:#FFFFFE;--panel:#F1F3F3;--well:#ECEFEF;
  --line:#E3E7E7;--line-2:#C8CECE;--dim:#585E60;--ember:#C2410C;--ember-ink:#9A3412;--green:#2F6F4F;
  --sans:'Outfit',system-ui,sans-serif;--mono:'Spline Sans Mono',ui-monospace,monospace;
  --offset:1.5px 2px 0 var(--ink);--offset-lg:3px 4px 0 var(--ink);
  --ease:cubic-bezier(.22,1,.36,1);--bar:64px;--gutter:clamp(16px,4vw,56px)
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
body{min-height:100vh}
a{color:inherit}
button{font:inherit;color:inherit}
::selection{background:#F6D9C9}
:focus-visible{outline:2px solid var(--ember);outline-offset:3px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-9999px}.skip:focus{left:16px;top:12px;background:var(--card);padding:8px 12px;z-index:50}

/* ── Header ─────────────────────────────────────────────────────── */
.bar{position:sticky;top:0;z-index:20;height:var(--bar);display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:24px;padding:0 var(--gutter);background:rgba(250,250,248,.94);backdrop-filter:saturate(1.2) blur(8px);border-bottom:1px solid var(--line)}
.lockup{display:inline-flex;align-items:center;gap:10px;text-decoration:none}
/* Template lockup: the canvas is 3x the visual cube, centred on it, so gestures never clip. */
.mark{position:relative;width:30px;height:30px;flex:none}.mark canvas{position:absolute;left:-30px;top:-30px;width:90px;height:90px;pointer-events:none}
.word{font-weight:600;font-size:18px;letter-spacing:.03em}.word b{font-weight:600;color:var(--ember)}
.crumbs{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.crumbs span+span::before{content:'/';margin:0 10px;color:var(--line-2)}
.bar-right{display:flex;align-items:center;gap:18px}
.who{font-family:var(--mono);font-size:11px;letter-spacing:.04em;color:var(--dim)}
.text-btn{border:0;background:none;padding:6px 2px;font-size:14px;cursor:pointer;border-bottom:1px solid var(--line-2)}
.text-btn:hover{border-color:var(--ink)}

/* ── Shared type and controls ───────────────────────────────────── */
main{outline:none}
.eyebrow{font-family:var(--mono);font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ember);margin:0 0 14px}
.label{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}
.lede{font-size:clamp(17px,1.5vw,20px);line-height:1.5;color:var(--ink-2);margin:0 0 24px;max-width:58ch}
.muted{color:var(--dim)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;height:48px;padding:0 22px;border-radius:6px;border:1.5px solid var(--ink);background:var(--ink);color:var(--paper);font:500 16px var(--sans);text-decoration:none;cursor:pointer;transition:transform .25s var(--ease),box-shadow .25s var(--ease),background .2s}
.btn .arr{transition:transform .25s var(--ease)}
.btn:hover{transform:translate(-1px,-1px);box-shadow:var(--offset) }
.btn:hover .arr{transform:translateX(3px)}
.btn:active{transform:none;box-shadow:none}
.btn.primary:hover{background:#000;box-shadow:2px 3px 0 var(--ember)}
.btn.ghost{background:var(--card);color:var(--ink);border-color:var(--line-2)}
.btn.ghost:hover{border-color:var(--ink)}
.btn:disabled{opacity:.35;cursor:default;transform:none;box-shadow:none}
.pill{display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--line-2);border-radius:999px;padding:5px 12px;white-space:nowrap;color:var(--dim);background:var(--card)}
.pill::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor}
.pill.approved{color:var(--green)}.pill.internal-review{color:var(--ember)}
.notice{display:flex;gap:12px;align-items:flex-start;border:1px solid var(--line);border-left:3px solid var(--ember);background:var(--card);padding:14px 16px;border-radius:0 6px 6px 0;max-width:62ch;font-size:15px;line-height:1.45}
.enter{animation:enter .45s var(--ease) both}
@keyframes enter{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ── Landing ────────────────────────────────────────────────────── */
/* Title slide: a giant blueprint tesseract, top right, bleeding off the page at 20% opacity. */
.bg-tess{position:absolute;width:72.9vw;height:72.9vw;right:-13.5vw;top:-9.4vw;opacity:.2;pointer-events:none;z-index:0}
.landing{position:relative;overflow:hidden;min-height:calc(100vh - var(--bar) - var(--dev-offset,0px));display:flex;align-items:center;padding:clamp(32px,6vw,80px) var(--gutter)}
.landing>div{position:relative;z-index:1;max-width:760px}
.landing h1{font-size:clamp(48px,6.2vw,118px);line-height:1;letter-spacing:-.035em;font-weight:600;margin:0 0 24px;text-wrap:balance}
.cta-row{display:flex;align-items:center;gap:20px;flex-wrap:wrap;margin:8px 0 0}

/* ── Auth ───────────────────────────────────────────────────────── */
.auth{position:relative;overflow:hidden;min-height:calc(100vh - var(--bar) - var(--dev-offset,0px));display:grid;place-items:center;padding:48px var(--gutter)}
.auth-card{position:relative;z-index:1}
.auth-card{width:min(460px,100%);background:var(--card);border:1px solid var(--line);border-radius:10px;padding:clamp(28px,4vw,44px)}
.auth-card h1{font-size:clamp(28px,3vw,36px);letter-spacing:-.025em;font-weight:600;margin:0 0 10px;line-height:1.08}
.auth-card .lede{font-size:16px;margin-bottom:22px}
form{display:grid;gap:18px;margin:24px 0 18px}
label{display:grid;gap:8px;font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}
input{height:48px;font:16px var(--sans);letter-spacing:0;text-transform:none;color:var(--ink);padding:0 14px;border:1px solid var(--line-2);border-radius:6px;background:var(--paper);transition:border-color .2s,box-shadow .2s}
input:hover{border-color:#9ea6a6}
input:focus-visible{outline:none;border-color:var(--ember);box-shadow:0 0 0 3px rgba(194,65,12,.14)}
form .btn{width:100%}
.form-error{margin:0;color:var(--ember-ink);font-size:14px;line-height:1.4}
.auth-links{display:flex;justify-content:space-between;gap:16px;font-size:14px;color:var(--dim);border-top:1px solid var(--line);padding-top:18px}
.auth-links a{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--line-2)}
.auth-links a:hover{border-color:var(--ink)}
.auth-card .notice{margin-bottom:20px}

/* ── Library ────────────────────────────────────────────────────── */
.library{padding:0 0 96px}
.library>#lib-body{max-width:1440px;margin:0 auto;padding:0 var(--gutter)}
/* Template T3: the section-divider panel, with the demand field full-bleed at 40% opacity. */
.lib-head{position:relative;overflow:hidden;background:#EFEADF;border-bottom:1px solid var(--line);min-height:clamp(180px,24vh,280px);display:flex;align-items:flex-end;padding:0 var(--gutter) clamp(24px,3vw,40px)}
.lib-head .bg-field{position:absolute;left:0;top:50%;width:100%;height:56.25vw;transform:translateY(-50%);opacity:.4;pointer-events:none}
.lib-head h1{position:relative;font-size:clamp(36px,4.4vw,60px);letter-spacing:-.035em;font-weight:600;margin:0 0 12px;line-height:1.02}
.feature{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:clamp(28px,4.5vw,72px);align-items:start;margin:0 auto;max-width:1440px;padding-top:clamp(32px,4vw,56px)}
.cover-link{display:block;position:relative;text-decoration:none;border-radius:6px}
.cover{position:relative;aspect-ratio:16/9;overflow:hidden;border:1.5px solid var(--ink);border-radius:6px;box-shadow:var(--offset-lg);background:var(--paper);transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
.cover-link:hover .cover{transform:translate(-2px,-2px);box-shadow:5px 6px 0 var(--ink)}
.cover iframe{position:absolute;top:0;left:0;width:1920px;height:1080px;border:0;transform-origin:0 0;pointer-events:none;opacity:0;transition:opacity .4s var(--ease)}
.cover iframe.ready{opacity:1}
.cover .loading{position:absolute;inset:0;display:grid;place-items:center}
.cover-cap{display:flex;justify-content:space-between;margin-top:16px}
.feature-meta h2{font-size:clamp(30px,3vw,44px);letter-spacing:-.03em;line-height:1.04;font-weight:600;margin:14px 0 10px}
.status-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.facts-grid{display:grid;grid-template-columns:repeat(3,auto);justify-content:start;gap:8px 36px;margin:4px 0 30px}
.facts-grid dd{margin:0;font-size:16px;font-weight:500}
.chapters{border-top:1px solid var(--line);margin:0 0 30px}
.chapters .label{display:block;padding:14px 0 6px}
.chapter-row{text-decoration:none;display:grid;grid-template-columns:14px 1fr auto;align-items:center;gap:14px;width:100%;padding:11px 0;border:0;border-bottom:1px solid var(--line);background:none;text-align:left;cursor:pointer;font-size:16px}
.chapter-row .sw{width:10px;height:10px;border-radius:2px}
.chapter-row .n{font-family:var(--mono);font-size:11px;color:var(--dim);letter-spacing:.06em}
.chapter-row:hover span:nth-child(2){text-decoration:underline;text-underline-offset:4px}
.cta-stack{display:flex;gap:12px;flex-wrap:wrap}
.others{margin-top:64px}
.other{display:grid;grid-template-columns:1fr auto;gap:16px;align-items:center;padding:18px 0;border-top:1px solid var(--line)}
.other h3{margin:4px 0 0;font-size:20px;font-weight:600;letter-spacing:-.01em}
.empty{display:grid;justify-items:start;gap:16px;margin-top:40px;padding:40px;border:1px dashed var(--line-2);border-radius:10px;max-width:640px}
.empty canvas{width:130px;height:130px}

/* ── Reader ─────────────────────────────────────────────────────── */
.reader{height:calc(100dvh - var(--bar) - var(--dev-offset,0px));display:grid;grid-template-rows:auto 1fr auto;background:var(--panel)}
.rbar{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:20px;padding:12px var(--gutter);background:var(--paper);border-bottom:1px solid var(--line)}
.back{display:inline-flex;align-items:center;gap:8px;font-size:14px;text-decoration:none;color:var(--ink);padding:6px 0;border-bottom:1px solid transparent}
.back:hover{border-color:var(--ink)}
.rtitle{display:flex;align-items:center;gap:12px;min-width:0}
.rtitle .sw{flex:none;width:10px;height:10px;border-radius:2px}
.rtitle .ch{flex:none;font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}
.rtitle .t{font-weight:500;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tools{display:flex;gap:8px}
.tool{display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 14px;border:1px solid var(--line-2);border-radius:6px;background:var(--card);font-size:14px;cursor:pointer;transition:border-color .2s}
.tool:hover{border-color:var(--ink)}
.tool svg{width:16px;height:16px}
.stagewrap{position:relative;min-height:0;display:grid;place-items:center;padding:clamp(12px,2.2vw,32px)}
.stage{position:relative;overflow:hidden;border-radius:4px;background:var(--paper);box-shadow:0 0 0 1px rgba(20,19,16,.18),var(--offset-lg)}
.stage iframe{position:absolute;top:0;left:0;width:1920px;height:1080px;border:0;transform-origin:0 0;opacity:0;transition:opacity .28s var(--ease)}
.stage iframe.ready{opacity:1}
#app:fullscreen{width:100vw;height:100dvh;background:var(--ink)}
#app:fullscreen .reader{height:100%;grid-template-rows:1fr;background:var(--ink)}
#app:fullscreen .reader>.rbar,#app:fullscreen .reader>.dock{display:none}
#app:fullscreen .stagewrap{background:var(--ink);padding:0}
#app:fullscreen .stage{box-shadow:none;border-radius:0}
.dock{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:18px;padding:10px var(--gutter) 12px;background:var(--paper);border-top:1px solid var(--line)}
.nav-btn{width:48px;height:48px;display:grid;place-items:center;border:1px solid var(--line-2);border-radius:6px;background:var(--card);cursor:pointer;transition:border-color .2s,transform .2s var(--ease)}
.nav-btn:hover:not(:disabled){border-color:var(--ink)}
.nav-btn:active:not(:disabled){transform:scale(.96)}
.nav-btn:disabled{opacity:.3;cursor:default}
.nav-btn svg{width:18px;height:18px}
.progress{min-width:0}
.prog-top{display:flex;align-items:center;gap:18px;min-height:32px;margin-bottom:6px}
.prog-top .where{flex:none}
.count{font-family:var(--mono);font-size:12px;letter-spacing:.06em}
.count b{font-weight:600}
.track{position:relative;display:flex;gap:3px;height:22px;align-items:center;cursor:pointer}
.seg{position:relative;height:6px;border-radius:2px;background:var(--well);overflow:hidden;transition:height .2s var(--ease)}
.seg .fill{position:absolute;inset:0;transform-origin:left;transform:scaleX(0);transition:transform .35s var(--ease)}
.track:hover .seg{height:8px}
.seg-labels{display:flex;gap:3px;margin-top:6px}
.seg-labels span{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.seg-labels span.on{color:var(--ink)}
.examples-bar{flex:1;min-width:0;display:flex;align-items:center;gap:10px;overflow-x:auto;scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 40px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 40px),transparent);padding-right:40px}
.examples-bar::-webkit-scrollbar{display:none}
.examples-bar .label{flex:none;white-space:nowrap}
.chip{flex:none;display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 14px;border:1px solid var(--line-2);border-radius:999px;background:var(--card);font-size:14px;text-decoration:none;transition:border-color .2s,color .2s}
.chip:hover{border-color:var(--ember);color:var(--ember-ink)}
.chip .dot{width:6px;height:6px;border-radius:50%;background:var(--ember)}

/* Drawer (contents) and sheet (example) */
.scrim{position:fixed;inset:calc(var(--bar) + var(--dev-offset,0px)) 0 0 0;background:rgba(20,19,16,.32);z-index:30;animation:fade .25s var(--ease) both}
@keyframes fade{from{opacity:0}to{opacity:1}}
.drawer:focus,.sheet:focus{outline:none}
.drawer,.sheet{position:fixed;top:calc(var(--bar) + var(--dev-offset,0px));right:0;bottom:0;z-index:31;background:var(--paper);border-left:1px solid var(--line);display:flex;flex-direction:column;animation:slide .32s var(--ease) both}
@keyframes slide{from{transform:translateX(28px);opacity:0}to{transform:none;opacity:1}}
.drawer{width:min(420px,100vw)}
.sheet{width:min(1080px,94vw)}
.sheet.wide{width:min(1500px,96vw)}
.panel-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;padding:20px 24px;border-bottom:1px solid var(--line)}
.panel-head h2{margin:6px 0 0;font-size:22px;letter-spacing:-.02em;font-weight:600;line-height:1.15}
.panel-head p{margin:8px 0 0;font-size:13px;color:var(--dim);max-width:60ch}
.close{flex:none;display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 14px;border:1px solid var(--line-2);border-radius:6px;background:var(--card);cursor:pointer;font-size:14px}
.close:hover{border-color:var(--ink)}
.toc{overflow:auto;padding:8px 0 24px}
.toc h3{display:flex;align-items:center;gap:10px;margin:18px 24px 6px;font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;font-weight:500;color:var(--dim)}
.toc h3 .sw{width:10px;height:10px;border-radius:2px}
.toc a{display:grid;grid-template-columns:32px 1fr;gap:8px;padding:9px 24px;text-decoration:none;font-size:15px;line-height:1.35;border-left:3px solid transparent}
.toc a .n{font-family:var(--mono);font-size:11px;color:var(--dim);padding-top:3px}
.toc a:hover{background:var(--panel)}
.toc a[aria-current="true"]{border-left-color:var(--ember);background:var(--card);font-weight:500}
.sheet-body{flex:1;min-height:0;background:var(--card);overflow:auto}
.sheet-body iframe{width:100%;height:100%;border:0;display:block}
/* Pages render at full height in a scrolling holder; fixed-width pages are scaled to fit (app.js mountPage). */
.page-scale{position:relative;overflow:hidden;margin:0 auto}
.sheet-body .page-frame,.page-body .page-frame{position:absolute;top:0;left:0;border:0;display:block;transform-origin:0 0;opacity:0;transition:opacity .25s var(--ease)}
.page-frame.ready{opacity:1}
.pageview{height:calc(100dvh - var(--bar) - var(--dev-offset,0px));display:grid;grid-template-rows:auto 1fr;background:var(--panel)}
.page-body{min-height:0;overflow:auto;background:var(--card)}
.draft-flag{flex:none}
.rtitle .label{flex:none}
.rtitle{overflow:hidden}
/* Library: supporting material */
.supporting{max-width:1440px;margin:56px auto 0;display:grid;gap:14px}
.support-row{display:flex;gap:16px;flex-wrap:wrap}
.support-card,.profile-card{display:grid;gap:6px;text-decoration:none;background:var(--card);border:1px solid var(--line-2);border-radius:6px;padding:16px 18px;transition:transform .25s var(--ease),box-shadow .25s var(--ease),border-color .2s}
.support-card{min-width:240px}
.support-card b,.profile-card b{font-size:16px;font-weight:600;line-height:1.3}
.support-card:hover,.profile-card:hover{transform:translate(-1px,-1px);box-shadow:1.5px 2px 0 var(--ink);border-color:var(--ink)}
.profile-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.loading{display:grid;place-items:center;min-height:120px;color:var(--dim)}

/* -- Administration --------------------------------------------------- */
.admin{max-width:1440px;margin:0 auto;padding:clamp(28px,4vw,56px) var(--gutter) 96px;display:grid;gap:28px}
.admin-head h1{font-size:clamp(32px,3.6vw,48px);letter-spacing:-.03em;font-weight:600;margin:0 0 8px}
.admin-grid{display:grid;grid-template-columns:minmax(0,420px) minmax(0,1fr);gap:28px;align-items:start}
.admin-card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:24px 26px;overflow-x:auto}
.admin-card h2{font-size:20px;font-weight:600;letter-spacing:-.01em;margin:0 0 12px}
.admin-card .muted{font-size:14px;line-height:1.45;margin:0 0 14px}
.admin-card form,.admin-card fieldset,form.admin-card{margin:0}
#grant-form{display:grid;gap:16px}
fieldset{border:1px solid var(--line);border-radius:6px;padding:12px 14px;display:grid;gap:10px}
fieldset legend{padding:0 6px}
label.check{display:flex;gap:10px;align-items:flex-start;font-family:var(--sans);font-size:14px;letter-spacing:0;text-transform:none;color:var(--ink);cursor:pointer}
label.check input{height:auto;margin-top:3px;accent-color:var(--ember)}
label.check b{display:block;font-weight:500}
label.check small{display:block;font-family:var(--mono);font-size:11px;color:var(--dim);margin-top:2px}
.admin-table{width:100%;border-collapse:collapse;font-size:14px}
.admin-table th{text-align:left;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);font-weight:500;padding:8px 10px;border-bottom:1px solid var(--line-2)}
.admin-table td{padding:10px;border-bottom:1px solid var(--line);vertical-align:top;line-height:1.4}
.admin-table td.mono,.admin-table .mono{font-family:var(--mono);font-size:12px}
.admin-table tr.revoked td,.admin-table tr.expired td{color:var(--dim)}
.admin-table .actions{white-space:nowrap;text-align:right}
.admin-table .actions .text-btn+.text-btn{margin-left:14px}
details.raw{margin-top:16px}
details.raw summary{cursor:pointer;font-size:14px;color:var(--dim)}
details.raw[open] summary{margin-bottom:10px}
@media (max-width:980px){
  .rtitle .label{display:none}
  .bg-tess{width:130vw;height:130vw;right:-60vw;top:-30vw}
  .feature{grid-template-columns:1fr}
  .crumbs{display:none}
  .admin-grid{grid-template-columns:1fr}
  .bar{grid-template-columns:auto 1fr auto}
}
@media (max-width:700px){
  .who{display:none}
  .rbar{gap:12px}
  .rtitle .ch,.rtitle .sw,.back span+*{display:none}
  .tool span,.tool[data-act="present"]{display:none}
  .rtitle .label{display:none}
  .tool{padding:0 10px}
  .examples-bar .label,.prog-top .where{display:none}
  .dock{gap:10px}
  .seg-labels{display:none}
  .facts-grid{grid-template-columns:repeat(2,auto)}
  .sheet,.drawer{width:100vw}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}
