/* ===== iris_theme.css tokens (house design system, IRIS // CONTROL, Nocturne Labs) =====
   Dark only. Violet is identity, amber is attention, green is good, red is broken.
   Display type is Orbitron, uppercase, wide tracking. Body/data is mono.
   Panels are square with corner brackets. Nothing is rounded except orbs, LEDs and pills.
   Layout: header strip, operator panel, Iris phase rail, systems-built grid, theory, record, contact. */
:root{
  --ir-void:#0a0714; --ir-panel:#141021; --ir-panel-2:#0e0a19; --ir-sunken:#070510;
  --ir-100:#f3ecff; --ir-head:#ece7fb; --ir-txt:#d5cdf2; --ir-300:#b7a6ff; --ir-400:#b18cff;
  --ir-500:#9085e9; --ir-700:#7c3aed; --ir-900:#3b1478;
  --ir-amber:#d9a44a; --ir-amber-hi:#ffd27d; --ir-good:#9df2c5; --ir-bad:#ff6b6b; --ir-off:#3a3350;
  --ir-void-rgb:10,7,20; --ir-sunken-rgb:7,5,16; --ir-300-rgb:183,166,255; --ir-500-rgb:144,133,233;
  --ir-700-rgb:124,58,237; --ir-amber-rgb:217,164,74; --ir-good-rgb:157,242,197; --ir-bad-rgb:255,107,107;
  --ir-line:rgba(var(--ir-500-rgb),.24); --ir-line-dim:rgba(var(--ir-500-rgb),.11); --ir-line-hot:rgba(var(--ir-500-rgb),.55);
  --ir-wash:rgba(var(--ir-500-rgb),.04); --ir-wash-2:rgba(var(--ir-500-rgb),.10); --ir-glow:rgba(var(--ir-500-rgb),.55);
  --ir-disp:"Orbitron","DejaVu Sans Mono",ui-monospace,monospace;
  --ir-mono:"DejaVu Sans Mono",ui-monospace,"Cascadia Mono",Consolas,monospace;
  --ir-track-tight:.16em; --ir-track:.22em; --ir-track-wide:.32em;
  --ir-gap:13px; --ir-pad:15px; --ir-grid:44px; --ir-bracket:13px;
  color-scheme:dark;
}

/* ===== base + field ===== */
*{box-sizing:border-box}
html{background:var(--ir-void)}
body{box-sizing:border-box;margin:0;background:var(--ir-void);color:var(--ir-txt);font-family:var(--ir-mono);font-size:13px;line-height:1.55;
  -webkit-font-smoothing:antialiased;min-height:100vh;position:relative;overflow-x:hidden;
  padding-block:18px 28px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;
  background-image:linear-gradient(var(--ir-line-dim) 1px,transparent 1px),linear-gradient(90deg,var(--ir-line-dim) 1px,transparent 1px);
  background-size:var(--ir-grid) var(--ir-grid);opacity:.5}
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:9;
  background:repeating-linear-gradient(180deg,rgba(var(--ir-500-rgb),.035) 0 1px,transparent 1px 3px)}
.ir-frame{position:fixed;inset:9px;pointer-events:none;z-index:4}
.ir-frame i{position:absolute;width:15px;height:15px;border:2px solid var(--ir-500);opacity:.42}
.ir-frame i:nth-child(1){top:0;left:0;border-right:0;border-bottom:0}
.ir-frame i:nth-child(2){top:0;right:0;border-left:0;border-bottom:0}
.ir-frame i:nth-child(3){bottom:0;left:0;border-right:0;border-top:0}
.ir-frame i:nth-child(4){bottom:0;right:0;border-left:0;border-top:0}
.wrap{position:relative;z-index:2;max-width:1320px;margin:0 auto;display:flex;flex-direction:column;gap:var(--ir-gap)}
a{color:var(--ir-300)}
:focus-visible{outline:1px solid var(--ir-300);outline-offset:3px}
p{margin:0}
h1,h2,h3{margin:0;text-wrap:balance}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-track{background:var(--ir-sunken)}
::-webkit-scrollbar-thumb{background:rgba(var(--ir-500-rgb),.28)}

/* ===== panel ===== */
.pnl{position:relative;background:linear-gradient(180deg,var(--ir-panel),var(--ir-panel-2));border:1px solid var(--ir-line);padding:var(--ir-pad) calc(var(--ir-pad) + 1px);min-width:0}
.pnl::before,.pnl::after{content:"";position:absolute;width:var(--ir-bracket);height:var(--ir-bracket);border:2px solid var(--ir-500);pointer-events:none}
.pnl::before{top:-1px;left:-1px;border-right:0;border-bottom:0}
.pnl::after{bottom:-1px;right:-1px;border-left:0;border-top:0}
.ptitle{font-family:var(--ir-disp);font-size:10px;font-weight:600;letter-spacing:var(--ir-track-wide);text-transform:uppercase;color:var(--ir-500);
  margin:0 0 12px;display:flex;align-items:center;gap:9px;text-shadow:0 0 9px var(--ir-glow)}
.ptitle::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--ir-line),transparent)}
.sub{font-family:var(--ir-disp);font-size:10px;font-weight:500;letter-spacing:var(--ir-track);text-transform:uppercase;color:var(--ir-500);opacity:.65}
.dim{opacity:.6}

/* ===== header ===== */
.hdr{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.mark{width:40px;height:40px;border-radius:50%;flex:none;position:relative;
  background:radial-gradient(circle at 34% 30%,var(--ir-100),var(--ir-400) 34%,var(--ir-700) 70%,var(--ir-900));
  box-shadow:0 0 26px rgba(var(--ir-700-rgb),.6)}
.mark::after{content:"";position:absolute;inset:-9px;border:1px solid var(--ir-line);border-radius:50%;border-top-color:var(--ir-300);animation:spin 6s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.hdr h1{font-family:var(--ir-disp);font-size:22px;font-weight:800;letter-spacing:.30em;color:var(--ir-head);text-shadow:0 0 16px var(--ir-glow)}
.hdr .who{min-width:0}
.hdr nav{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto}
.hdr nav a{font-family:var(--ir-disp);font-size:9px;letter-spacing:var(--ir-track);text-transform:uppercase;text-decoration:none;color:var(--ir-500);
  border:1px solid var(--ir-line-dim);padding:6px 10px;background:var(--ir-wash)}
.hdr nav a:hover{color:var(--ir-head);border-color:var(--ir-line-hot)}
.clock{font-family:var(--ir-disp);font-size:11px;letter-spacing:var(--ir-track-tight);color:var(--ir-amber);opacity:.85;font-variant-numeric:tabular-nums}
.stat{display:flex;align-items:center;gap:10px;border:1px solid var(--ir-line);padding:7px 15px;background:var(--ir-wash);
  font-family:var(--ir-disp);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--ir-txt)}
.led{width:8px;height:8px;border-radius:50%;flex:none;background:var(--ir-300);color:var(--ir-300);box-shadow:0 0 9px currentColor;animation:pul 1.6s ease-in-out infinite}
.led.good{background:var(--ir-good);color:var(--ir-good)}
.led.amber{background:var(--ir-amber-hi);color:var(--ir-amber-hi)}
.led.bad{background:var(--ir-bad);color:var(--ir-bad)}
.led.off{background:var(--ir-off);color:var(--ir-off);box-shadow:none;animation:none}
@keyframes pul{0%,100%{opacity:1}50%{opacity:.35}}

/* ===== operator panel ===== */
.g-main{display:grid;gap:var(--ir-gap);grid-template-columns:minmax(0,1.55fr) minmax(0,1fr)}
.name{font-family:var(--ir-disp);font-weight:800;text-transform:uppercase;color:var(--ir-head);letter-spacing:.12em;line-height:.95;
  font-size:clamp(2.4rem,7.4vw,5.6rem);text-shadow:0 0 28px var(--ir-glow);overflow-wrap:anywhere}
.name .ap{color:var(--ir-300)}
.op{display:flex;flex-direction:column;gap:14px}
.op .full{font-family:var(--ir-disp);font-size:11px;letter-spacing:var(--ir-track);text-transform:uppercase;color:var(--ir-500)}
.thesis{font-size:15px;line-height:1.6;color:var(--ir-txt);max-width:58ch}
.chips{display:flex;flex-wrap:wrap;gap:7px}
.chip{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--ir-line);background:var(--ir-wash);padding:6px 12px;
  font-family:var(--ir-disp);font-size:9px;font-weight:700;letter-spacing:var(--ir-track);text-transform:uppercase;color:var(--ir-txt)}
.chip.amber{border-color:rgba(var(--ir-amber-rgb),.65);background:rgba(var(--ir-amber-rgb),.10);color:var(--ir-amber-hi)}
.kv{width:100%;border-collapse:collapse;font-size:12px}
.kv th{font-family:var(--ir-disp);font-size:9px;font-weight:600;letter-spacing:var(--ir-track);text-transform:uppercase;color:var(--ir-500);
  text-align:left;padding:8px 10px 8px 0;border-bottom:1px solid var(--ir-line-dim);white-space:nowrap;vertical-align:top}
.kv td{padding:8px 0;border-bottom:1px solid var(--ir-line-dim);color:var(--ir-head)}
.kv tr:last-child th,.kv tr:last-child td{border-bottom:0}
.kv .hot{color:var(--ir-amber-hi)}
.nums{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--ir-gap)}
.num{border:1px solid var(--ir-line-dim);background:var(--ir-wash);padding:11px 12px}
.num b{display:block;font-family:var(--ir-disp);font-weight:700;font-size:26px;color:var(--ir-head);letter-spacing:.04em;font-variant-numeric:tabular-nums}
.num span{font-family:var(--ir-disp);font-size:9px;letter-spacing:var(--ir-track-tight);text-transform:uppercase;color:var(--ir-500)}

/* ===== phase rail (from the dash) ===== */
.rail{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px;margin-bottom:13px}
.ph{appearance:none;font:inherit;text-align:left;cursor:pointer;color:inherit;border:1px solid var(--ir-line-dim);background:var(--ir-wash);padding:9px 10px;position:relative;overflow:hidden;min-width:0}
.ph .pn{font-family:var(--ir-disp);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--ir-500);opacity:.55}
.ph .pd{font-size:10px;color:var(--ir-txt);opacity:.5;margin-top:3px}
.ph:hover{border-color:var(--ir-line)}
.ph.on{border-color:var(--ir-300);background:rgba(var(--ir-300-rgb),.16);box-shadow:inset 0 0 22px rgba(var(--ir-300-rgb),.20)}
.ph.on .pn{color:var(--ir-300);opacity:1;text-shadow:0 0 9px rgba(var(--ir-500-rgb),.7)}
.ph.on .pd{opacity:.95}
.segs{display:flex;gap:2px;height:13px}
.segs>i{flex:1;background:var(--ir-line-dim);transition:background .12s,box-shadow .12s}
.segs>i.lit{background:var(--ir-300);box-shadow:0 0 8px rgba(var(--ir-500-rgb),.85)}
.rowlab{display:flex;justify-content:space-between;gap:10px;margin-top:7px;font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ir-500);opacity:.75}
.readout{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:var(--ir-gap);margin-top:14px}
.readout h3{font-family:var(--ir-disp);font-size:16px;font-weight:700;letter-spacing:var(--ir-track);text-transform:uppercase;color:var(--ir-head);margin-bottom:8px}
.readout p{max-width:60ch}
.sv{display:flex;align-items:baseline;gap:9px;padding:8px 0;border-bottom:1px solid var(--ir-line-dim);font-size:12px}
.sv:last-child{border-bottom:0}
.sv .k{font-family:var(--ir-disp);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--ir-500);flex:none;width:96px}
.sv .v{color:var(--ir-head);min-width:0;overflow-wrap:anywhere}
.btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
button.b{font-family:var(--ir-disp);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ir-500);background:var(--ir-wash);
  border:1px solid var(--ir-line);padding:10px 14px;cursor:pointer;transition:.15s}
button.b:hover{background:rgba(var(--ir-500-rgb),.11);color:var(--ir-300);box-shadow:0 0 16px rgba(var(--ir-500-rgb),.28)}
button.b.go{color:var(--ir-good);border-color:rgba(var(--ir-good-rgb),.5)}
button.b.stop{color:var(--ir-bad);border-color:rgba(var(--ir-bad-rgb),.5)}

/* ===== tabs + systems built ===== */
.tabs{display:flex;gap:2px;flex-wrap:wrap;border-bottom:1px solid var(--ir-line-dim);margin-bottom:13px}
.tab{appearance:none;background:none;border:0;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;padding:9px 12px;
  font-family:var(--ir-disp);font-size:9px;letter-spacing:var(--ir-track);text-transform:uppercase;color:var(--ir-500);opacity:.7}
.tab:hover{opacity:1}
.tab[aria-pressed="true"]{color:var(--ir-300);border-bottom-color:var(--ir-300);opacity:1;text-shadow:0 0 9px var(--ir-glow)}
.tab .n{opacity:.55;margin-left:4px}
.subs{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:9px}
.sb{border:1px solid var(--ir-line-dim);background:var(--ir-wash);padding:12px 13px 13px 16px;position:relative;display:flex;flex-direction:column;gap:7px;min-width:0}
.sb::before{content:"";position:absolute;top:0;left:0;width:3px;height:100%;background:var(--ir-500);opacity:.5}
.sb[data-st="run"]::before{background:var(--ir-good);opacity:.7}
.sb[data-st="build"]::before{background:var(--ir-amber);opacity:.8}
.sb[data-st="plan"]::before,.sb[data-st="ret"]::before{background:var(--ir-off);opacity:1}
.sb .top{display:flex;align-items:center;gap:9px}
.sb .st{font-family:var(--ir-disp);font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ir-head);min-width:0}
.sb .dt{margin-left:auto;font-family:var(--ir-disp);font-size:8px;letter-spacing:.2em;text-transform:uppercase;display:flex;align-items:center;gap:7px;white-space:nowrap}
.sb[data-st="run"] .dt{color:var(--ir-good)}
.sb[data-st="build"] .dt{color:var(--ir-amber-hi)}
.sb[data-st="plan"] .dt,.sb[data-st="ret"] .dt{color:var(--ir-500);opacity:.75}
.sb .sd{font-size:12px;line-height:1.6;opacity:.82}
.sb .stack{font-size:10px;color:var(--ir-500);letter-spacing:.04em;line-height:1.6}
.sb .sk{margin-top:auto;padding-top:8px;border-top:1px solid var(--ir-line-dim);font-size:11px;color:var(--ir-amber);letter-spacing:.02em}
.sb .sk b{font-family:var(--ir-disp);font-size:8px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;margin-right:6px}

/* ===== theory ===== */
.loop{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
.lp{border:1px solid var(--ir-line-dim);background:var(--ir-wash);padding:11px 12px;min-width:0}
.lp .pn{font-family:var(--ir-disp);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--ir-300);text-shadow:0 0 9px var(--ir-glow)}
.lp .pd{font-size:11px;margin-top:5px;opacity:.8}
.lp .nx{font-family:var(--ir-disp);font-size:8px;letter-spacing:.2em;color:var(--ir-amber);margin-top:8px;text-transform:uppercase}
.prose{display:flex;flex-direction:column;gap:10px;max-width:64ch;font-size:13px}

/* ===== record ===== */
.tbl-wrap{overflow-x:auto}
.ir-table{width:100%;border-collapse:collapse;font-size:12px;min-width:560px}
.ir-table th{font-family:var(--ir-disp);font-size:9px;font-weight:600;letter-spacing:var(--ir-track);text-transform:uppercase;color:var(--ir-500);text-align:left;padding:7px 10px;border-bottom:1px solid var(--ir-line)}
.ir-table td{padding:9px 10px;border-bottom:1px solid var(--ir-line-dim);vertical-align:top}
.ir-table tr:hover td{background:var(--ir-wash)}
.ir-table .when{font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--ir-amber)}
.ir-table .org{font-family:var(--ir-disp);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--ir-head)}

/* ===== contact / term ===== */
.term{border:1px solid var(--ir-line-dim);background:var(--ir-sunken);padding:9px 10px;font-size:11px;min-height:84px;max-height:140px;overflow-y:auto;line-height:1.7}
.term div{opacity:.85}
.term .t{color:var(--ir-500);opacity:.55}
.term .ok{color:var(--ir-good)}
.addr{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.addr code{font-family:var(--ir-mono);font-size:clamp(14px,2.6vw,19px);color:var(--ir-head);user-select:all;border-bottom:1px solid var(--ir-line-hot);padding-bottom:3px}
.foot{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-top:6px}

@media (max-width:1080px){.g-main,.readout{grid-template-columns:minmax(0,1fr)}}
@media (max-width:820px){.rail{grid-template-columns:repeat(3,minmax(0,1fr))}.loop{grid-template-columns:repeat(2,minmax(0,1fr))}.nums{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:600px){.ir-frame{display:none}.hdr nav{margin-left:0;width:100%}.subs{grid-template-columns:minmax(0,1fr)}.stat{display:none}}
@media (max-width:420px){.rail{grid-template-columns:repeat(2,minmax(0,1fr))}.loop{grid-template-columns:minmax(0,1fr)}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ===== multi-page additions (layout only; colours are tokens) ===== */
.hdr nav a[aria-current="page"]{color:var(--ir-head);border-color:var(--ir-line-hot);background:var(--ir-wash-2);text-shadow:0 0 9px var(--ir-glow)}
.hdr .home{text-decoration:none;color:inherit;display:flex;align-items:center;gap:16px}
.pagehead{display:flex;flex-direction:column;gap:6px;padding-block:6px 2px}
.pagehead h2{font-family:var(--ir-disp);font-weight:800;font-size:clamp(22px,4vw,34px);letter-spacing:.18em;text-transform:uppercase;color:var(--ir-head);text-shadow:0 0 18px var(--ir-glow)}
.pagehead p{max-width:64ch;opacity:.8}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:9px}
.tile{display:flex;align-items:center;gap:13px;border:1px solid var(--ir-line-dim);background:var(--ir-wash);padding:14px;text-decoration:none;color:inherit;min-width:0;transition:border-color .15s,background .15s}
.tile:hover{border-color:var(--ir-line-hot);background:var(--ir-wash-2)}
.tile .mono{width:38px;height:38px;flex:none;display:grid;place-items:center;position:relative;border:1px solid var(--ir-line);
  font-family:var(--ir-disp);font-size:11px;font-weight:700;letter-spacing:.08em;color:var(--ir-300);text-shadow:0 0 9px var(--ir-glow)}
.tile .mono::before,.tile .mono::after{content:"";position:absolute;width:7px;height:7px;border:2px solid var(--ir-500)}
.tile .mono::before{top:-1px;left:-1px;border-right:0;border-bottom:0}
.tile .mono::after{bottom:-1px;right:-1px;border-left:0;border-top:0}
.tile .tl{font-family:var(--ir-disp);font-size:12px;font-weight:600;letter-spacing:var(--ir-track);text-transform:uppercase;color:var(--ir-head)}
.tile .ts{font-size:11px;opacity:.6;margin-top:2px}
.tile .go{margin-left:auto;font-family:var(--ir-disp);font-size:12px;color:var(--ir-500)}
.more{display:inline-flex;margin-top:12px;font-family:var(--ir-disp);font-size:9px;letter-spacing:var(--ir-track);text-transform:uppercase;text-decoration:none;color:var(--ir-300)}
.more:hover{color:var(--ir-head)}
.shot{margin:0;border:1px solid var(--ir-line-dim);background:var(--ir-sunken);overflow:hidden;min-width:0}
.shot img{display:block;width:100%;height:auto;max-width:100%;aspect-ratio:16/10;object-fit:cover}
.shot.natural img{aspect-ratio:auto}
.shot.duo{display:grid;grid-template-columns:1fr 1fr;gap:2px}
.shot.duo img{aspect-ratio:4/5}
.shot.duo figcaption{grid-column:1/-1}
.shot figcaption{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ir-500);padding:6px 9px;border-top:1px solid var(--ir-line-dim)}
.sb[data-st="done"]::before{background:var(--ir-good);opacity:.45}
.sb[data-st="done"] .dt{color:var(--ir-good)}
.gallery{display:grid;gap:var(--ir-gap);grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);align-items:start}
.gallery .shot img{aspect-ratio:auto}
@media (max-width:820px){.gallery{grid-template-columns:minmax(0,1fr)}}
a.chip{text-decoration:none;cursor:pointer;transition:border-color .15s,background .15s,color .15s}
a.chip:hover{border-color:var(--ir-line-hot);background:var(--ir-wash-2);color:var(--ir-head)}
a.chip.amber:hover{border-color:var(--ir-amber-hi);color:var(--ir-amber-hi);background:rgba(var(--ir-amber-rgb),.18)}
.g-2{display:grid;gap:var(--ir-gap);grid-template-columns:repeat(2,minmax(0,1fr))}
@media (max-width:1080px){.g-2{grid-template-columns:minmax(0,1fr)}}
