/* The V2 product, rebuilt in DOM for the site: crisp at any size, alive, themeable. Synthetic data only. */

.ap { position: absolute; inset: 0; display: grid; grid-template-columns: 232px minmax(0, 1fr); font-size: 13px; line-height: 1.45; letter-spacing: -0.006em; color: var(--fg-1); background: var(--bg); text-align: left; user-select: none; }
.ap * { cursor: default; }
.ap .mono, .ap-id { font-family: "Geist Mono", ui-monospace, monospace; font-size: 11.5px; letter-spacing: 0; }

/* sidebar */
.ap-side { background: var(--bg-1); border-right: 1px solid var(--line); padding: 12px 10px; display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.ap-brand { display: flex; align-items: center; gap: 8px; padding: 4px 8px 10px; font-weight: 600; font-size: 14px; }
.ap-brand svg { width: 22px; height: 11px; }
.ap-brand .ap-ico { margin-left: auto; color: var(--fg-3); }
.ap-back { padding: 6px 8px; color: var(--fg-3); display: flex; gap: 6px; align-items: center; font-size: 12.5px; }
.ap-client { margin: 8px 0 10px; padding: 8px; display: flex; gap: 10px; align-items: center; }
.ap-av { width: 28px; height: 28px; border-radius: 7px; display: grid; place-items: center; font-size: 10.5px; font-weight: 600; background: var(--bg-3); box-shadow: inset 0 0 0 1px var(--line-3); color: var(--fg-2); flex: none; }
.ap-av.round { border-radius: 999px; width: 22px; height: 22px; font-size: 9.5px; }
.ap-client small { display: block; color: var(--fg-3); font-size: 11.5px; }
.ap-nav { height: 30px; padding: 0 8px; display: flex; align-items: center; gap: 9px; border-radius: 6px; color: var(--fg-2); }
.ap-nav svg { width: 14px; height: 14px; color: var(--fg-3); flex: none; }
.ap-nav.sub { padding-left: 31px; }
.ap-nav.on { background: var(--bg-3); color: var(--fg-1); box-shadow: inset 0 0 0 1px var(--line-2); }
.ap-nav .ap-dot { margin-left: auto; }
.ap-group { padding: 14px 8px 6px; font-size: 11.5px; color: var(--fg-4); }
.ap-me { margin-top: auto; padding: 10px 8px 2px; border-top: 1px solid var(--line-2); display: flex; gap: 10px; align-items: center; }
.ap-me small { display: block; color: var(--fg-3); font-size: 11.5px; }

.ap-dot { width: 8px; height: 8px; border-radius: 999px; flex: none; background: var(--fg-3); transition: background var(--dur-hover); }
.ap-dot.ai { background: var(--cu); } /* copper only when the AI is the reason */
.ap-dot.ok { background: var(--ok); box-shadow: none; }
.ap-dot.amber { background: var(--amber); box-shadow: none; }

/* main */
.ap-main { display: grid; grid-template-rows: auto auto auto minmax(0, 1fr) auto; min-width: 0; }
.ap-top { height: 40px; padding: 0 16px; display: flex; align-items: center; gap: 8px; color: var(--fg-3); font-size: 12.5px; border-bottom: 1px solid var(--line-2); }
.ap-top .r { margin-left: auto; display: flex; gap: 6px; }
.ap-iconbtn { width: 26px; height: 26px; border-radius: 6px; display: grid; place-items: center; color: var(--fg-3); box-shadow: inset 0 0 0 1px var(--line); }
.ap-iconbtn svg { width: 14px; height: 14px; }
.ap-strip { height: 40px; padding: 0 16px; display: flex; align-items: center; gap: 2px; border-bottom: 1px solid var(--line); overflow: hidden; white-space: nowrap; -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 140px), transparent calc(100% - 100px)); mask-image: linear-gradient(90deg, transparent 0, #000 24px, #000 calc(100% - 140px), transparent calc(100% - 100px)); }
.ap-req { height: 24px; padding: 0 7px; display: inline-flex; align-items: center; gap: 5px; border-radius: 5px; color: var(--fg-3); font-family: "Geist Mono", monospace; font-size: 11.5px; transition: background var(--dur-hover), color var(--dur-hover), box-shadow var(--dur-hover); }
.ap-req i { width: 10px; height: 10px; border-radius: 999px; box-shadow: inset 0 0 0 1.25px var(--fg-4); display: inline-block; position: relative; transition: background var(--dur-hover), box-shadow var(--dur-hover); }
.ap-req.done i { box-shadow: inset 0 0 0 1.25px var(--ok); }
.ap-req.done i::after { content: ""; position: absolute; left: 3px; top: 2px; width: 3px; height: 5px; border: solid var(--ok); border-width: 0 1.25px 1.25px 0; transform: rotate(45deg); }
.ap-req.wait i { box-shadow: inset 0 0 0 1.25px var(--fg-2); }
.ap-req.wait i::after { content: ""; position: absolute; inset: 3px; border-radius: 999px; background: var(--fg-2); }
.ap-req.on { background: var(--bg-3); color: var(--fg-1); box-shadow: inset 0 0 0 1px var(--line-3); }
.ap-strip .end { margin-left: auto; color: var(--fg-2); font-family: "Geist", sans-serif; font-size: 12.5px; padding-left: 16px; }

.ap-title { padding: 18px 24px 14px; border-bottom: 1px solid var(--line); }
.ap-title .row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ap-title h4 { margin: 0; font-size: 17px; font-weight: 560; letter-spacing: -0.02em; }
.ap-title p { margin-top: 6px; font-size: 12.5px; color: var(--fg-2); }
.ap-title p span { color: var(--fg-3); margin-right: 10px; }
.ap-key { height: 20px; padding: 0 6px; border-radius: 5px; display: inline-flex; align-items: center; box-shadow: inset 0 0 0 1px var(--line-3); background: var(--bg-2); font-family: "Geist Mono", monospace; font-size: 11px; color: var(--fg-2); }

.ap-badge { height: 22px; padding: 0 8px; border-radius: 999px; display: inline-flex; align-items: center; gap: 6px; font-size: 12px; white-space: nowrap; box-shadow: inset 0 0 0 1px var(--line-3); color: var(--fg-2); transition: color var(--dur-hover), background var(--dur-hover), box-shadow var(--dur-hover); }
.ap-badge.amber { color: var(--amber); background: var(--amber-tint); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--amber) 30%, transparent); }
.ap-badge.cu { color: var(--cu); background: var(--cu-tint); box-shadow: inset 0 0 0 1px var(--cu-line); }
.ap-badge.ok { color: var(--ok); background: var(--ok-tint); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ok) 30%, transparent); }
.ap-badge svg { width: 12px; height: 12px; }

/* body split */
.ap-body { display: grid; grid-template-columns: minmax(0, 1fr) 380px; min-height: 0; }
.ap-work { padding: 20px 24px; overflow: hidden; border-right: 1px solid var(--line); }
.ap-h5 { font-size: 13px; font-weight: 560; margin-bottom: 12px; }
.ap-card { border-radius: 10px; box-shadow: inset 0 0 0 1px var(--line-3); background: var(--bg-1); overflow: hidden; }
.ap-card-h { padding: 12px 14px; display: flex; align-items: center; gap: 10px; }
.ap-card-h .r { margin-left: auto; display: flex; gap: 8px; align-items: center; }
.ap-proc { padding: 0 14px 12px; color: var(--fg-3); font-size: 12px; line-height: 1.55; }
.ap-ai { background: linear-gradient(var(--cu-tint-2), var(--cu-tint-2)); border-top: 1px solid var(--cu-line); }
:root[data-theme="light"] .ap-ai { background: #fdf8f3; }
.ap-row { display: grid; grid-template-columns: 132px minmax(0, 1fr) auto; gap: 14px; padding: 12px 14px; align-items: start; border-bottom: 1px solid color-mix(in srgb, var(--cu-line) 45%, transparent); }
.ap-row:last-child { border-bottom: 0; }
.ap-row > span:first-child { color: var(--fg-3); font-size: 12px; }
.ap-row b { font-weight: 500; }
.ap-chips { display: flex; flex-wrap: wrap; gap: 4px; align-items: flex-start; }
.ap-ev { height: 20px; padding: 0 6px; border-radius: 5px; display: inline-flex; align-items: center; gap: 5px; background: var(--bg-2); box-shadow: inset 0 0 0 1px var(--line-3); font-family: "Geist Mono", monospace; font-size: 11px; color: var(--fg-2); vertical-align: 1px; transition: box-shadow var(--dur-hover), background var(--dur-hover), color var(--dur-hover); white-space: nowrap; }
.ap-ev svg { width: 10px; height: 10px; color: var(--fg-3); }
/* compact citation chip: the id alone (EV-061). Version, lines or page (.v) show on hover, in one tooltip (site.js);
   .ap-ev.full keeps them inline where the detail is the point (a close-up). The file icon only shows on .full. */
.ap-ev .v, .ap-ev > svg:not(.ck) { display: none; }
.ap-ev.full .v, .ap-ev.full > svg { display: inline; }
.ap-ev.full .v { color: var(--fg-3); }
.ap-ev[data-tip], .ap-ev:has(.v) { cursor: help; }
.ap-ev.hot { background: var(--cu-tint); box-shadow: inset 0 0 0 1px var(--cu); color: var(--cu); }
.ap-text { color: var(--fg-1); line-height: 1.8; }
/* caret: only for a person typing in a field */
.ap-text .typing::after { content: ""; display: inline-block; width: 1.5px; height: 13px; background: var(--fg-1); margin-left: 2px; vertical-align: -2px; animation: blink 1.2s steps(1) infinite; }
/* a written sentence arrives instead of being typed */
.ap-arrive { display: inline; animation: ap-arrive var(--dur-enter) var(--ease-spring) both; animation-delay: calc(var(--i, 0) * var(--stagger)); }
@keyframes ap-arrive { from { opacity: 0; filter: blur(4px); } }
@keyframes blink { 50% { opacity: 0; } }
.ap-files { margin: 12px 14px 14px; padding: 10px 12px; border-radius: 8px; box-shadow: inset 0 0 0 1px var(--line-3); display: flex; align-items: center; gap: 10px; font-size: 12px; color: var(--fg-2); background: var(--bg); }
.ap-files .ok { color: var(--ok); }
.ap-files .r { margin-left: auto; color: var(--fg-2); }
.ap-btn { height: 28px; padding: 0 10px; border-radius: 7px; display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 500; box-shadow: inset 0 0 0 1px var(--line-3); background: var(--bg-2); color: var(--fg-1); transition: transform var(--dur-hover) var(--ease-spring), filter var(--dur-hover), background var(--dur-hover), color var(--dur-hover); white-space: nowrap; }
.ap-btn.inv { background: var(--inv); color: var(--inv-fg); box-shadow: none; }
.ap-btn.press { transform: scale(.97); filter: brightness(1.15); }
.ap-btn svg { width: 13px; height: 13px; }

.ap-foot { height: 52px; padding: 0 16px; display: flex; align-items: center; gap: 10px; justify-content: flex-end; border-top: 1px solid var(--line); background: var(--bg); }
.ap-keys { height: 34px; padding: 0 16px; display: flex; align-items: center; gap: 16px; border-top: 1px solid var(--line); font-size: 11.5px; color: var(--fg-3); white-space: nowrap; overflow: hidden; }
.ap-keys kbd { font-family: "Geist Mono", monospace; font-size: 10.5px; height: 17px; min-width: 17px; padding: 0 4px; margin-right: 6px; border-radius: 4px; display: inline-grid; place-items: center; box-shadow: inset 0 0 0 1px var(--line-3); color: var(--fg-2); }

/* right pane */
.ap-pane { background: var(--bg-1); display: flex; flex-direction: column; min-width: 0; overflow: hidden; }
.ap-tabs { height: 42px; padding: 0 14px; display: flex; align-items: center; gap: 16px; border-bottom: 1px solid var(--line); color: var(--fg-3); font-size: 12.5px; }
.ap-tabs .on { color: var(--fg-1); position: relative; }
.ap-tabs .on::after { content: ""; position: absolute; left: 0; right: 0; bottom: -14px; height: 1.5px; background: var(--fg-1); }
.ap-tabs .n { margin-left: 5px; height: 16px; min-width: 16px; padding: 0 4px; border-radius: 4px; display: inline-grid; place-items: center; background: var(--bg-3); font-size: 10.5px; color: var(--fg-2); }
.ap-pane-b { padding: 12px; display: flex; flex-direction: column; gap: 10px; }
.ap-sugg { border-radius: 10px; background: var(--cu-tint-2); box-shadow: inset 0 0 0 1px var(--cu-line); overflow: hidden; }
:root[data-theme="light"] .ap-sugg { background: #fdf8f3; }
.ap-sugg-h { padding: 10px 12px; display: flex; align-items: center; gap: 8px; font-size: 12.5px; font-weight: 500; border-bottom: 1px solid color-mix(in srgb, var(--cu-line) 50%, transparent); }
.ap-sugg-h .r { margin-left: auto; color: var(--fg-3); font-weight: 400; }
.ap-evc { padding: 12px; display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: 10px; border-bottom: 1px solid color-mix(in srgb, var(--cu-line) 40%, transparent); transition: background var(--dur-hover); }
.ap-evc:last-child { border-bottom: 0; }
.ap-evc.hot { background: color-mix(in srgb, var(--cu-tint) 70%, transparent); }
.ap-check { width: 14px; height: 14px; margin-top: 2px; border-radius: 4px; box-shadow: inset 0 0 0 1.25px var(--fg-4); }
.ap-evc h6 { margin: 6px 0 2px; font-size: 12.5px; font-weight: 500; }
.ap-evc small { color: var(--fg-3); font-size: 11.5px; }
/* ---------- the white page: cited source text only ----------
   .src-excerpt (and its older name .ap-paper) is the one white surface: the lines a citation quotes from a client file.
   It re-scopes the tokens to the light set, so chips, badges and marks inside it render as on paper.
   White, a hairline edge, small radius. No cream, no texture, no shadow. Drafted or report text never sits on white. */
.src-excerpt, .ap-paper {
  --bg: #fff; --bg-1: #fafafa; --bg-2: #f4f4f5; --bg-3: #ececee; --bg-4: #e4e4e7;
  --line: #00000014; --line-2: #0000000d; --line-3: #0000001f;
  --fg-1: #111113; --fg-2: #3c3f45; --fg-3: #6b6f76; --fg-4: #a1a4aa;
  --cu: #8f541a; --cu-tint: #fcf4ee; --cu-tint-2: #fdf8f3; --cu-line: #efc099;
  --ok: #1f8a54; --ok-tint: #e9f7ef; --amber: #946200; --amber-tint: #fdf3e1;
  --inv: #111113; --inv-fg: #fff;
  background: #fff; color: var(--fg-1); border-radius: 6px; box-shadow: inset 0 0 0 1px #00000024;
}
:root:not([data-theme="light"]) .src-excerpt, :root:not([data-theme="light"]) .ap-paper { box-shadow: inset 0 0 0 1px #00000024, 0 0 0 1px #ffffff1a; }
/* ---------- .doc-page: report text Enpasse drafts ----------
   Copper while it waits (any .sugg not yet accepted, or .doc-page.is-sugg): copper tint, copper edge, copper underline.
   Once a person accepts it (.accepted on it or an ancestor) it is the normal product surface with normal ink. Never white. */
.doc-page { padding: 14px 16px; line-height: 1.85; border-radius: 6px; background: var(--bg-2); color: var(--fg-1); box-shadow: inset 0 0 0 1px var(--line-3); transition: background var(--dur-enter), box-shadow var(--dur-enter); }
.doc-page:is(.is-sugg, :has(.sugg:not(.accepted))):not(.accepted, .accepted *) { background: var(--cu-tint-2); box-shadow: inset 0 0 0 1px var(--cu-line); }

/* ---------- suggested text: copper means AI and only AI ----------
   <span class="sugg">words Enpasse suggested</span> carries a thin copper underline until a person accepts it:
   add .accepted to the span or to any ancestor and the underline draws away. Lead the block with the orb:
   <span class="sugg-by"><span class="ai-mark" data-state="waiting" aria-hidden="true"></span>Suggested</span> */
.sugg { --u: color-mix(in srgb, var(--cu) 75%, transparent); padding-bottom: 1px; background: linear-gradient(var(--u), var(--u)) no-repeat 0 100% / 100% 1px; -webkit-box-decoration-break: clone; box-decoration-break: clone; transition: background-size var(--dur-draw) var(--ease-spring); }
.sugg.accepted, .accepted .sugg { background-size: 0% 1px; }
.sugg-by { display: inline-flex; align-items: center; gap: 6px; color: var(--cu); font-size: 12px; font-weight: 500; white-space: nowrap; --ai-mark-h: 12px; }

/* .ap-paper: the older name for a source excerpt; it looks exactly like .src-excerpt.
   API kept: .lit on .ap-paper wipes its marks in; mark.always is drawn from the start; .ln / .ln.s are placeholder lines. */
.ap-paper { margin-top: 10px; padding: 10px 12px; font-family: "Geist", ui-sans-serif, system-ui, sans-serif; font-size: 13px; line-height: 1.6; letter-spacing: -0.006em; position: relative; }
.ap-paper .ln, .src-excerpt .ln { height: 5px; border-radius: 3px; background: #0000000f; margin: 6px 0; }
.ap-paper .ln.s, .src-excerpt .ln.s { width: 62%; }

/* ---------- source excerpt: the one way to show the words a citation points at ----------
   <div class="src-excerpt">
     <div class="src-excerpt-h"><span class="id">EV-021</span><b>Password policy export</b><span class="r">p. 2</span></div>
     <p>Minimum length: <mark>12 characters</mark>.</p>
   </div>
   A white sheet with dark ink. The cited words (mark) carry the thin copper underline while the citation is still
   suggested; add .accepted (here or on an ancestor) and it goes. Add .on to .src-excerpt (or any ancestor) and the
   marks underline themselves over --dur-draw; mark.always is drawn from the start. */
.src-excerpt { position: relative; margin: 0; padding: 12px 14px; font-family: "Geist", ui-sans-serif, system-ui, sans-serif; font-size: 13px; line-height: 1.6; letter-spacing: -0.006em; text-align: left; font-style: normal; }
.src-excerpt p { margin: 0; } .src-excerpt p + p { margin-top: 6px; }
.src-excerpt-h { margin: -12px -14px 10px; padding: 8px 14px; display: flex; align-items: center; gap: 10px; border-bottom: 1px solid var(--line-2); font-size: 12px; color: var(--fg-3); white-space: nowrap; overflow: hidden; }
.src-excerpt-h .id { font-family: "Geist Mono", ui-monospace, monospace; font-size: 11.5px; letter-spacing: 0; color: var(--fg-2); }
.src-excerpt-h b { color: var(--fg-1); font-weight: 500; overflow: hidden; text-overflow: ellipsis; }
.src-excerpt-h .r { margin-left: auto; font-family: "Geist Mono", ui-monospace, monospace; font-size: 11.5px; letter-spacing: 0; }
.src-excerpt mark, .ap-paper mark { --u: color-mix(in srgb, var(--cu) 80%, transparent); color: inherit; padding: 0 0 1px; background: linear-gradient(var(--u), var(--u)) no-repeat 0 100% / 0% 1px; -webkit-box-decoration-break: clone; box-decoration-break: clone; transition: background-size var(--dur-draw) var(--ease-spring), color var(--dur-draw) var(--ease-spring); }
.src-excerpt mark:nth-of-type(2), .ap-paper mark:nth-of-type(2) { transition-delay: var(--stagger); }
.src-excerpt mark:nth-of-type(3), .ap-paper mark:nth-of-type(3) { transition-delay: calc(2 * var(--stagger)); }
.src-excerpt mark:nth-of-type(n+4), .ap-paper mark:nth-of-type(n+4) { transition-delay: calc(3 * var(--stagger)); }
.src-excerpt.on mark, .on .src-excerpt mark, .src-excerpt mark.always, .src-excerpt.lit mark,
.ap-paper.lit mark, .ap-paper.on mark, .ap-paper mark.always { background-size: 100% 1px; color: var(--fg-1); }
.src-excerpt.accepted mark, .accepted .src-excerpt mark, .ap-paper.accepted mark, .accepted .ap-paper mark { background-size: 0% 1px; }
.ap-evc .acts { margin-top: 10px; display: flex; gap: 6px; justify-content: flex-end; align-items: center; color: var(--fg-3); font-size: 12px; }

/* the decided state */
.ap-decided { height: 0; overflow: hidden; transition: height var(--dur-enter) var(--ease-spring); }
.ap-decided.on { height: 46px; }
.ap-decided > div { margin: 10px 14px 0; padding: 8px 10px; border-radius: 8px; background: var(--ok-tint); color: var(--fg-1); display: flex; gap: 8px; align-items: center; font-size: 12.5px; }
.ap-decided svg { width: 14px; height: 14px; color: var(--ok); }
.ap-decided time { margin-left: auto; color: var(--fg-3); font-size: 11.5px; }

/* the cursor */
.ap-cursor { position: absolute; left: 0; top: 0; width: 18px; height: 18px; z-index: 20; pointer-events: none; transition: transform var(--dur-swap) var(--ease-swap), opacity var(--dur-enter); filter: drop-shadow(0 2px 4px #0008); opacity: 0; }
.ap-cursor.on { opacity: 1; }
.ap-cursor .tag { position: absolute; left: 16px; top: 16px; height: 20px; padding: 0 7px; border-radius: 999px; background: #3b4a5c; color: #eef3f8; font-size: 11px; display: inline-flex; align-items: center; white-space: nowrap; }
/* no click ripple: a press is the button's own 160ms scale */
.ap-ripple { display: none; }

/* toast */
.ap-toast { position: absolute; right: 20px; bottom: 100px; z-index: 15; width: 300px; border-radius: 12px; padding: 12px 14px; background: color-mix(in srgb, var(--bg-2) 92%, transparent); backdrop-filter: blur(12px); box-shadow: inset 0 0 0 1px var(--line-3), var(--float); display: flex; gap: 10px; font-size: 12.5px; opacity: 0; transform: translateY(8px); filter: blur(4px); transition: opacity var(--dur-enter) var(--ease-spring), transform var(--dur-enter) var(--ease-spring), filter var(--dur-enter) var(--ease-spring); }
.ap-toast.on { opacity: 1; transform: none; filter: none; }
.ap-toast small { display: block; color: var(--fg-3); margin-top: 2px; }

/* ---------- status icon: state as a 14px glyph, its word on hover (title) ----------
   <span class="st done" title="Done"></span>  states: todo (ring), ready (ring, ink), changed (half), done (check),
   blocked (red ring with bar), due (amber ring: the warning tone only for what is due or overdue). Copper never: a
   suggestion shows the orb instead. */
.st { position: relative; display: inline-block; flex: none; width: 14px; height: 14px; border-radius: 999px; box-shadow: inset 0 0 0 1.25px var(--fg-4); vertical-align: -2px; }
.st.ready { box-shadow: inset 0 0 0 1.25px var(--fg-2); }
.st.changed { box-shadow: inset 0 0 0 1.25px var(--fg-2); background: linear-gradient(90deg, var(--fg-2) 50%, transparent 50%); background-clip: content-box; padding: 3px; }
.st.done { box-shadow: none; background: var(--ok); }
.st.done::after { content: ""; position: absolute; left: 5px; top: 3px; width: 3px; height: 6px; border: solid var(--bg); border-width: 0 1.4px 1.4px 0; transform: rotate(45deg); }
.st.due { box-shadow: inset 0 0 0 1.25px var(--amber); }
.st.blocked { box-shadow: inset 0 0 0 1.25px var(--red); }
.st.blocked::after { content: ""; position: absolute; left: 3.5px; right: 3.5px; top: 6.4px; height: 1.25px; background: var(--red); }

/* ---------- progress glyph: a small ring that fills, beside its number ----------
   <span class="prog" style="--p:.5"></span><span>1 of 2</span>  (--p from 0 to 1) */
.prog { position: relative; display: inline-block; flex: none; width: 14px; height: 14px; border-radius: 999px; vertical-align: -2px; box-shadow: inset 0 0 0 1.25px var(--fg-3); }
.prog::before { content: ""; position: absolute; inset: 3px; border-radius: 999px; background: conic-gradient(var(--fg-2) calc(var(--p, 0) * 360deg), transparent 0); }
.prog.full { box-shadow: inset 0 0 0 1.25px var(--ok); }
.prog.full::before { background: var(--ok); }
.ap-prog { display: inline-flex; align-items: center; gap: 6px; font-family: "Geist Mono", monospace; font-size: 11.5px; color: var(--fg-2); white-space: nowrap; }

/* =====================================================================================================
   Linear round: shared components (home agent). Additive only; page css must not restyle these classes.
   ===================================================================================================== */

/* ---------- D17 bento link cards: a cropped fragment of the linked page, a name, one line, a round arrow ----------
   <div class="bento-links"><a class="bento" href="/evidence/"><div class="bento-frag" aria-hidden="true">…</div>
   <b>Evidence</b><span>One line.</span><i class="bento-go" aria-hidden="true"></i></a> … </div> */
.bento-links { margin-top: 56px; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap: 16px; }
.bento { position: relative; min-width: 0; min-height: 380px; padding: 0 28px 28px; display: flex; flex-direction: column; justify-content: flex-end; gap: 6px; border-radius: 16px; overflow: hidden; isolation: isolate; color: var(--fg-1); background: linear-gradient(180deg, #ffffff05, transparent 60%), var(--bg-1); box-shadow: inset 0 0 0 1px var(--line); transition: box-shadow var(--dur-hover), background var(--dur-hover); }
.bento-frag { position: absolute; inset: 28px 0 auto 28px; height: 240px; overflow: hidden; pointer-events: none; font-size: 13px; color: var(--fg-2); opacity: .8; transition: opacity var(--dur-hover);
  -webkit-mask-image: linear-gradient(#000 50%, transparent), linear-gradient(90deg, #000 70%, transparent); mask-image: linear-gradient(#000 50%, transparent), linear-gradient(90deg, #000 70%, transparent); -webkit-mask-composite: source-in; mask-composite: intersect; }
.bento > b { position: relative; margin-top: 232px; font-size: 13px; font-weight: 450; color: var(--fg-3); }
.bento > span { position: relative; max-width: 26ch; padding-right: 48px; font-size: 17px; line-height: 1.4; letter-spacing: -0.014em; color: var(--fg-1); text-wrap: pretty; }
.bento-go { position: absolute; right: 24px; bottom: 24px; width: 40px; height: 40px; border-radius: 999px; box-shadow: inset 0 0 0 1px var(--line-3); color: var(--fg-3); transition: color var(--dur-hover), box-shadow var(--dur-hover); }
.bento-go::before { content: ""; position: absolute; left: 15px; top: 16px; width: 7px; height: 7px; border: solid currentColor; border-width: 1.5px 1.5px 0 0; transform: rotate(45deg); }
@media (any-hover: hover) {
  .bento:hover { background: linear-gradient(180deg, #ffffff08, transparent 60%), var(--bg-2); box-shadow: inset 0 0 0 1px var(--line-3); }
  .bento:hover .bento-frag { opacity: 1; }
  .bento:hover .bento-go { color: var(--fg-1); box-shadow: inset 0 0 0 1px var(--fg-4); }
}
:root[data-theme="light"] .bento { background: var(--bg-1); }
:root[data-theme="light"] .bento:hover { background: var(--bg-2); }
@media (max-width: 640px) { .bento { min-height: 320px; padding: 0 20px 20px; } .bento-frag { inset: 20px 0 auto 20px; height: 190px; } .bento > b { margin-top: 186px; } .bento-go { right: 16px; bottom: 16px; } }

/* ---------- E3 spec list: a heading on the left, text rows on the right; a row opens a 640px drawer ----------
   <div class="spec"><h3 class="spec-h">Also in Tasks</h3><ul class="spec-l"><li><details><summary><b>Title</b>
   <span>One line.</span></summary><div class="spec-more">Two or three lines.</div></details></li> … </ul></div> */
.spec { margin-top: 72px; display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); column-gap: calc(var(--gutter) * 2); align-items: start; interpolate-size: allow-keywords; }
.spec > :not(.spec-l) { grid-column: 1; }
.spec > .spec-l { grid-column: 2; grid-row: 1 / span 9; }
.spec-h { font-size: clamp(22px, 2vw, 28px); line-height: 1.15; letter-spacing: -0.022em; font-weight: 560; color: var(--fg-1); }
.spec > p { margin-top: 10px; color: var(--fg-3); font-size: 15px; max-width: 32ch; }
.spec-l { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--line); }
.spec-l > li { border-bottom: 1px solid var(--line); }
.spec-l summary { position: relative; min-height: 56px; padding: 16px 40px 16px 0; display: grid; grid-template-columns: minmax(0, 225px) minmax(0, 1fr); column-gap: 24px; align-items: baseline; list-style: none; cursor: pointer; font-size: 15px; transition: color var(--dur-hover); }
.spec-l summary::-webkit-details-marker { display: none; }
.spec-l summary b { font-weight: 500; color: var(--fg-1); }
.spec-l summary span { color: var(--fg-3); }
.spec-l summary::after { content: ""; position: absolute; right: 8px; top: 50%; width: 7px; height: 7px; margin-top: -5px; border: solid var(--fg-3); border-width: 1.5px 1.5px 0 0; transform: rotate(45deg); transition: transform 300ms var(--ease-swap), border-color var(--dur-hover); }
.spec-l details[open] > summary::after { transform: rotate(135deg); border-color: var(--fg-1); }
@media (any-hover: hover) { .spec-l summary:hover span { color: var(--fg-2); } .spec-l summary:hover::after { border-color: var(--fg-1); } }
.spec-l details::details-content { height: 0; overflow: clip; transition: height 300ms var(--ease-swap), content-visibility 300ms allow-discrete; }
.spec-l details[open]::details-content { height: auto; }
.spec-more { max-width: 640px; padding: 0 40px 20px 249px; color: var(--fg-3); font-size: 14.5px; line-height: 1.6; }
.spec-l details[open] .spec-more { animation: spec-in 300ms var(--ease-swap); }
@keyframes spec-in { from { opacity: 0; transform: translateY(-4px); } }
@media (max-width: 900px) {
  .spec { grid-template-columns: minmax(0, 1fr); row-gap: 20px; }
  .spec > .spec-l { grid-column: 1; grid-row: auto; }
  .spec-l summary { grid-template-columns: minmax(0, 1fr); row-gap: 2px; }
  .spec-more { padding: 0 40px 20px 0; }
}
@media (prefers-reduced-motion: reduce) { .spec-l details::details-content { transition: none; } .spec-l details[open] .spec-more { animation: none; } }

/* ---------- E4 question cards: a quoted question each, at most three ----------
   <div class="qcards"><figure class="qcard"><blockquote>"How do we move in?"</blockquote><figcaption>Short answer.</figcaption></figure> … </div> */
.qcards { margin-top: 56px; display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 16px; }
.qcard { margin: 0; min-height: 240px; padding: 28px; display: flex; flex-direction: column; justify-content: flex-end; gap: 10px; border-radius: 14px; background: color-mix(in srgb, var(--bg-1) 88%, transparent); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); box-shadow: inset 0 0 0 1px var(--line); transition: background var(--dur-hover), box-shadow var(--dur-hover); }
.qcard blockquote { margin: 0; max-width: 22ch; font-size: 19px; line-height: 1.3; letter-spacing: -0.016em; font-weight: 500; color: var(--fg-1); text-wrap: balance; }
.qcard figcaption { max-width: 36ch; font-size: 14.5px; color: var(--fg-3); }
@media (any-hover: hover) { .qcard:hover { background: var(--bg-2); box-shadow: inset 0 0 0 1px var(--line-3); } }
@media (max-width: 640px) { .qcard { min-height: 168px; padding: 22px; } }

/* ---------- the brand mark as an anchor: silver in a dark tile, never copper ----------
   <span class="mark-tile" style="--s:96px"><svg>…header path…</svg></span>
   The mark is painted from its own shape (mask), so a copper fill on the copied path never shows. */
.mark-tile { --s: 96px; position: relative; display: inline-grid; place-items: center; flex: none; width: var(--s); height: var(--s); border-radius: calc(var(--s) * .21); background: #0f1011; box-shadow: inset 0 0 0 1px rgba(255,255,255,.08), inset 0 1px 0 rgba(255,255,255,.06); vertical-align: middle; }
.mark-tile > svg { display: none; }
.mark-tile::before { content: ""; width: 60%; aspect-ratio: 784.1 / 392.04; margin-top: -4%; background: linear-gradient(180deg, #f7f8f8, #8a8f98);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 784.1 392.04'%3E%3Cpath d='M408.2.32v-.32h-32.29v236.37c0,2.6-3.7,3.09-4.37.58L310.36,8.62l-31.2,8.37,61.19,228.33c.67,2.51-2.78,3.94-4.08,1.69L216.98,40.4l-27.96,16.13,119.32,206.65c1.3,2.25-1.66,4.53-3.5,2.69L134.45,95.48l-22.82,22.82,170.35,170.37c1.84,1.84-.43,4.8-2.69,3.5l-211.61-122.18-16.16,27.96,211.63,122.17c2.25,1.3.82,4.75-1.69,4.08L21.78,259.96l-8.37,31.2,239.69,64.21c2.51.67,2.03,4.37-.58,4.37H0v32.29h784.1C784.1,180.94,617.22,8.8,408.2.32Z'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 784.1 392.04'%3E%3Cpath d='M408.2.32v-.32h-32.29v236.37c0,2.6-3.7,3.09-4.37.58L310.36,8.62l-31.2,8.37,61.19,228.33c.67,2.51-2.78,3.94-4.08,1.69L216.98,40.4l-27.96,16.13,119.32,206.65c1.3,2.25-1.66,4.53-3.5,2.69L134.45,95.48l-22.82,22.82,170.35,170.37c1.84,1.84-.43,4.8-2.69,3.5l-211.61-122.18-16.16,27.96,211.63,122.17c2.25,1.3.82,4.75-1.69,4.08L21.78,259.96l-8.37,31.2,239.69,64.21c2.51.67,2.03,4.37-.58,4.37H0v32.29h784.1C784.1,180.94,617.22,8.8,408.2.32Z'/%3E%3C/svg%3E") center / contain no-repeat; }
:root[data-theme="light"] .mark-tile { background: linear-gradient(180deg, #ffffff, #f1f1f3); box-shadow: inset 0 0 0 1px rgba(0,0,0,.08), inset 0 1px 0 #fff, 0 1px 2px rgba(0,0,0,.04); }
:root[data-theme="light"] .mark-tile::before { background: linear-gradient(180deg, #a9adb4, #3c3f45); }

/* ---------- edge fades: hide the rest without a border (F8), and the corner hairline (F5) ---------- */
.fade-r { -webkit-mask-image: linear-gradient(to right, #000 60%, transparent 92%); mask-image: linear-gradient(to right, #000 60%, transparent 92%); }
.fade-b { -webkit-mask-image: linear-gradient(#000 60%, transparent); mask-image: linear-gradient(#000 60%, transparent); }
.fade-x { -webkit-mask-image: linear-gradient(90deg, transparent, #000 15%, #000 85%, transparent); mask-image: linear-gradient(90deg, transparent, #000 15%, #000 85%, transparent); }
.fade-r.fade-b { -webkit-mask-image: linear-gradient(to right, #000 60%, transparent 92%), linear-gradient(#000 60%, transparent); mask-image: linear-gradient(to right, #000 60%, transparent 92%), linear-gradient(#000 60%, transparent); -webkit-mask-composite: source-in; mask-composite: intersect; }
.fade-x.fade-b { -webkit-mask-image: linear-gradient(90deg, transparent, #000 15%, #000 85%, transparent), linear-gradient(#000 60%, transparent); mask-image: linear-gradient(90deg, transparent, #000 15%, #000 85%, transparent), linear-gradient(#000 60%, transparent); -webkit-mask-composite: source-in; mask-composite: intersect; }
/* corner hairline: a brighter border from the top-left corner, fading along both edges. Uses ::after. */
:where(.corner-hair) { position: relative; }
.corner-hair::after { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; box-shadow: inset 0 0 0 1px rgba(255,255,255,.22); -webkit-mask-image: radial-gradient(200px 200px at 0 0, #000 0, rgba(0,0,0,.6) 30%, rgba(0,0,0,.2) 50%, transparent 70%); mask-image: radial-gradient(200px 200px at 0 0, #000 0, rgba(0,0,0,.6) 30%, rgba(0,0,0,.2) 50%, transparent 70%); }
:root[data-theme="light"] .corner-hair::after { box-shadow: inset 0 0 0 1px rgba(0,0,0,.18); }
