/* ============================================================================
   night.css — NIGHT SHOOT ON THE SITE. The app's look (docs/OWNER-DECISIONS.md, "Night Shoot"), worn
   over the Viewfinder. Loaded last on the pages that wear viewfinder.css.
   What it keeps: the Viewfinder's structure (the camera frame, the slate lines and timecode, the wall of
   monitors, the buttons), the scene (plate.js), the flower.
   What it changes, by the app's rules:
     · crimson is the one colour; everything else is ink. No pink-to-violet turn, no rainbow of tags.
     · purple appears only as light in the smoke (the scene's wash at the hero and the close), never on
       text, a border, a tag or a control.
     · the ground is a neutral near-black; the site's own fine grain stays.
     · labels are engraved in wide Archivo, as on the app's status strip.
   ⛔ Every colour is a token or reads one.
   ============================================================================ */

@font-face { font-family: 'Archivo Night'; src: url('assets/fonts/Archivo-var.woff2') format('woff2'); font-weight: 100 900; font-stretch: 62% 125%; font-display: swap; }

/* ---- the ground: neutral near-black (the violet lives in the smoke only) ---- */
html:not([data-ground="paper"]) {
  --bg: #0B0B0D; --bg-rgb: 11, 11, 13; --bg-2: #0F0F12; --bg-3: #151519; --riser: #0F0F12;
  --text: #F3F1EE; --text-2: #B3AEA6; --text-3: #8F8A82; --text-4: #85807A;
}
:root {
  /* the old violet tokens now point at the one colour, so nothing anywhere paints purple */
  --violet: var(--accent); --violet-rgb: var(--accent-rgb); --violet-text: var(--accent-soft); --violet-deep: var(--accent-deep);
  --blend: var(--accent);
  /* the cold blue that marked "without flor.cam" goes to ink: the contrast is in the strike and the tick, not a hue */
  --cold: var(--text-3); --cold-soft: var(--text-3); --cold-deep: var(--bg-3); --cold-rgb: 143, 138, 130;
  --font-engrave: 'Archivo Night', 'Archivo', var(--font-label);
}
html:not([data-ground="paper"]) body.cam { background-color: var(--bg); }

/* ---- the grain: the site already lays one flat noise tile over the page (styles.css, under 6%), so it stays ---- */

/* ---- the tone: one colour down the whole page ---- */
/* the old ramp is set per band by id (viewfinder.css, styles.css), hence the weight */
.cam .act, .cam .doorstep-band, .cam .hero { --tone: var(--accent) !important; }
.cam .act { --tone-text: var(--accent-soft); }

/* ---- engraved labels: wide Archivo, small caps, ink ---- */
.cam .shead .k, .slate-line, .hud, .hud__scene, .cam .doorstep-plat, .cam .nx-limit span, .cam .nx-ledger__head,
.cam .mv__cap b, .cam .nx-deal__top .k, .cam .nx-brain legend.k, .mv__src, .mv__key {
  font-family: var(--font-engrave); font-stretch: 125%; font-weight: 700;
}
.cam .shead .k { color: var(--text-3); letter-spacing: .2em; }
.cam .shead .k::before { background: var(--accent); }
.slate-line b { color: var(--text-2); }

/* ---- headlines: ink, one crimson turn, no gradient, no violet halo ---- */
.cam .hero h1 em { color: var(--accent); background: none; -webkit-text-fill-color: currentColor; }
html[data-mark="held"]:not([data-ground="paper"]) .cam .hero h1 em { text-shadow: 0 0 22px rgba(var(--accent-rgb), .30), 0 0 70px rgba(var(--accent-rgb), .16); }
.cam .shead h2 em, .cam .closing h2 em, .cam .finalcta h2 em, .shead h1 em, .shead h2 em { color: var(--text-3); text-shadow: none; }
html[data-mark="held"]:not([data-ground="paper"]) .cam .closing h2 em { text-shadow: none; }
.cam .hero__rule, .nx-deal::before, .mv::before, .cam .policy::before { background: var(--accent); }

/* ---- the rooms wall: tags and readouts in ink, red only when late ---- */
.sc-t.g, .sc-t.a, .sc-t.b { color: var(--mv-ink2); }
.sc-paper .sc-t.g { color: var(--mv-paper-ink); }
.sc-age .g, .sc-split .g { background: var(--mv-ink3); }
.sc-card.is-done i::before, .sc-card i::before { background: var(--mv-ink2); }
.sc--cal .sc-h u.d, .sc--cal .sc-h u.r { background: transparent; box-shadow: inset 0 0 0 1px var(--mv-ink2); }
.sc-grid i:nth-child(22), .sc-grid i:nth-child(27) { background: transparent; box-shadow: inset 0 0 0 1px var(--mv-ink2); color: var(--mv-ink); }
.sc-flow > span { border-top-color: var(--mv-ink3); } .sc-flow i { background: var(--mv-ink3); }
.mv__src i { background: var(--accent); }
.mv__k--pvw i { background: var(--mv-ink2); }
.mv__tile:hover .mv__frame, .mv__tile:focus-visible .mv__frame { --pvw: var(--mv-ink2); }

/* ---- the assistant's brain diagram: no green wire, no amber dashes ---- */
.nx-wire--out { background: var(--text-3); }

/* ---- ledger dots: ink, the "when you ask" one crimson ---- */
.cam .nx-st.off i, .cam .nx-ledger__key .off { background: transparent; box-shadow: inset 0 0 0 1px var(--text-3); }

/* ---- the HUD at the foot: the scene name and the scrub follow the one colour, not the old ramp ---- */
.hud { --tone-now: var(--accent) !important; }
.hud__scene b { color: var(--accent-soft); }
.hud .hud__scrub, .hud [class*="scrub"] { background: var(--accent); }

/* ---- the closing line: "create" in the gothic face stays crimson, the rest ink ---- */
.cam .gothic.ember { background: none; -webkit-text-fill-color: currentColor; color: var(--accent); }
.cam .finalcta h2 em { color: var(--text-3); text-shadow: none; }

/* ---- the one violet that stays: flor.rgb's signature is florgb.com's own mark (Flor's pick, "exact florgb
   look"), another brand's signature, not flor.cam's interface ---- */
.cam #creator .maker__sig .maker__name { color: #A78BFA; }

/* ---- the Everything page's hero turn and the legal pages follow the home page ---- */
.cam--deep #p-top h1 em { color: var(--accent); }
.cam--legal, .cam--legal .legal-doc, .cam--legal main { --tone: var(--accent) !important; }

/* ---- the brain diagram (2026-10-16, Flor: the yellow words were covered by the boxes). The wire's label is
   wider than the wire, so it sits above the boxes as a cable tag, on its own patch of ground where it crosses the
   dashed "this computer" line. Ink, not amber: the cloud brain is marked by its crimson edge and the dashed wire. ---- */
.nx-node--brain { border-color: var(--text-3); }
.nx-brain:has(#brain-chatgpt:checked) .nx-node--brain,
.nx-brain:has(#brain-key:checked) .nx-node--brain { border-color: var(--accent); }
.nx-wire--out { background: var(--text-3); }
.nx-brain:has(#brain-chatgpt:checked) .nx-wire--out,
.nx-brain:has(#brain-key:checked) .nx-wire--out { background: repeating-linear-gradient(90deg, var(--text-2) 0 7px, transparent 7px 12px); }
.cam .nx-brain__map .nx-wire--out { position: static; }   /* the tag hangs off the map, so it can sit on the dashed line */
.nx-wire--out em {
  z-index: 3; bottom: auto; top: -39px;   /* on the dashed box's top edge (-34px), like "this computer" */
  left: calc((100% - 2 * var(--w)) * 2 / 3 + 1.5 * var(--w));
  padding: 0 8px; background: var(--bg); color: var(--text-2);
  font-family: var(--font-engrave); font-stretch: 125%;
}
