/* ============================================================
   Week of AI — "the feed": dark, monospace, amber phosphor
   ============================================================ */
html{background:#0b0d10;color-scheme:dark}
body{
  --bg:#0b0d10;--panel:#12151a;--panel2:#171b21;--line:#232830;--line2:#303743;
  --ink:#d6dae0;--bright:#f2f4f6;--mute:#7d8590;--dim:#4a515b;
  /* accent: --acc-rgb is the single source of truth. Every amber in the CSS and in the
     canvas scenes (js/app.js reads these at build time) derives from these tokens, so a
     palette change is this block and nothing else. */
  --acc-rgb:255,176,0;
  --acc:rgb(var(--acc-rgb));--acc2:#ffcb4d;--accdim:rgba(var(--acc-rgb),.12);
  --acc-warm:#ff8a00;--acc-pale:#ffd27a;--acc-sodium:#ffa030;--warn:#ff6b57;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  position:relative;margin:0;min-height:100vh;background:var(--bg);color:var(--ink);
  font-family:var(--mono);font-size:13px;line-height:1.5;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  overflow-x:hidden;font-variant-ligatures:none;
}
*,*::before,*::after{box-sizing:border-box}
::selection{background:var(--acc);color:#0b0d10}
.wrap{max-width:1280px;margin:0 auto;padding:0 20px}
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.ps{color:var(--mute)}
a{color:var(--ink);text-decoration:none;border-bottom:1px dotted var(--dim)}
a:hover{color:var(--acc);border-bottom-color:var(--acc)}
a:focus-visible{outline:2px solid var(--acc);outline-offset:2px}

/* ---------- buttons ---------- */
.btn{font:inherit;font-size:13px;line-height:1.3;background:transparent;color:var(--ink);
  border:1px solid var(--line2);padding:6px 10px;cursor:pointer;border-radius:2px;white-space:nowrap;
  text-transform:lowercase;letter-spacing:.01em;transition:border-color .12s,color .12s,background .12s}
.btn::before{content:"[ ";color:var(--mute)}
.btn::after{content:" ]";color:var(--mute)}
.btn:hover{border-color:var(--acc);color:var(--acc)}
.btn:hover::before,.btn:hover::after{color:var(--acc)}
.btn:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.btn.pri{background:var(--acc);border-color:var(--acc);color:#0b0d10;font-weight:700}
.btn.pri::before,.btn.pri::after{color:rgba(11,13,16,.55)}
.btn.pri:hover{background:var(--acc2);border-color:var(--acc2);color:#0b0d10}
.btn.pri:hover::before,.btn.pri:hover::after{color:rgba(11,13,16,.55)}
/* host an event: the second CTA carries an amber tint so it reads as an action rather than a
   link, without setting up a second filled button beside the primary. Scoped to .btn.host-btn
   so the footer's plain-text 'Host an event' link is untouched. */
.btn.host-btn{background:rgba(var(--acc-rgb),.12);border-color:rgba(var(--acc-rgb),.55);color:var(--acc)}
.btn.host-btn::before,.btn.host-btn::after{color:rgba(var(--acc-rgb),.6)}
.btn.host-btn:hover{background:rgba(var(--acc-rgb),.2);border-color:var(--acc);color:var(--acc)}
.btn.host-btn:hover::before,.btn.host-btn:hover::after{color:var(--acc)}
.lnk{font:inherit;background:none;border:0;padding:0;color:var(--acc);cursor:pointer;text-transform:lowercase}
.lnk::before{content:"[ "}
.lnk::after{content:" ]"}
.lnk:hover{color:var(--acc2);text-decoration:underline}
.lnk:focus-visible{outline:2px solid var(--acc);outline-offset:2px}

/* ---------- hero (slim) ---------- */
.hd{border-bottom:1px solid var(--line);background:linear-gradient(180deg,#0e1115 0%,var(--bg) 100%)}
.hd-row{display:flex;align-items:center;justify-content:space-between;gap:14px 24px;padding:16px 0 8px;flex-wrap:wrap}
.brand{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.mark{font-weight:700;font-size:18px;color:var(--bright);letter-spacing:.02em;line-height:1.2;text-wrap:balance}
.mark::before{content:"▓▒░ ";color:var(--acc);letter-spacing:-.05em}
.meta{color:var(--mute);font-size:12px}
.ctas{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.chip{display:none;align-items:center;gap:8px;border:1px solid var(--line2);padding:4px 10px 4px 5px;border-radius:2px;font-size:12px;text-transform:lowercase;color:var(--ink);
  font:inherit;font-size:12px;background:transparent;cursor:pointer;text-align:left;transition:border-color .12s}
.chip:hover{border-color:var(--acc)}
.chip:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.chip .av{display:inline-grid;place-items:center;width:20px;height:20px;background:var(--acc);color:#0b0d10;font-weight:700;font-size:11px;border-radius:2px;flex:none;text-transform:uppercase}
.chip .who{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chip > span:last-child{white-space:nowrap;flex:none}
.chip .wk-n{color:var(--acc);font-weight:700}
.logout-btn{display:none;font:inherit;font-size:11px;background:none;border:0;padding:4px 2px;color:var(--mute);cursor:pointer;text-transform:lowercase;white-space:nowrap}
.logout-btn::before{content:"[ "}
.logout-btn::after{content:" ]"}
.logout-btn:hover{color:var(--acc)}
.logout-btn:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
body.is-in .chip{display:inline-flex}
body.is-in .logout-btn{display:inline-block}
body.is-in .login-cta{display:none}
.prompt{padding:10px 0 0;color:var(--acc2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;letter-spacing:.01em}
.prompt .ps{color:var(--mute)}
.cursor{display:inline-block;width:8px;height:14px;background:var(--acc);vertical-align:-2px;margin-left:3px}
.desc{margin:0;padding:6px 0 0;max-width:100ch;color:var(--ink);line-height:1.55}
.desc+.desc{padding-top:2px}
.desc:last-of-type{padding-bottom:18px}
.desc::before{content:"> ";color:var(--mute)}
.desc.plain::before{content:none}
.desc em{font-style:normal;color:var(--bright)}

/* ---------- section headings ---------- */
.sec-h{display:flex;align-items:center;gap:12px;color:var(--mute);font-size:12px;margin:0 0 10px;white-space:nowrap}
.sec-h b{color:var(--bright);font-weight:700;letter-spacing:.04em;text-transform:lowercase}
.sec-h b::before{content:"── ";color:var(--dim);letter-spacing:0}
.sec-h::after{content:"";flex:1;border-top:1px solid var(--line2);opacity:.8}
.sec-h .hint{color:var(--dim);overflow:hidden;text-overflow:ellipsis;min-width:0;flex:0 1 auto}

/* ---------- "your week" agenda strip ---------- */
.week{padding:22px 0 14px}
.weekbox{position:relative;border:1px solid rgba(var(--acc-rgb),.28);
  /* warm tint: a faint amber wash strongest at the top-left, so the card reads as its own element */
  background:radial-gradient(700px 140px at 18% 0%,rgba(var(--acc-rgb),.09),rgba(var(--acc-rgb),0) 70%),#13140f;
  box-shadow:0 6px 24px rgba(0,0,0,.45)}
.weekscroll{overflow-x:auto;overscroll-behavior-x:contain;scrollbar-color:var(--line2) transparent}
.days{display:grid;grid-template-columns:repeat(7,minmax(154px,1fr));min-width:1078px}
.day{border-right:1px solid var(--line);min-height:168px;display:flex;flex-direction:column}
.day:last-child{border-right:0}
.day-h{display:flex;justify-content:space-between;align-items:baseline;padding:6px 10px;border-bottom:1px solid var(--line);font-size:12px;color:var(--mute);background:#0e1115}
.day-h b{color:var(--bright);font-weight:700;letter-spacing:.06em}
.day-b{flex:1;padding:8px;display:flex;flex-direction:column;gap:6px;
  background:repeating-linear-gradient(180deg,transparent 0 23px,rgba(255,255,255,.035) 23px 24px)}
.empty{color:var(--mute);font-size:12px;padding:2px 2px}
.ev{position:relative;border:1px solid var(--line2);border-left:2px solid var(--acc);background:#0e1115;padding:4px 7px 5px;font-size:12px;line-height:1.4;transition:border-color .12s,background .12s}
.ev:hover{background:var(--panel2);border-color:var(--acc)}
.ev .t{color:var(--acc)}
.ev .n{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;color:var(--bright);overflow:hidden;white-space:normal;margin-top:1px}
.ev .v{display:block;color:var(--mute);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ev .fl{display:flex;gap:6px;margin-top:3px;flex-wrap:wrap}
a.ev{display:block;color:inherit}   /* every card links to its event page */
.hb{display:inline-block;background:var(--acc);color:#0b0d10;font-size:10px;font-weight:700;padding:0 5px;line-height:15px;letter-spacing:.06em;text-transform:lowercase}
.hb.req{background:transparent;color:var(--acc);border:1px solid var(--acc);line-height:13px}   /* "requested": waiting on the host */
.ovm{display:inline-block;color:var(--warn);font-size:10px;line-height:15px;letter-spacing:.04em;font-weight:700}
.ev.ov{border-left-color:var(--warn)}
.ev.ghost{border-left-color:var(--dim);border-color:var(--line2);border-style:dashed;border-left-style:solid;color:var(--dim);background:transparent}
.ev.ghost .t,.ev.ghost .n,.ev.ghost .v{color:#59616c}
.ev.ghost .n{display:block;white-space:nowrap}
body:not(.is-in) .days{opacity:.85}
.weekgate{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:16px;
  background:radial-gradient(ellipse at center,rgba(11,13,16,.75) 0%,rgba(11,13,16,.3) 70%,rgba(11,13,16,0) 100%)}
body.is-in .weekgate{display:none}
.weekmsg{background:var(--bg);border:1px solid var(--line2);padding:12px 16px;max-width:600px;text-align:center;font-size:13px;line-height:1.6;
  box-shadow:0 0 0 4px rgba(11,13,16,.7),0 20px 50px rgba(0,0,0,.5)}
.weekmsg .ps{color:var(--acc)}
.weekmsg .lnk{margin-left:6px}

/* ---------- directory ---------- */
.dir{padding:18px 0 8px}
.ctrl{display:flex;flex-wrap:wrap;gap:8px 10px;align-items:center;margin-bottom:10px}
.search{display:flex;align-items:center;border:1px solid var(--line2);background:var(--panel);padding:0 10px;flex:1 1 280px;min-width:200px;transition:border-color .12s}
.search .ps{color:var(--acc);margin-right:8px;font-weight:700}
.search input{font:inherit;font-size:13px;background:transparent;border:0;color:var(--bright);padding:7px 0;width:100%;outline:0;min-width:0}
.search input::placeholder{color:var(--dim)}
.search input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}
.search:focus-within{border-color:var(--acc)}
.dayf{display:flex;gap:2px;flex-wrap:wrap}
.dayf button{font:inherit;font-size:12px;background:transparent;color:var(--mute);border:1px solid var(--line);padding:5px 7px;cursor:pointer;border-radius:2px;transition:color .12s,border-color .12s,background .12s}
.dayf button::before{content:"["}
.dayf button::after{content:"]"}
.dayf button:hover{color:var(--acc);border-color:var(--acc)}
.dayf button:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.dayf button[aria-pressed="true"]{color:#0b0d10;background:var(--acc);border-color:var(--acc);font-weight:700}
.typef select{font:inherit;font-size:12px;background:var(--panel);color:var(--ink);border:1px solid var(--line2);padding:5px 8px;border-radius:2px;cursor:pointer}
.typef select:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.count{color:var(--mute);font-size:12px;margin-left:auto;white-space:nowrap}
.count b{color:var(--bright);font-weight:500}

/* column customizer: "[ columns ]" button + a small terminal-style popover */
.colf{position:relative;display:flex;align-items:center;gap:6px}
.cols-btn{font:inherit;font-size:12px;background:var(--panel);color:var(--ink);border:1px solid var(--line2);padding:5px 8px;border-radius:2px;cursor:pointer;white-space:nowrap;transition:color .12s,border-color .12s}
.cols-btn::before{content:"[";color:var(--mute)}
.cols-btn::after{content:"]";color:var(--mute)}
.cols-btn:hover,.cols-btn[aria-expanded="true"]{color:var(--acc);border-color:var(--acc)}
.cols-btn:hover::before,.cols-btn:hover::after,.cols-btn[aria-expanded="true"]::before,.cols-btn[aria-expanded="true"]::after{color:var(--acc)}
.cols-btn.custom{color:var(--acc)}
.cols-btn:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.cols-status{color:var(--dim);font-size:11px;white-space:nowrap}
.cols-status:empty{display:none}
.colpop{position:absolute;top:calc(100% + 6px);left:0;z-index:30;width:320px;max-width:calc(100vw - 40px);background:var(--panel);border:1px solid var(--line);
  box-shadow:0 0 0 1px #000,0 18px 50px rgba(0,0,0,.6),0 0 40px rgba(var(--acc-rgb),.05);font-size:12px;outline:0}
.colpop.flip{left:auto;right:0}   /* set by app.js when a left-anchored popover would leave the viewport */
.colpop[hidden]{display:none}
.colpop:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.colpop-h{display:flex;align-items:center;gap:8px;padding:7px 10px;background:#0e1115;border-bottom:1px solid var(--line);color:var(--mute);font-size:11px;letter-spacing:.06em;text-transform:uppercase}
.colpop-h span::before{content:"$ ";color:var(--acc)}
.colpop-h .x{margin-left:auto;font:inherit;font-size:12px;background:none;border:0;color:var(--mute);cursor:pointer;padding:0;letter-spacing:0;text-transform:none}
.colpop-h .x:hover{color:var(--acc)}
.colpop-h .x:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.collist{list-style:none;margin:0;padding:0}
.colrow{display:flex;align-items:center;gap:8px;padding:6px 10px;border-bottom:1px solid var(--line);background:transparent;transition:background .1s}
.colrow:hover{background:var(--panel2)}
.colrow.drag{opacity:.35}
.colrow.over-before{box-shadow:inset 0 2px 0 var(--acc)}
.colrow.over-after{box-shadow:inset 0 -2px 0 var(--acc)}
.colrow .grip{color:var(--dim);cursor:grab;user-select:none;-webkit-user-select:none;letter-spacing:-.2em;padding-right:4px;flex:none}
.colrow .grip:hover{color:var(--acc)}
.colrow.drag .grip{cursor:grabbing}
/* the native box is kept for input, focus and screen readers; the visible "[x]" lives in the label */
.colrow input[type="checkbox"]{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.colrow label{display:flex;align-items:center;gap:8px;flex:1;min-width:0;cursor:pointer;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.colrow .cb{color:var(--mute);flex:none}
.colrow .cb::before{content:"[ ]"}
.colrow input:checked + label .cb{color:var(--acc);font-weight:700}
.colrow input:checked + label .cb::before{content:"[x]"}
.colrow input:focus-visible + label .cb{outline:2px solid var(--acc);outline-offset:1px}
.colrow input:disabled + label{cursor:default}
.colrow.off label{color:var(--mute)}
.colrow .lock{color:var(--dim);font-size:10px;letter-spacing:.06em;text-transform:lowercase}
.colrow .lock::before{content:"("}
.colrow .lock::after{content:")"}
.mv-g{display:flex;gap:2px;flex:none;margin-left:auto}
.mv{font:inherit;font-size:11px;background:none;border:1px solid transparent;color:var(--mute);cursor:pointer;padding:0 3px;border-radius:2px;line-height:18px;transition:color .1s,border-color .1s}
.mv::before{content:"["}
.mv::after{content:"]"}
.mv:hover{color:var(--acc);border-color:var(--line2)}
.mv:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.mv:disabled{color:var(--dim);opacity:.45;cursor:default;border-color:transparent}
.colpop-f{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 10px;color:var(--dim);font-size:11px;flex-wrap:wrap}
.colpop-f .hint{white-space:nowrap}
.colpop-f .lnk{font-size:11px}
.colreset:disabled{color:var(--dim);cursor:default}
.colreset:disabled:hover{color:var(--dim);text-decoration:none}

.tblbox{position:relative;border:1px solid var(--line);background:var(--panel)}
.tblscroll{position:relative;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-color:var(--line2) transparent}
table.dir-t{width:100%;min-width:1080px;border-collapse:collapse;table-layout:fixed;font-size:13px}
.dir-t th{text-align:left;font-weight:500;color:var(--mute);font-size:11px;letter-spacing:.06em;text-transform:uppercase;padding:0;border-bottom:1px solid var(--line2);background:#0e1115;white-space:nowrap}
.dir-t th .sort{font:inherit;color:inherit;background:none;border:0;padding:9px 10px;cursor:pointer;width:100%;text-align:left;letter-spacing:inherit;text-transform:inherit}
.dir-t th .sort:hover{color:var(--acc)}
.dir-t th .sort:focus-visible{outline:2px solid var(--acc);outline-offset:-2px}
.dir-t th .ar{color:var(--dim);margin-left:5px;font-size:8px;letter-spacing:-.15em;vertical-align:1px}
.dir-t th[aria-sort] .ar{color:var(--acc);font-size:9px;letter-spacing:0}
.dir-t th.c-act{padding:9px 10px}
.dir-t td{padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background .1s}
.dir-t tr.row:hover td{background:#191d24}
.dir-t tr.row:hover td:first-child{box-shadow:inset 2px 0 0 var(--acc)}
.dir-t tr.row:focus-within td{background:#191d24}
.dir-t tr.row.on td:first-child{box-shadow:inset 2px 0 0 var(--acc)}
.dir-t .ix{color:var(--dim);margin-right:10px;font-size:11px}
.dir-t .nm{color:var(--bright);font-weight:500}
.dir-t .note{color:var(--mute);font-size:11px;margin-left:8px}
.dir-t .tag.pend{color:var(--acc);margin-left:8px;font-size:11px}
.dir-t .dy{color:var(--mute)}
.dir-t .tm{color:var(--ink)}
.dir-t .tag{color:var(--mute)}
.dir-t .tag::before{content:"["}
.dir-t .tag::after{content:"]"}
.dir-t .c-act{text-align:right}
.dir-t td.c-act{white-space:normal}
.add,.rm,.host-b{white-space:nowrap}
.add{font:inherit;font-size:12px;background:none;border:1px solid transparent;color:var(--mute);padding:0 4px;cursor:pointer;border-radius:2px;transition:color .1s,border-color .1s}
.add:hover{color:var(--acc);border-color:var(--line2)}
.add:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.add.on{color:var(--acc);font-weight:700}
.host-b{display:inline-block;color:var(--acc);border:1px solid var(--acc);font-size:10px;letter-spacing:.06em;padding:0 5px;line-height:16px;text-transform:lowercase;font-weight:700;vertical-align:1px}
.rm{font:inherit;font-size:11px;background:none;border:1px solid transparent;color:var(--mute);padding:0 4px;margin-left:6px;cursor:pointer;border-radius:2px;transition:color .1s,border-color .1s}
.rm:hover{color:var(--warn);border-color:var(--line2)}
.rm:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.rm.arm{color:var(--warn);font-weight:700}
.dir-t .clearf{font-size:inherit}

/* logged-out gate over row 7+ */
.gatezone{position:absolute;left:0;right:0;top:var(--gtop,60%);bottom:0;z-index:2;display:flex;align-items:center;justify-content:center;padding:24px 16px;overflow:hidden;
  background:linear-gradient(180deg,rgba(11,13,16,.15) 0%,rgba(11,13,16,.62) 13%,rgba(11,13,16,.9) 34%,rgba(11,13,16,.97) 60%,var(--bg) 100%)}
body.is-in .gatezone{display:none}
.noise{position:absolute;inset:0;margin:0;padding:0 6px;color:var(--acc);opacity:.12;font:inherit;font-size:12px;line-height:1.35;white-space:pre;overflow:hidden;pointer-events:none;
  -webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 55%);mask-image:linear-gradient(180deg,transparent 0%,#000 55%)}
.gate{position:relative;z-index:1;border:1px solid var(--acc);background:var(--bg);padding:16px 22px 18px;max-width:520px;text-align:center;
  box-shadow:0 0 0 4px rgba(11,13,16,.9),0 0 60px rgba(var(--acc-rgb),.10)}
.gate .k{color:var(--acc);font-size:11px;letter-spacing:.14em;text-transform:uppercase;margin-bottom:6px}
.gate p{margin:0 0 12px;color:var(--ink)}
.more{display:none;padding:9px 12px;color:var(--mute);font-size:12px;border-top:1px solid var(--line);background:#0e1115}
body.is-in .more{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
.more-l{display:flex;gap:14px;flex-wrap:wrap}
.more .lnk{color:var(--acc)}
body:not(.is-in) .row.gated{user-select:none}
body:not(.is-in) .tblscroll{overflow-y:hidden}

/* ---------- about ---------- */
.about{position:relative;z-index:1;padding:30px 0 34px;border-top:1px solid var(--line);margin-top:22px;
  /* a readable scrim: the copy sits over the top of the lights canvas, dark at the top and open at the bottom */
  background:linear-gradient(180deg,rgba(11,13,16,.55) 0%,rgba(11,13,16,.28) 55%,rgba(11,13,16,0) 100%)}
.about-g{display:grid;grid-template-columns:300px minmax(0,1fr);gap:18px 40px}
.about h2{margin:0;font-size:16px;color:var(--bright);font-weight:700;line-height:1.4;letter-spacing:.01em}
.about h2::before{content:"## ";color:var(--acc)}
.about .sub{color:var(--mute);font-size:12px;margin-top:8px;line-height:1.7}
.about .sub span{display:block}
.about p{margin:0 0 12px;color:var(--ink)}
.about p:last-child{margin-bottom:0}
.about p.nos{border-left:2px solid var(--acc);padding-left:14px;color:var(--bright)}
.about h2,.about p,.about .sub{text-shadow:0 0 7px rgba(11,13,16,.95),0 1px 2px rgba(11,13,16,.9),0 0 2px rgba(11,13,16,.9)}

/* ---------- tail: the "Lights" city ----------
   One canvas (js/app.js buildScene) covers the whole .tail; the About copy, the .scene spacer
   (skyline + water) and the footer bar stack over it. The city exists only as points of light. */
.tail{position:relative;overflow:hidden;background:linear-gradient(180deg,#0b0d10 0%,#0b0d10 55%,#090b0e 100%)}
.scene-cv{position:absolute;inset:0;display:block;width:100%;height:100%;pointer-events:none;z-index:0}
.scene{position:relative;z-index:1;height:clamp(240px,23vw,320px);pointer-events:none}
.scene::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(180deg,rgba(255,255,255,.028) 0 1px,transparent 1px 3px);
  -webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 45%);mask-image:linear-gradient(180deg,transparent 0%,#000 45%)}
.foot-bar{position:relative;z-index:1;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 20px;padding:12px 20px;border-top:1px solid var(--line);color:var(--mute);font-size:12px;background:var(--bg)}
.foot-bar nav{display:flex;flex-wrap:wrap;gap:4px 14px}
.foot-bar nav a,.foot-bar nav .foot-lnk{color:var(--ink);border-bottom:0}
.foot-bar nav .foot-lnk{font:inherit;background:none;border:0;padding:0;cursor:pointer}
.foot-bar nav a::before,.foot-bar nav .foot-lnk::before{content:"> ";color:var(--dim)}
.foot-bar nav a:hover,.foot-bar nav .foot-lnk:hover{color:var(--acc)}
.foot-bar nav .foot-lnk:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.tail .foot-bar{border-top-color:rgba(35,40,48,.75);background:rgba(9,11,14,.72)}   /* translucent over the lights */

/* ---------- modal: terminal window ---------- */
.modal{position:fixed;inset:0;z-index:60;display:none;align-items:center;justify-content:center;padding:20px;overflow-y:auto;-webkit-overflow-scrolling:touch;background:repeating-linear-gradient(180deg,rgba(255,255,255,.025) 0 1px,transparent 1px 3px),rgba(4,5,7,.74);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.modal.open{display:flex}
.term{width:100%;max-width:470px;margin:auto;background:var(--panel);border:1px solid var(--line2);box-shadow:0 30px 80px rgba(0,0,0,.65),0 0 0 1px #000,0 0 80px rgba(var(--acc-rgb),.06);font-size:13px;outline:0}
.term-bar{display:flex;align-items:center;gap:6px;padding:8px 12px;background:#0e1115;border-bottom:1px solid var(--line)}
.term-bar .d{width:10px;height:10px;border-radius:50%;background:transparent;border:1px solid var(--dim);display:inline-block}
.term-bar .d.d2{background:var(--acc);border-color:var(--acc)}
.term-bar .tt{margin-left:auto;color:var(--mute);font-size:11px;letter-spacing:.04em}
.term-bar .x{font:inherit;font-size:12px;background:none;border:0;color:var(--mute);cursor:pointer;padding:0 0 0 10px}
.term-bar .x:hover{color:var(--acc)}
.term-bar .x:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.term-body{padding:18px 20px 16px}
.term h2{margin:0 0 14px;font-size:15px;color:var(--bright);font-weight:700;letter-spacing:.01em}
.term h2 .ps{color:var(--acc)}
.opt{margin:0;padding:12px 0}
.opt.first{border-top:1px dashed var(--line2)}
.opt-h{color:var(--mute);font-size:11px;margin-bottom:7px;letter-spacing:.04em}
.err{display:none;color:var(--warn);font-size:11px;margin-top:8px;line-height:1.5}
.err.show{display:block}
.err::before{content:"!! "}
.term input[aria-invalid="true"],.term select[aria-invalid="true"]{border-color:var(--warn)}
.term button[disabled]{opacity:.55;cursor:progress}
.line{display:flex;align-items:center;gap:8px}
.line label{color:var(--acc);white-space:nowrap;font-weight:700}
.line input{flex:1;min-width:0;font:inherit;font-size:13px;background:var(--bg);border:1px solid var(--line2);color:var(--bright);padding:6px 8px;border-radius:2px}
.line input::placeholder{color:var(--dim)}
.line input:focus{outline:0;border-color:var(--acc);box-shadow:0 0 0 2px var(--accdim)}
.captcha{margin-top:10px;min-height:0}   /* Turnstile mounts here (js/auth.supabase.js); [hidden] otherwise */
.captcha[hidden]{display:none}
.linksent{display:none;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px;color:var(--mute);font-size:11px;line-height:1.5}
form.step-sent .linksent{display:flex}
form.step-sent .line{display:none}
.linksent .to{color:var(--bright)}
.fn{color:var(--mute);font-size:11px;margin:4px 0 0;border-top:1px solid var(--line);padding-top:10px;line-height:1.6}
.fn::before{content:"# ";color:var(--dim)}
/* contact modal (#contact-modal, injected by js/shell.js): the same window, three stacked lines */
.cform .line+.line{margin-top:8px}
.cform .line label{flex:0 0 9ch}
.line.ta{align-items:flex-start}
.line.ta label{padding-top:7px}
.line textarea{flex:1;min-width:0;font:inherit;font-size:13px;line-height:1.5;background:var(--bg);border:1px solid var(--line2);color:var(--bright);padding:6px 8px;border-radius:2px;resize:vertical;min-height:112px}
.line textarea::placeholder{color:var(--dim)}
.line textarea:focus{outline:0;border-color:var(--acc);box-shadow:0 0 0 2px var(--accdim)}
.term textarea[aria-invalid="true"]{border-color:var(--warn)}
.cnt{color:var(--mute);font-size:11px;margin-top:6px;text-align:right;white-space:nowrap}
.cnt.is-ok{color:var(--acc)}
.cnt.is-near{color:var(--acc2)}
.cnt.is-over{color:var(--warn)}
/* honeypot: off-screen for people and readers, still a field for bots */
.hp{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.cform .fn{margin-top:14px}
.csent{padding:12px 0 0;border-top:1px dashed var(--line2)}
.csent-h{color:var(--bright);font-weight:700}
.csent-h .ps{color:var(--acc)}
.csent p{margin:8px 0 0;color:var(--ink)}
/* a row of actions under a form (auth.html) */
.fact{display:flex;align-items:center;gap:10px;margin-top:14px;flex-wrap:wrap}

/* ---------- responsive ---------- */
@media (max-width:900px){
  .about-g{grid-template-columns:1fr}
}
@media (max-width:640px){
  .scene{height:clamp(200px,52vw,260px)}
  .tail .foot-bar{padding:12px 16px}
  .hd-row{flex-direction:column;align-items:stretch;gap:10px}
  .ctas{flex-direction:column;align-items:stretch}
  .ctas .btn{width:100%;text-align:center}
  .chip{justify-content:center}
  .logout-btn{text-align:center}
  .count{margin-left:0}
  /* the popover anchors to the toolbar, not the button, so it always fits the screen */
  .ctrl{position:relative}
  .colf{position:static}
  .colpop,.colpop.flip{left:0;right:0;width:auto;max-width:none;top:calc(100% + 4px)}
  .colpop-f .hint{white-space:normal}
  .weekmsg{font-size:12px}
  .line{flex-wrap:wrap}
  .line .btn{width:100%;text-align:center}
  .cform .line label{flex:0 0 100%}
  .line.ta label{padding-top:0}
  .fact .btn{width:100%;text-align:center}
}

/* ---------- motion (guarded) ---------- */
@media (prefers-reduced-motion:no-preference){
  .cursor{animation:blink 1.1s steps(2,start) infinite}
  .ev{animation:fade-in .18s ease-out}
  @keyframes blink{0%,49%{opacity:1}50%,100%{opacity:0}}
  @keyframes fade-in{from{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}
}

/* twinkle: when motion is allowed the static noise field is replaced by a canvas that draws the same
   glyph grid and lets ~2% of glyphs flicker (js/app.js "twinkle"). A <canvas> is a replaced element:
   inset alone does not stretch it, hence the explicit width/height. */
.noise-cv{position:absolute;inset:0;width:100%;height:100%;display:none;pointer-events:none}
@media (prefers-reduced-motion:no-preference){.gatezone .noise{display:none}.noise-cv{display:block}}
/* the scene's scanlines are part of the motion treatment; a static frame goes without them */
@media (prefers-reduced-motion:reduce){.scene::after{display:none}}
