{"id":7,"date":"2026-08-03T00:41:41","date_gmt":"2026-08-03T00:41:41","guid":{"rendered":"https:\/\/thecoldpourop.wpenginepowered.com\/?page_id=7"},"modified":"2026-08-03T02:51:36","modified_gmt":"2026-08-03T02:51:36","slug":"home","status":"publish","type":"page","link":"https:\/\/thecoldpour-operation35.com\/","title":{"rendered":"Home"},"content":{"rendered":"<div id=\"cs-content\" class=\"cs-content\"><div class=\"x-section e7-e1 m7-0\"><div class=\"x-row e7-e2 m7-1 m7-2\"><div class=\"x-row-inner\"><div class=\"x-col e7-e3 m7-3\"><!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>The Cold Pour: Operation (Nate's Turning) 35 \u2014 Classified<\/title>\n<meta name=\"description\" content=\"The Cold Pour: Operation (Nate's Turning) 35. Two blocs, one house, classified cocktails. 1831 Beverly Place.\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;1,400&family=PT+Sans+Narrow:wght@400;700&display=swap\" rel=\"stylesheet\">\n<style>\n:root{\n  --void:#0A0C0B;\n  --void-2:#0F1210;\n  --amber:#F6B02C;\n  --amber-dim:#8A6318;\n  --east:#DC2F28;\n  --west:#4E9BD1;\n  --neutral:#9A9384;\n  --paper:#DFD6BF;\n  --ink:#16130D;\n  --ink-soft:#4B4534;\n  --mono:'IBM Plex Mono',ui-monospace,'Courier New',monospace;\n  --narrow:'PT Sans Narrow','Arial Narrow',sans-serif;\n}\n*{box-sizing:border-box;margin:0;padding:0}\nhtml{-webkit-text-size-adjust:100%}\nhtml,body{overflow-x:clip}\n@supports not (overflow:clip){html{overflow-x:hidden}}\n@media(pointer:fine){html{scroll-behavior:smooth}}\nbody{background:var(--void);color:var(--amber);font-family:var(--mono);font-size:16px;line-height:1.6}\n::selection{background:var(--amber);color:var(--void)}\n:focus-visible{outline:2px solid var(--amber);outline-offset:3px}\n\n\/* ---- CRT atmosphere ---- *\/\n.crt{position:fixed;inset:0;pointer-events:none;z-index:60}\n.crt::before{content:\"\";position:absolute;inset:0;background:repeating-linear-gradient(to bottom,rgba(0,0,0,.32) 0 1px,transparent 1px 3px);opacity:.55}\n.crt::after{content:\"\";position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 56%,rgba(0,0,0,.5) 100%)}\n.flicker{position:fixed;inset:0;pointer-events:none;z-index:61;background:var(--amber);opacity:0;mix-blend-mode:overlay;animation:flick 7s steps(1) infinite}\n@keyframes flick{0%,96%{opacity:0}97%{opacity:.035}98%{opacity:0}99%{opacity:.02}100%{opacity:0}}\n\n\/* ---- Console hero ---- *\/\n.console{position:relative;z-index:2;min-height:100vh;min-height:100svh;display:flex;flex-direction:column;justify-content:center;\n  padding:clamp(20px,5vw,64px) clamp(18px,5vw,64px) clamp(70px,9vw,96px);\n  background:radial-gradient(ellipse 80% 60% at 50% 45%,rgba(246,176,44,.07),transparent 70%),var(--void)}\n.rail{position:absolute;top:0;left:0;right:0;display:flex;justify-content:space-between;gap:16px;\n  padding:clamp(14px,3vw,26px) clamp(18px,5vw,64px);font-size:.66rem;letter-spacing:.22em;color:var(--amber-dim);text-transform:uppercase}\n.rail span{white-space:nowrap}\n.rail .blink{animation:blink 1.1s steps(1) infinite}\n@keyframes blink{50%{opacity:0}}\n.boot{min-height:5.4em;font-size:clamp(.68rem,1.6vw,.82rem);letter-spacing:.1em;color:var(--amber-dim);margin-bottom:clamp(14px,3vw,26px)}\n.boot p{white-space:pre-wrap}\n.headline{font-weight:600;font-size:clamp(1.55rem,7.4vw,5.4rem);line-height:1.02;letter-spacing:.04em;color:var(--amber);\n  text-shadow:0 0 18px rgba(246,176,44,.42),0 0 60px rgba(246,176,44,.14);word-break:break-word;min-height:1.05em}\n.sub{margin-top:clamp(14px,2.6vw,22px);font-family:var(--narrow);font-weight:700;text-transform:uppercase;\n  font-size:clamp(.92rem,2.5vw,1.5rem);letter-spacing:.3em;color:var(--amber)}\n.sub small{display:block;font-family:var(--mono);font-weight:400;font-size:.55em;letter-spacing:.24em;color:var(--amber-dim);margin-top:10px}\n.reveal{opacity:0;transform:translateY(10px);transition:opacity .7s ease,transform .7s ease}\n.reveal.on{opacity:1;transform:none}\n.vitals{margin-top:clamp(28px,5vw,52px);display:grid;gap:1px;grid-template-columns:repeat(3,1fr);\n  background:rgba(246,176,44,.22);border:1px solid rgba(246,176,44,.22)}\n.vital{background:var(--void);padding:clamp(14px,2.6vw,22px)}\n.vital dt{font-size:.6rem;letter-spacing:.26em;color:var(--amber-dim);text-transform:uppercase;margin-bottom:8px}\n.vital dd{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:clamp(1.05rem,2.9vw,1.9rem);line-height:1.15;color:var(--amber)}\n.vital dd small{display:block;font-family:var(--mono);font-weight:400;text-transform:none;font-size:.68rem;letter-spacing:.12em;color:var(--amber-dim);margin-top:6px}\n@media(max-width:640px){.vitals{grid-template-columns:1fr}}\n.scrolldown{position:absolute;bottom:clamp(18px,4vw,34px);left:50%;transform:translateX(-50%);font-size:.62rem;letter-spacing:.28em;\n  color:var(--amber-dim);text-transform:uppercase;text-decoration:none;display:flex;flex-direction:column;align-items:center;gap:6px}\n.scrolldown b{font-weight:400;animation:bob 2s ease-in-out infinite}\n@keyframes bob{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}\n\n\/* ---- Audio control ---- *\/\n.audiobar{position:fixed;right:clamp(12px,3vw,26px);bottom:clamp(12px,3vw,26px);z-index:62;display:flex;gap:8px;align-items:flex-end}\n.audio-hint{position:absolute;right:0;bottom:calc(100% + 8px);width:max-content;max-width:62vw;\n  background:rgba(10,12,11,.94);border:1px solid rgba(246,176,44,.35);color:var(--amber-dim);\n  font-size:.58rem;letter-spacing:.14em;text-transform:uppercase;padding:8px 10px;line-height:1.5}\n.audio-btn{background:rgba(10,12,11,.86);border:1px solid rgba(246,176,44,.4);color:var(--amber-dim);cursor:pointer;\n  font-family:var(--mono);font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;padding:9px 12px;\n  display:flex;align-items:center;gap:8px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}\n.audio-btn:hover{border-color:var(--amber);color:var(--amber)}\n.audio-btn .dot{width:7px;height:7px;border-radius:50%;background:rgba(246,176,44,.3);flex:none}\n.audio-btn.on{color:var(--amber);border-color:var(--amber)}\n.audio-btn.on .dot{background:var(--amber);box-shadow:0 0 8px var(--amber);animation:pulse 2.4s ease-in-out infinite}\n@keyframes pulse{50%{opacity:.35}}\n@media print{.audiobar{display:none!important}}\n\n\/* ---- Iron curtain seam ---- *\/\n.curtain{position:relative;z-index:3;background:var(--east);color:#0A0C0B;border-top:2px solid #0A0C0B;border-bottom:2px solid #0A0C0B;overflow:hidden}\n.curtain .track{display:flex;width:max-content;animation:slide 46s linear infinite}\n.curtain .track span{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:clamp(.78rem,1.9vw,1rem);letter-spacing:.3em;padding:9px 26px;white-space:nowrap}\n@keyframes slide{to{transform:translateX(-50%)}}\n\n\/* ---- Shared section furniture ---- *\/\n.paper{position:relative;z-index:3;color:var(--ink);\n  background:repeating-linear-gradient(112deg,rgba(0,0,0,.017) 0 2px,transparent 2px 5px),\n    radial-gradient(ellipse 70% 50% at 20% 0%,rgba(255,255,255,.35),transparent 60%),var(--paper)}\n.dark{position:relative;z-index:3;background:var(--void-2);color:var(--amber);border-top:2px solid var(--ink);border-bottom:2px solid var(--ink)}\n.wrap{max-width:1080px;margin:0 auto;padding:clamp(46px,8vw,100px) clamp(20px,5vw,56px)}\n.eyebrow{font-size:.63rem;letter-spacing:.3em;text-transform:uppercase;opacity:.75;display:flex;align-items:center;gap:12px;margin-bottom:clamp(14px,3vw,22px)}\n.eyebrow::after{content:\"\";flex:1;height:1px;background:currentColor;opacity:.4}\nh2{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:clamp(1.9rem,6vw,3.6rem);line-height:.98;margin-bottom:clamp(16px,3vw,26px)}\nh2 em{font-style:normal;display:block;font-size:.44em;letter-spacing:.18em;opacity:.6;margin-top:10px}\n.dark h2{color:var(--amber)}\n.dark h2 em{color:var(--amber-dim);opacity:1}\n.lede{font-size:clamp(.94rem,2vw,1.08rem);max-width:64ch}\n.lede + .lede{margin-top:1em}\n.dark .lede{color:rgba(246,176,44,.72)}\n\n\/* ---- Bloc cards ---- *\/\n.blocs{display:grid;grid-template-columns:1fr 1fr;gap:clamp(16px,3vw,28px);margin-top:clamp(32px,6vw,52px)}\n@media(max-width:720px){.blocs{grid-template-columns:1fr}}\n.bloc{border:2px solid var(--ink);padding:clamp(18px,3vw,30px);background:rgba(255,255,255,.16)}\n.bloc.east{border-color:var(--east)}\n.bloc.west{border-color:var(--west)}\n.bloc .mark{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:clamp(1.15rem,3vw,1.6rem);letter-spacing:.06em;line-height:1.1}\n.bloc.east .mark{color:var(--east)}\n.bloc.west .mark{color:var(--west)}\n.bloc .cyr{font-size:.7rem;letter-spacing:.24em;color:var(--ink-soft);text-transform:uppercase;margin-top:8px}\n.bloc p.body{margin-top:14px;font-size:.92rem}\n.swatches{display:flex;gap:6px;margin-top:16px}\n.swatches i{width:100%;height:14px;border:1px solid rgba(0,0,0,.35)}\n.bloc ul{margin-top:14px;padding-left:0;list-style:none;font-size:.78rem;letter-spacing:.06em;color:var(--ink-soft);text-transform:uppercase}\n.bloc li{padding:5px 0;border-bottom:1px dotted rgba(22,19,13,.25)}\n.bloc li:last-child{border-bottom:0}\n.zone{margin-top:clamp(16px,3vw,28px);border:2px dashed var(--ink);padding:clamp(16px,3vw,26px);text-align:center}\n.zone b{font-family:var(--narrow);font-weight:700;text-transform:uppercase;letter-spacing:.2em;font-size:1.2rem;display:block;margin-bottom:8px}\n.zone p{font-size:.9rem;max-width:56ch;margin:0 auto;color:var(--ink-soft)}\n\n\/* ---- Role categories ---- *\/\n.cats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1px;margin-top:clamp(30px,5vw,46px);background:rgba(22,19,13,.35);border:1px solid rgba(22,19,13,.35)}\n.cat{background:var(--paper);padding:clamp(16px,2.6vw,22px)}\n.cat h3{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:1.3rem;letter-spacing:.1em;margin-bottom:8px}\n.cat p{font-size:.82rem;color:var(--ink-soft)}\n\n\/* ---- Terminal ---- *\/\n.terminal{border:1px solid rgba(246,176,44,.3);background:linear-gradient(180deg,rgba(246,176,44,.05),transparent 60%),var(--void);padding:clamp(20px,4vw,38px);margin-top:clamp(26px,4vw,40px)}\n.terminal .prompt{font-size:.66rem;letter-spacing:.24em;text-transform:uppercase;color:var(--amber-dim);margin-bottom:14px}\n.entry{display:flex;gap:10px;flex-wrap:wrap}\n.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}\n.entry input{flex:1 1 260px;min-width:0;background:transparent;border:0;border-bottom:2px solid rgba(246,176,44,.45);color:var(--amber);\n  font-family:var(--mono);font-size:clamp(1rem,3vw,1.5rem);padding:8px 2px;letter-spacing:.06em}\n.entry input::placeholder{color:rgba(246,176,44,.3)}\n.entry input:focus{outline:0;border-bottom-color:var(--amber)}\n.btn-solid{background:var(--amber);color:var(--void);border:0;cursor:pointer;font-family:var(--narrow);font-weight:700;\n  text-transform:uppercase;font-size:.95rem;letter-spacing:.18em;padding:12px 22px}\n.btn-solid:hover{background:#fff}\n.note{margin-top:14px;font-size:.72rem;letter-spacing:.1em;color:var(--amber-dim)}\n.note.error{color:var(--east)}\n\n\/* ---- Dossier ---- *\/\n.dossier{margin-top:clamp(22px,4vw,34px);display:none}\n.dossier.on{display:block}\n.file{background:var(--paper);color:var(--ink);border:1px solid rgba(0,0,0,.35);\n  box-shadow:0 22px 0 -12px rgba(0,0,0,.25),0 40px 0 -24px rgba(0,0,0,.16);padding:clamp(20px,4vw,40px);position:relative;overflow:hidden}\n.file::before{content:\"\";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(96deg,rgba(0,0,0,.02) 0 2px,transparent 2px 6px)}\n.file-top{display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;border-bottom:2px solid var(--ink);padding-bottom:12px;\n  font-size:.62rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-soft)}\n.stamp{display:inline-block;margin-top:clamp(16px,3vw,24px);border:3px solid currentColor;padding:6px 16px 5px;\n  font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:clamp(1rem,3vw,1.5rem);letter-spacing:.14em;transform:rotate(-2.5deg);opacity:.92}\n.stamp.east{color:var(--east)}\n.stamp.west{color:var(--west)}\n.rolename{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:clamp(1.6rem,5.4vw,3.1rem);line-height:1.02;margin-top:clamp(14px,2.6vw,20px)}\n.rolecyr{font-size:.78rem;letter-spacing:.2em;color:var(--ink-soft);margin-top:8px;text-transform:uppercase}\n.rows{margin-top:clamp(20px,3.4vw,30px);display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:rgba(22,19,13,.3);border:1px solid rgba(22,19,13,.3)}\n.rows div{background:var(--paper);padding:12px 14px}\n.rows dt{font-size:.58rem;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:5px}\n.rows dd{font-family:var(--narrow);font-weight:700;font-size:1rem;letter-spacing:.06em;text-transform:uppercase}\n@media(max-width:760px){.rows{grid-template-columns:1fr 1fr}}\n@media(max-width:420px){.rows{grid-template-columns:1fr}}\n.field{margin-top:clamp(20px,3.4vw,28px)}\n.field h3{font-size:.6rem;letter-spacing:.24em;text-transform:uppercase;color:var(--ink-soft);font-weight:400;margin-bottom:8px}\n.field p{font-size:.95rem;max-width:62ch}\n.field p.mono{font-family:var(--mono);font-size:.88rem}\n.file-actions{margin-top:clamp(22px,4vw,32px);display:flex;gap:10px;flex-wrap:wrap;border-top:1px dashed rgba(22,19,13,.4);padding-top:18px}\n.btn-ghost{background:transparent;border:1.5px solid currentColor;color:inherit;cursor:pointer;font-family:var(--mono);\n  font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;padding:10px 16px}\n.file .btn-ghost:hover{background:var(--ink);color:var(--paper)}\n.dark .btn-ghost:hover{background:var(--amber);color:var(--void)}\n\n\/* ---- RSVP ---- *\/\n.rsvp{margin-top:clamp(24px,4vw,36px);border:1px solid rgba(246,176,44,.3);\n  background:linear-gradient(180deg,rgba(246,176,44,.05),transparent 60%),var(--void);padding:clamp(20px,4vw,34px)}\n.rsvp .prompt{font-size:.66rem;letter-spacing:.24em;text-transform:uppercase;color:var(--amber-dim);margin-bottom:12px}\n.rsvp-copy{font-size:.92rem;color:rgba(246,176,44,.75);max-width:56ch}\n.rsvp input#rsvp-msg{width:100%;margin-top:18px;background:transparent;border:0;border-bottom:2px solid rgba(246,176,44,.4);\n  color:var(--amber);font-family:var(--mono);font-size:1rem;padding:9px 2px;letter-spacing:.04em}\n.rsvp input#rsvp-msg::placeholder{color:rgba(246,176,44,.3)}\n.rsvp input#rsvp-msg:focus{outline:0;border-bottom-color:var(--amber)}\n.rsvp-btns{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}\n.rsvp .btn-ghost{color:var(--amber-dim)}\n.rsvp .btn-ghost:hover{background:var(--amber);color:var(--void)}\n.rsvp .note.sent{color:#7BC96F}\n\n\/* ---- Bar ---- *\/\n.bar{margin-top:clamp(30px,5vw,48px);display:grid;gap:clamp(24px,4vw,40px)}\n.pourgroup > h3{font-family:var(--narrow);font-weight:700;text-transform:uppercase;letter-spacing:.16em;font-size:1.15rem;\n  border-bottom:2px solid currentColor;padding-bottom:8px;margin-bottom:4px}\n.pourgroup.east > h3{color:var(--east)}\n.pourgroup.west > h3{color:var(--west)}\n.pourgroup.neutral > h3{color:var(--ink-soft)}\n.pour{display:grid;grid-template-columns:minmax(150px,1fr) 2.2fr;gap:clamp(10px,3vw,28px);padding:16px 0;border-bottom:1px dotted rgba(22,19,13,.3)}\n@media(max-width:600px){.pour{grid-template-columns:1fr;gap:6px}}\n.pour b{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:1.25rem;letter-spacing:.04em;line-height:1.15}\n.pour span{font-size:.9rem;color:var(--ink-soft)}\n.provisions{margin-top:clamp(28px,5vw,44px);border:2px solid var(--ink);padding:clamp(18px,3vw,28px)}\n.provisions h3{font-family:var(--narrow);font-weight:700;text-transform:uppercase;letter-spacing:.16em;font-size:1.15rem;margin-bottom:10px}\n.provisions p{font-size:.92rem;color:var(--ink-soft)}\n\n\/* ---- Scoreboard ---- *\/\n.events{margin-top:clamp(28px,5vw,44px);border-top:1px solid rgba(246,176,44,.28)}\n.event{display:grid;grid-template-columns:1.1fr 1.5fr auto;gap:clamp(10px,3vw,24px);align-items:baseline;\n  padding:clamp(16px,3vw,22px) 0;border-bottom:1px solid rgba(246,176,44,.28)}\n@media(max-width:720px){.event{grid-template-columns:1fr;gap:6px}}\n.event b{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:clamp(1.2rem,3.4vw,1.7rem);letter-spacing:.04em;color:var(--amber)}\n.event span{font-size:.88rem;color:rgba(246,176,44,.7)}\n.event i{font-style:normal;font-size:.6rem;letter-spacing:.2em;text-transform:uppercase;color:var(--void);background:var(--amber-dim);\n  padding:5px 9px;white-space:nowrap;justify-self:start}\n.event i.champs{background:var(--amber)}\n.lots{margin-top:clamp(28px,5vw,46px);border:1px solid rgba(246,176,44,.35);padding:clamp(18px,3vw,30px)}\n.lots h3{font-family:var(--narrow);font-weight:700;text-transform:uppercase;letter-spacing:.16em;font-size:1.25rem;color:var(--amber);margin-bottom:6px}\n.lots > p{font-size:.9rem;color:rgba(246,176,44,.7);max-width:60ch;margin-bottom:18px}\n\n\/* ---- Standing orders ---- *\/\n.orders{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:clamp(16px,3vw,28px);margin-top:clamp(34px,6vw,52px)}\n.order h3{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:1.15rem;letter-spacing:.06em;\n  border-bottom:2px solid var(--ink);padding-bottom:8px;margin-bottom:10px}\n.order p{font-size:.88rem}\n\nfooter{background:var(--void);color:var(--amber-dim);position:relative;z-index:3;padding:clamp(28px,5vw,44px) clamp(20px,5vw,56px);\n  font-size:.64rem;letter-spacing:.22em;text-transform:uppercase;display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap}\nfooter button{background:none;border:0;color:inherit;font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;opacity:.55}\nfooter button:hover{opacity:1}\n\n\/* ---- HQ roster panel ---- *\/\n.hq{position:fixed;inset:0;z-index:80;background:var(--void);color:var(--amber);overflow-y:auto;\n  -webkit-overflow-scrolling:touch;overscroll-behavior:contain;display:none}\n.hq.on{display:block}\n.hq-inner{max-width:1180px;margin:0 auto;padding:clamp(20px,4vw,44px)}\n.hq-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;\n  border-bottom:1px solid rgba(246,176,44,.3);padding-bottom:16px;margin-bottom:22px}\n.hq-top h2{font-size:clamp(1.4rem,4vw,2.2rem);margin:0;color:var(--amber)}\n.hq-top p{font-size:.66rem;letter-spacing:.22em;text-transform:uppercase;color:var(--amber-dim);margin-top:8px}\n.hq textarea{width:100%;min-height:150px;background:#000;border:1px solid rgba(246,176,44,.35);color:var(--amber);\n  font-family:var(--mono);font-size:.9rem;line-height:1.7;padding:14px;resize:vertical}\n.hq textarea:focus{outline:0;border-color:var(--amber)}\n.hq-label{font-size:.62rem;letter-spacing:.24em;text-transform:uppercase;color:var(--amber-dim);margin-bottom:8px}\n.hq-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}\n.hq-clash{margin-top:22px;padding:12px 14px;border:1px solid;font-size:.68rem;letter-spacing:.14em;text-transform:uppercase}\n.hq-clash.good{border-color:rgba(123,201,111,.5);color:#7BC96F}\n.hq-clash.bad{border-color:var(--east);color:var(--east)}\n.tally{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:1px;background:rgba(246,176,44,.28);\n  border:1px solid rgba(246,176,44,.28);margin-top:26px}\n.tally div{background:var(--void);padding:12px 14px}\n.tally dt{font-size:.55rem;letter-spacing:.22em;text-transform:uppercase;color:var(--amber-dim);margin-bottom:6px}\n.tally dd{font-family:var(--narrow);font-weight:700;font-size:1.5rem;letter-spacing:.04em}\n.tally .e{color:var(--east)}\n.tally .w{color:var(--west)}\n.tablewrap{margin-top:22px;overflow-x:auto;border:1px solid rgba(246,176,44,.28)}\ntable{border-collapse:collapse;width:100%;min-width:760px;font-size:.8rem}\nth{text-align:left;font-weight:400;font-size:.58rem;letter-spacing:.2em;text-transform:uppercase;color:var(--amber-dim);\n  padding:12px 14px;border-bottom:1px solid rgba(246,176,44,.3);background:#000;position:sticky;top:0}\ntd{padding:11px 14px;border-bottom:1px solid rgba(246,176,44,.14);vertical-align:top}\ntr:last-child td{border-bottom:0}\ntd.nm{font-family:var(--narrow);font-weight:700;font-size:1rem;text-transform:uppercase;letter-spacing:.04em}\n.chip{display:inline-block;font-size:.58rem;letter-spacing:.16em;text-transform:uppercase;padding:4px 8px;border:1px solid currentColor}\n.chip.east{color:var(--east)}\n.chip.west{color:var(--west)}\n.chip.pinned::after{content:\" \u00b7pinned\"}\n.chip.locked::after{content:\" \u00b7locked\"}\n.flip{background:none;border:1px solid rgba(246,176,44,.4);color:var(--amber-dim);cursor:pointer;font-family:var(--mono);\n  font-size:.58rem;letter-spacing:.14em;text-transform:uppercase;padding:6px 10px;white-space:nowrap}\n.flip:hover{border-color:var(--amber);color:var(--amber)}\n.hq-help{margin-top:22px;font-size:.74rem;color:var(--amber-dim);max-width:74ch}\n.hq-help code{color:var(--amber);font-size:.9em}\n.hq-empty{margin-top:26px;padding:40px 20px;text-align:center;border:1px dashed rgba(246,176,44,.3);color:var(--amber-dim);font-size:.8rem;letter-spacing:.12em}\n\n\/* ---- HQ tabs ---- *\/\n.hq-topbtns{display:flex;gap:8px;flex-wrap:wrap}\n.hq-tabs{display:flex;gap:1px;background:rgba(246,176,44,.28);border:1px solid rgba(246,176,44,.28);margin-bottom:26px;flex-wrap:wrap}\n.tab{flex:1 1 130px;background:var(--void);border:0;color:var(--amber-dim);cursor:pointer;font-family:var(--narrow);\n  font-weight:700;text-transform:uppercase;letter-spacing:.16em;font-size:.9rem;padding:13px 10px}\n.tab.on{background:var(--amber);color:var(--void)}\n.tab:not(.on):hover{color:var(--amber)}\n.tabpanel{display:none}\n.tabpanel.on{display:block}\n\n\/* ---- Scoreboard ---- *\/\n.medal{display:grid;grid-template-columns:1fr auto 1fr;gap:1px;background:rgba(246,176,44,.28);border:1px solid rgba(246,176,44,.28)}\n.medal div{background:var(--void);padding:clamp(16px,3vw,26px);text-align:center}\n.medal dt{font-size:.6rem;letter-spacing:.24em;text-transform:uppercase;color:var(--amber-dim);margin-bottom:10px}\n.medal dd{font-family:var(--narrow);font-weight:700;font-size:clamp(2.4rem,9vw,4.6rem);line-height:1}\n.medal .east dd{color:var(--east)}\n.medal .west dd{color:var(--west)}\n.medal .vs{display:flex;align-items:center;justify-content:center;color:var(--amber-dim);font-size:.7rem;letter-spacing:.2em;padding:0 clamp(10px,3vw,26px)}\n.leader{margin-top:14px;font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--amber-dim);text-align:center}\n.srow{display:grid;grid-template-columns:1.4fr auto;gap:clamp(10px,3vw,22px);align-items:center;\n  padding:16px 0;border-bottom:1px solid rgba(246,176,44,.2)}\n@media(max-width:640px){.srow{grid-template-columns:1fr;gap:12px}}\n.srow .meta b{display:block;font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:1.25rem;letter-spacing:.04em;color:var(--amber)}\n.srow .meta span{font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;color:var(--amber-dim)}\n.btnset{display:flex;gap:6px;flex-wrap:wrap}\n.btnset button{background:transparent;border:1px solid rgba(246,176,44,.35);color:var(--amber-dim);cursor:pointer;\n  font-family:var(--mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;padding:9px 12px;white-space:nowrap}\n.btnset button:hover{border-color:var(--amber);color:var(--amber)}\n.btnset button.win-e{background:var(--east);border-color:var(--east);color:#fff}\n.btnset button.win-w{background:var(--west);border-color:var(--west);color:#08131c}\n.btnset button.win-s{background:var(--amber);border-color:var(--amber);color:var(--void)}\n\n\/* ---- Run of show ---- *\/\n.runbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:22px}\n.runbar label{font-size:.62rem;letter-spacing:.22em;text-transform:uppercase;color:var(--amber-dim)}\n.runbar input{background:#000;border:1px solid rgba(246,176,44,.35);color:var(--amber);font-family:var(--mono);font-size:1rem;padding:9px 11px}\n.runrow{display:grid;grid-template-columns:auto 88px 1fr auto;gap:clamp(10px,2.5vw,20px);align-items:start;\n  padding:14px 0;border-bottom:1px solid rgba(246,176,44,.2)}\n@media(max-width:700px){.runrow{grid-template-columns:auto 1fr;gap:8px 12px}.runrow .clock{grid-column:2}.runrow .lead{grid-column:2}}\n.runrow.done{opacity:.42}\n.runrow input[type=checkbox]{width:20px;height:20px;accent-color:var(--amber);margin-top:3px;cursor:pointer}\n.runrow .clock{font-family:var(--narrow);font-weight:700;font-size:1.35rem;color:var(--amber);letter-spacing:.04em}\n.runrow .clock em{display:block;font-style:normal;font-family:var(--mono);font-size:.6rem;letter-spacing:.14em;color:var(--amber-dim);margin-top:3px}\n.runrow b{font-family:var(--narrow);font-weight:700;text-transform:uppercase;font-size:1.2rem;letter-spacing:.04em;color:var(--amber);display:block}\n.runrow p{font-size:.84rem;color:rgba(246,176,44,.66);margin-top:5px;max-width:62ch}\n.runrow .lead{font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:var(--void);background:var(--amber-dim);padding:5px 9px;white-space:nowrap;align-self:start}\n\n@media print{\n  .crt,.flicker{display:none!important}\n  body > *:not(.hq){display:none!important}\n  .hq{display:block!important;position:static;background:#fff;color:#000;overflow:visible}\n  .hq-inner{max-width:none;padding:0}\n  .hq-topbtns,.hq-tabs,.btnset,.flip,.hq-actions,#hq-input,.hq-label,.runbar{display:none!important}\n  .tabpanel{display:block!important;page-break-before:always}\n  .tabpanel:first-of-type{page-break-before:auto}\n  .hq h2,.runrow b,.runrow .clock,.srow .meta b,td.nm,.medal dd{color:#000!important}\n  .hq p,.runrow p,.srow .meta span,.hq-help,th,.runrow .clock em{color:#333!important}\n  .medal div,.tally div,th{background:#fff!important}\n  .runrow .lead{background:#ddd!important;color:#000!important}\n  table,.tablewrap,.medal,.tally{border-color:#999!important}\n  .runrow,.srow,td,th{border-color:#bbb!important}\n  .hq-empty{display:none!important}\n}\n\n\/* ---- Touch devices: drop the expensive compositing layers ----\n   A full-screen fixed element with mix-blend-mode forces the whole page to\n   recomposite on every scroll frame, and backdrop-filter does the same. On\n   phones that reads as stuttering or refusing to scroll. Neither effect is\n   load-bearing, so both come off. *\/\n@media(hover:none),(max-width:820px){\n  .flicker{display:none}\n  .crt::before{opacity:.42}\n  .audio-btn{-webkit-backdrop-filter:none;backdrop-filter:none;background:rgba(10,12,11,.94)}\n}\n\n@media(prefers-reduced-motion:reduce){\n  *,*::before,*::after{animation:none!important;transition:none!important}\n  html{scroll-behavior:auto}\n  .reveal{opacity:1;transform:none}\n}\n<\/style>\n<\/head>\n<body>\n\n<div class=\"crt\" aria-hidden=\"true\"><\/div>\n<div class=\"flicker\" aria-hidden=\"true\"><\/div>\n\n<div class=\"audiobar\">\n  <p class=\"audio-hint\" id=\"audio-hint\" hidden>Hear nothing? Take your phone off silent.<\/p>\n  <button class=\"audio-btn\" id=\"audio-toggle\" type=\"button\" aria-pressed=\"false\">\n    <span class=\"dot\" aria-hidden=\"true\"><\/span><span id=\"audio-label\">Sound off<\/span>\n  <\/button>\n  <button class=\"audio-btn\" id=\"replay\" type=\"button\" hidden>\u21bb Replay<\/button>\n<\/div>\n\n<!-- ================= CONSOLE ================= -->\n<header class=\"console\">\n  <div class=\"rail\" aria-hidden=\"true\">\n    <span>\u0421\u041e\u0412. \u0421\u0415\u041a\u0420\u0415\u0422\u041d\u041e \/\/ TOP SECRET \u00b7 EYES ONLY<\/span>\n    <span>BAND 7.13 MHz <b class=\"blink\">\u25cf<\/b><\/span>\n  <\/div>\n\n  <div class=\"boot\" id=\"boot\" aria-hidden=\"true\"><\/div>\n\n  <h1 class=\"headline\" id=\"headline\">&nbsp;<\/h1>\n  <p class=\"sub reveal\" id=\"sub\">The Cold Pour \u00b7 Operation (Nate's Turning) 35<small>Two blocs \u00b7 one house \u00b7 classified cocktails<\/small><\/p>\n\n  <dl class=\"vitals reveal\" id=\"vitals\">\n    <div class=\"vital\"><dt>\u041c\u0435\u0441\u0442\u043e \/ Location<\/dt><dd id=\"v-place\">\u2014<small id=\"v-place-sub\"><\/small><\/dd><\/div>\n    <div class=\"vital\"><dt>\u0414\u0430\u0442\u0430 \/ Date<\/dt><dd id=\"v-date\">\u2014<small id=\"v-date-sub\"><\/small><\/dd><\/div>\n    <div class=\"vital\"><dt>\u0412\u0440\u0435\u043c\u044f \/ Time<\/dt><dd id=\"v-time\">\u2014<small id=\"v-time-sub\"><\/small><\/dd><\/div>\n  <\/dl>\n\n  <a class=\"scrolldown reveal\" id=\"cue\" href=\"#situation\">Continue<b>\u25bc<\/b><\/a>\n<\/header>\n\n<div class=\"curtain\" aria-hidden=\"true\"><div class=\"track\" id=\"track\"><\/div><\/div>\n\n<!-- ================= SITUATION ================= -->\n<section class=\"paper\">\n  <div class=\"wrap\" id=\"situation\">\n    <p class=\"eyebrow\">\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u00b7 Briefing<\/p>\n    <h2>The Situation<em>Two superpowers, one house<\/em><\/h2>\n    <p class=\"lede\">Agent, your presence is requested at <strong>The Cold Pour: Operation 35<\/strong>. On arrival, the room divides. Half of it answers to Moscow. Half of it answers to Washington. Nobody answers honestly.<\/p>\n    <p class=\"lede\">Your mission, should you choose to accept it, is to survive an evening of diplomacy, espionage and classified cocktails. There will be a bloc olympiad, a black market, and one brief internationally negotiated ceasefire.<\/p>\n\n    <div class=\"blocs\">\n      <div class=\"bloc east\">\n        <p class=\"mark\">Eastern Bloc<\/p>\n        <p class=\"cyr\">\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u044b\u0439 \u0431\u043b\u043e\u043a<\/p>\n        <div class=\"swatches\" aria-hidden=\"true\"><i style=\"background:#DC2F28\"><\/i><i style=\"background:#6E6E6E\"><\/i><i style=\"background:#4A5D31\"><\/i><\/div>\n        <p class=\"body\">Reds, greys, olive green. Wool, fur, medals you did not earn. Dress like you are being photographed by someone you cannot see.<\/p>\n        <ul>\n          <li>Props \u2014 cigarettes, folders, a chess clock<\/li>\n          <li>Posture \u2014 patient, unblinking<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"bloc west\">\n        <p class=\"mark\">Western Bloc<\/p>\n        <p class=\"cyr\">\u0417\u0430\u043f\u0430\u0434\u043d\u044b\u0439 \u0431\u043b\u043e\u043a<\/p>\n        <div class=\"swatches\" aria-hidden=\"true\"><i style=\"background:#B4292F\"><\/i><i style=\"background:#F2F0E8\"><\/i><i style=\"background:#2C4A7C\"><\/i><\/div>\n        <p class=\"body\">Red, white and blue. Skinny ties, aviators, chrome and cream. Keep a drink in the left hand so the right stays free.<\/p>\n        <ul>\n          <li>Props \u2014 attach\u00e9 case, sunglasses, slide rule<\/li>\n          <li>Posture \u2014 friendly, slightly too friendly<\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n\n    <div class=\"zone\">\n      <b>The Neutral Zone<\/b>\n      <p>One room belongs to nobody. Both blocs may enter, negotiate, trade and eavesdrop. No flags, no colors, no protection.<\/p>\n    <\/div>\n\n    <p class=\"eyebrow\" style=\"margin-top:clamp(44px,7vw,72px)\">\u0424\u043e\u0440\u043c\u0430 \u043e\u0434\u0435\u0436\u0434\u044b \u00b7 Dress code<\/p>\n    <h2>Your allegiance is decided.<br>Your cover awaits.<em>Four classifications, both blocs<\/em><\/h2>\n    <p class=\"lede\">Every guest falls into one of four classifications. Enter your name in the console below to discover your secret identity.<\/p>\n    <div class=\"cats\">\n      <div class=\"cat\"><h3>Spy<\/h3><p>Secret agent, intelligence officer, double agent, handler.<\/p><\/div>\n      <div class=\"cat\"><h3>Diplomat<\/h3><p>Ambassador, negotiator, government official, UN delegate.<\/p><\/div>\n      <div class=\"cat\"><h3>Scientist<\/h3><p>Rocket engineer, physicist, computer scientist, astronaut.<\/p><\/div>\n      <div class=\"cat\"><h3>Civilian<\/h3><p>A simple journalist, traveler, socialite, musician, business executive (allegedly).<\/p><\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ================= ASSIGNMENT ================= -->\n<section class=\"dark\">\n  <div class=\"wrap\" id=\"assignment\">\n    <p class=\"eyebrow\" style=\"font-color:#fff\">\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u00b7 Assignment<\/p>\n    <h2>Open Your File<em>Assignment terminal<\/em><\/h2>\n    <p class=\"lede\">Type your real name, and then promptly forget everything you know about yourself. The console assigns your bloc, your classification, your cover identity and your costume. Your name is the key \u2014 enter it the same way twice and the same file comes back. There's no escaping your mission.<\/p>\n\n    <div class=\"terminal\">\n      <p class=\"prompt\">Enter subject name for identification<\/p>\n      <div class=\"entry\">\n        <label class=\"vh\" for=\"who\">Your name<\/label>\n        <input id=\"who\" type=\"text\" autocomplete=\"name\" spellcheck=\"false\" placeholder=\"e.g. Jane Doe\">\n        <button class=\"btn-solid\" id=\"go\" type=\"button\">Open File<\/button>\n      <\/div>\n      <p class=\"note\" id=\"note\">Files are permanent. Choose the spelling you'll answer to at the door.<\/p>\n    <\/div>\n\n    <div class=\"dossier\" id=\"dossier\" aria-live=\"polite\">\n      <article class=\"file\">\n        <div class=\"file-top\"><span id=\"f-agency\">\u2014<\/span><span id=\"f-num\">\u2014<\/span><\/div>\n        <div class=\"stamp\" id=\"f-stamp\">\u2014<\/div>\n        <h3 class=\"rolename\" id=\"f-role\">\u2014<\/h3>\n        <p class=\"rolecyr\" id=\"f-rolecyr\">\u2014<\/p>\n        <dl class=\"rows\">\n          <div><dt>Codename<\/dt><dd id=\"f-code\">\u2014<\/dd><\/div>\n          <div><dt>Bloc<\/dt><dd id=\"f-bloc\">\u2014<\/dd><\/div>\n          <div><dt>Classification<\/dt><dd id=\"f-cat\">\u2014<\/dd><\/div>\n          <div><dt>Clearance<\/dt><dd id=\"f-clear\">\u2014<\/dd><\/div>\n        <\/dl>\n        <div class=\"field\"><h3>Background<\/h3><p id=\"f-bio\">\u2014<\/p><\/div>\n        <div class=\"field\"><h3>Costume directive<\/h3><p class=\"mono\" id=\"f-fit\">\u2014<\/p><\/div>\n        <div class=\"file-actions\">\n          <button class=\"btn-ghost\" type=\"button\" id=\"copy\">Copy file<\/button>\n        <\/div>\n      <\/article>\n\n      <div class=\"rsvp\" id=\"rsvp\">\n        <p class=\"prompt\">\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u00b7 Confirm attendance<\/p>\n        <p class=\"rsvp-copy\" id=\"rsvp-copy\">Transmit your file back to Central.<\/p>\n        <label class=\"vh\" for=\"rsvp-msg\">Optional message<\/label>\n        <input id=\"rsvp-msg\" type=\"text\" maxlength=\"200\" placeholder=\"Optional: plus-one, dietary notes, coded threat\">\n        <input class=\"vh\" id=\"rsvp-hp\" type=\"text\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\">\n        <div class=\"rsvp-btns\">\n          <button class=\"btn-solid\" type=\"button\" id=\"rsvp-yes\">Accept the mission<\/button>\n          <button class=\"btn-ghost\" type=\"button\" id=\"rsvp-no\">Regretfully decline<\/button>\n        <\/div>\n        <p class=\"note\" id=\"rsvp-note\"><\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ================= BAR ================= -->\n<section class=\"paper\">\n  <div class=\"wrap\" id=\"bar\">\n    <p class=\"eyebrow\">\u0411\u0430\u0440 \u00b7 Classified pours<\/p>\n    <h2>The Cold Pour<em>Five drinks, three jurisdictions<\/em><\/h2>\n    <p class=\"lede\">The bar is divided the same way the house is. You may drink across the line. You will be noticed doing it.<\/p>\n\n    <div class=\"bar\">\n      <div class=\"pourgroup east\">\n        <h3>Eastern Bar<\/h3>\n        <div class=\"pour\"><b>Moscow Mule<\/b><span>Vodka, ginger beer, lime, copper mug. Invented by Americans to sell vodka to Americans \u2014 ideologically compromised from birth.<\/span><\/div>\n        <div class=\"pour\"><b>Sputnik Spritz<\/b><span>Bubbles, bitters, a wedge of orange in low orbit. Small, beeping, and first.<\/span><\/div>\n      <\/div>\n\n      <div class=\"pourgroup neutral\">\n        <h3>Neutral Zone<\/h3>\n        <div class=\"pour\"><b>Berlin Wall<\/b><span>A layered shot that stays in two clean halves until somebody knocks it down.<\/span><\/div>\n      <\/div>\n\n      <div class=\"pourgroup west\">\n        <h3>Western Bar<\/h3>\n        <div class=\"pour\"><b>Cuban Missile Mojito<\/b><span>Rum, mint, lime and thirteen days of tension. Can be withdrawn at any time in exchange for concessions.<\/span><\/div>\n        <div class=\"pour\"><b>Space Race Sangria<\/b><span>Wine, brandy, citrus, and a long expensive shortcut to the moon. Best consumed by committee.<\/span><\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"provisions\">\n      <h3>Provisions<\/h3>\n      <p>Cocktail meatballs. Pigs in blankets. Pickles and olives. SPAM and other nuclear fallout, shelf-stable staples.<\/p>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ================= OLYMPIAD ================= -->\n<section class=\"dark\">\n  <div class=\"wrap\" id=\"games\">\n    <p class=\"eyebrow\">\u0418\u0433\u0440\u044b \u00b7 Program of events<\/p>\n    <h2>The Bloc Olympiad<em>East versus West, four events<\/em><\/h2>\n    <p class=\"lede\">Points are awarded to your bloc, not to you. Some events field the whole side; some come down to four assets who will be selected, briefed and blamed.<\/p>\n\n    <div class=\"events\">\n      <div class=\"event\"><b>The Missile Crisis<\/b><span>Each bloc plots a fleet on a hidden grid, then trades coordinates one salvo at a time. Everyone on your side gets to shout a guess. Almost nobody should be listened to.<\/span><i>Full bloc<\/i><\/div>\n      <div class=\"event\"><b>The Arms Race<\/b><span>Limited supplies, unlimited ambition. Build your stack of cups higher than the other side before time runs out. Sabotage is not in the rules and also not not in the rules.<\/span><i>Full bloc<\/i><\/div>\n      <div class=\"event\"><b>Summer Olympic Showdown<\/b><span>Four players per bloc at the foosball table. Olympic rules, national pride, and a very long handshake afterward.<\/span><i class=\"champs\">Four assets<\/i><\/div>\n      <div class=\"event\"><b>Beer Pong<\/b><span>Four assets per bloc. Escalation is expected and historically inevitable.<\/span><i class=\"champs\">Four assets<\/i><\/div>\n    <\/div>\n\n    <div class=\"lots\">\n      <h3>Closing Ceremony: The Black Market<\/h3>\n      <p>The evening ends in an auction of confiscated goods. The lots stay classified until they hit the block. Currency is whatever you have won, stolen, or convincingly claimed to have won or stolen.<\/p>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ================= CEASEFIRE ================= -->\n<section class=\"paper\">\n  <div class=\"wrap\">\n    <p class=\"eyebrow\">\u041f\u0440\u0438\u043a\u0430\u0437 \u00b7 Standing orders<\/p>\n    <h2>Standing Orders<em>Read once, then destroy<\/em><\/h2>\n\n    <div class=\"orders\">\n      <div class=\"order\"><h3>Arrive on time<\/h3><p id=\"o-time\">\u2014<\/p><\/div>\n      <div class=\"order\"><h3>Come in costume<\/h3><p>Pick a classification or open your file. Thrift store, closet, or full theatrical commitment \u2014 all acceptable. Street clothes count as defection.<\/p><\/div>\n      <div class=\"order\"><h3>Trust nobody<\/h3><p>Discuss your file freely with your own bloc. Lie about it to the other one. Both are encouraged and neither is enforced.<\/p><\/div>\n      <div class=\"order\"><h3>Confirm attendance<\/h3><p>Open your file above, then transmit it back with Accept the Mission. Your dossier comes with it, so Central knows which bar to stock.<\/p><\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<footer>\n  <span id=\"foot-line\">\u2014<\/span>\n  <button type=\"button\" id=\"hq-open\" title=\"Host roster\">Destroy after reading<\/button>\n<\/footer>\n\n<!-- ================= HQ ROSTER ================= -->\n<div class=\"hq\" id=\"hq\" role=\"dialog\" aria-label=\"Host roster\" aria-modal=\"true\">\n  <div class=\"hq-inner\">\n    <div class=\"hq-top\">\n      <div>\n        <h2>Central Registry<\/h2>\n        <p>Host only \u00b7 roster, scoring, run of show<\/p>\n      <\/div>\n      <div class=\"hq-topbtns\">\n        <button class=\"btn-ghost\" type=\"button\" id=\"hq-print\">Print<\/button>\n        <button class=\"btn-ghost\" type=\"button\" id=\"hq-close\">Close<\/button>\n      <\/div>\n    <\/div>\n\n    <nav class=\"hq-tabs\">\n      <button class=\"tab on\" type=\"button\" data-tab=\"roster\">Roster<\/button>\n      <button class=\"tab\" type=\"button\" data-tab=\"score\">Scoreboard<\/button>\n      <button class=\"tab\" type=\"button\" data-tab=\"run\">Run of show<\/button>\n    <\/nav>\n\n    <section class=\"tabpanel on\" id=\"tab-roster\">\n    <p class=\"hq-label\">Guest list \u2014 one name per line<\/p>\n    <label class=\"vh\" for=\"hq-input\">Guest list<\/label>\n    <textarea id=\"hq-input\" spellcheck=\"false\" placeholder=\"Jane Doe&#10;Mike Ross&#10;Elena Petrov\"><\/textarea>\n    <div class=\"hq-actions\">\n      <button class=\"btn-solid\" type=\"button\" id=\"hq-build\">Build roster<\/button>\n      <button class=\"btn-ghost\" type=\"button\" id=\"hq-csv\">Copy as CSV<\/button>\n      <button class=\"btn-ghost\" type=\"button\" id=\"hq-guests\">Copy guest list<\/button>\n      <button class=\"btn-ghost\" type=\"button\" id=\"hq-pins\">Copy pinned blocs<\/button>\n      <button class=\"btn-ghost\" type=\"button\" id=\"hq-clear\">Clear<\/button>\n    <\/div>\n\n    <p class=\"hq-clash\" id=\"hq-clash\" hidden><\/p>\n\n    <dl class=\"tally\" id=\"hq-tally\" style=\"display:none\">\n      <div><dt>Guests<\/dt><dd id=\"t-total\">0<\/dd><\/div>\n      <div><dt>Eastern<\/dt><dd class=\"e\" id=\"t-east\">0<\/dd><\/div>\n      <div><dt>Western<\/dt><dd class=\"w\" id=\"t-west\">0<\/dd><\/div>\n      <div><dt>Spy<\/dt><dd id=\"t-spy\">0<\/dd><\/div>\n      <div><dt>Diplomat<\/dt><dd id=\"t-dip\">0<\/dd><\/div>\n      <div><dt>Scientist<\/dt><dd id=\"t-sci\">0<\/dd><\/div>\n      <div><dt>Civilian<\/dt><dd id=\"t-civ\">0<\/dd><\/div>\n    <\/dl>\n\n    <div class=\"hq-empty\" id=\"hq-empty\">No roster built. Paste a guest list above and press Build roster.<\/div>\n\n    <div class=\"tablewrap\" id=\"hq-tablewrap\" style=\"display:none\">\n      <table>\n        <thead><tr><th>Guest<\/th><th>Bloc<\/th><th>Class<\/th><th>Codename<\/th><th>Role<\/th><th>File<\/th><th><\/th><\/tr><\/thead>\n        <tbody id=\"hq-body\"><\/tbody>\n      <\/table>\n    <\/div>\n\n    <p class=\"hq-help\">\n      Assignments are generated from each guest's name, so this table always matches what they see \u2014 no server, no storage, nothing to sync. Rebuild it any time from the same list and you get the same result.\n      <br><br>\n      <strong>Flip<\/strong> moves someone to the other bloc for this session. To make a flip permanent for guests, press <em>Copy pinned blocs<\/em> and paste the snippet over the <code>ROSTER<\/code> block near the top of this file's script.\n      <br><br>\n      <strong>Someone already has their file.<\/strong> Once a guest RSVPs, their role and codename are fixed. Add them to the <code>LOCKED<\/code> block in the script \u2014 bloc, classification, role and codename, copied from their RSVP email \u2014 and their identity is frozen and taken out of the pool for everyone else. Locked rows cannot be flipped.\n      <br><br>\n      <strong>Guaranteeing no duplicates.<\/strong> Roles and codenames are only deconflicted for names the file already knows about. Press <em>Copy guest list<\/em> and paste the snippet over the <code>GUESTS<\/code> block in the script, then re-upload \u2014 from then on every listed guest is guaranteed a role and codename nobody else has. Adding a name later occasionally shuffles one or two others, so do this once the list is close to final rather than after every reply.\n    <\/p>\n    <\/section>\n\n    <section class=\"tabpanel\" id=\"tab-score\">\n      <dl class=\"medal\">\n        <div class=\"east\"><dt>Eastern Bloc<\/dt><dd id=\"s-east\">0<\/dd><\/div>\n        <div class=\"vs\">VS<\/div>\n        <div class=\"west\"><dt>Western Bloc<\/dt><dd id=\"s-west\">0<\/dd><\/div>\n      <\/dl>\n      <p class=\"leader\" id=\"s-leader\">No events scored yet \u00b7 120 points in play<\/p>\n\n      <div id=\"score-list\"><\/div>\n\n      <div class=\"hq-actions\">\n        <button class=\"btn-ghost\" type=\"button\" id=\"score-copy\">Copy result<\/button>\n        <button class=\"btn-ghost\" type=\"button\" id=\"score-reset\">Reset scores<\/button>\n      <\/div>\n\n      <p class=\"hq-help\">\n        Tap a winner for each event. A tie splits the points. Scores are written into this page's web address as you go, so bookmark or refresh freely \u2014 just don't close the tab without copying the result.\n        <br><br>\n        <strong>Turning points into auction money:<\/strong> at the end, every member of the winning bloc gets 3 black-market chips and every member of the losing bloc gets 1, plus one extra chip each for the two guests who scored the most for their side. Chips are the only currency accepted at the auction.\n      <\/p>\n    <\/section>\n\n    <section class=\"tabpanel\" id=\"tab-run\">\n      <div class=\"runbar\">\n        <label for=\"run-start\">Doors open<\/label>\n        <input type=\"time\" id=\"run-start\" value=\"17:00\">\n        <button class=\"btn-ghost\" type=\"button\" id=\"run-reset\">Untick all<\/button>\n      <\/div>\n      <div id=\"run-list\"><\/div>\n      <p class=\"hq-help\">\n        Times recalculate from whatever you set as the door time. Tick each block as it finishes. Nothing here is enforced \u2014 if the Arms Race is going well, let it run and take the twenty minutes back from the break.\n      <\/p>\n    <\/section>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n\"use strict\";\n\nvar reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n\/* ==================================================================\n   CONFIG \u2014 edit these four lines and the whole page updates.\n   ================================================================== *\/\nvar CONFIG = {\n  place:    \"1831 Beverly Place\",\n  placeSub: \"Ring once. Then once more.\",\n  date:     \"05 September\",\n  dateSub:  \"Saturday\",\n  time:     \"16:00\",\n  timeSub:  \"4:00 PM sharp\",\n\n  \/* RSVP delivery ------------------------------------------------\n     rsvpEmail    \u2014 always set this. Used as the fallback: the guest's\n                    own mail app opens with everything pre-written and\n                    they press send.\n     rsvpEndpoint \u2014 optional. Paste a Formspree (or similar) form URL\n                    here and RSVPs send silently in the background\n                    instead, with no mail app involved. Leave it as \"\"\n                    to use the mailto fallback.\n     -------------------------------------------------------------- *\/\n  rsvpEmail:    \"natehartmann6@gmail.com\",\n  rsvpEndpoint: \"https:\/\/formspree.io\/f\/mgoggkyo\"\n};\n\n\/* ==================================================================\n   ROSTER \u2014 pin specific guests to a bloc.\n   Keys are lowercase names exactly as guests will type them.\n   Use the Central Registry panel to generate this block for you.\n   ================================================================== *\/\nvar ROSTER = {\n  \/\/ \"jane doe\": \"east\",\n  \/\/ \"mike ross\": \"west\"\n};\n\n\/* ==================================================================\n   ROLES \u2014 six per classification, per bloc. 48 total.\n   ================================================================== *\/\nvar CATS = ['Spy','Diplomat','Scientist','Civilian'];\n\nvar ROLES = {\n  east: {\n    Spy: [\n      {t:\"Officer, Second Directorate\", c:\"\u041e\u0444\u0438\u0446\u0435\u0440 \u041a\u0413\u0411\",\n       b:\"You are attending in a purely social capacity. You have already read the contents of everyone's coat pockets and you have opinions about the guest list.\",\n       f:\"Long dark overcoat, fur or felt hat, sunglasses indoors, and a newspaper you never actually read.\"},\n      {t:\"Illegal, Directorate S\", c:\"\u041d\u0435\u043b\u0435\u0433\u0430\u043b\",\n       b:\"You have lived under this name for nine years. You have a mortgage under it, a dentist under it, and a radio in the attic under it.\",\n       f:\"Aggressively ordinary clothes. Cardigan, slacks, sensible shoes. Nothing memorable. That is the whole point.\"},\n      {t:\"Cipher Clerk, Embassy Annex\", c:\"\u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043b\u044c\u0449\u0438\u043a\",\n       b:\"You handle every message that comes through the annex, which means you know things three levels above your pay. Someone from the other bloc has been very friendly lately.\",\n       f:\"Cheap suit, ink-stained cuffs, thick glasses, a key on a chain around your neck, a nervous glance.\"},\n      {t:\"Operator, Numbers Station\", c:\"\u0420\u0430\u0434\u0438\u0441\u0442\",\n       b:\"Every night at the same hour you read five-digit groups into a microphone for eleven minutes. You have no idea what any of it means and you have stopped wondering.\",\n       f:\"Headphones around the neck, shapeless grey knitwear, a mug of tea, and the thousand-yard stare of permanent night shifts.\"},\n      {t:\"Resettlement Officer\", c:\"\u041a\u0443\u0440\u0430\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0431\u0435\u0436\u0447\u0438\u043a\u043e\u0432\",\n       b:\"You mind the Westerners who came over. You find them flats, you find them vodka, and you listen very carefully to what they say when they have had some.\",\n       f:\"Friendly suit, warm handshake, an arm around the shoulder, and a small notebook that comes out the moment you leave the room.\"},\n      {t:\"Checkpoint Commander\", c:\"\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a \u041a\u041f\u041f\",\n       b:\"Nothing crosses without your stamp. You have confiscated four hundred paperbacks, ninety records and one very confused dachshund.\",\n       f:\"Green uniform greatcoat, peaked cap, clipboard, rubber stamp, and a torch you shine at people unnecessarily.\"}\n    ],\n    Diplomat: [\n      {t:\"Politburo Apparatchik\", c:\"\u041f\u0430\u0440\u0442\u0438\u0439\u043d\u044b\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0447\u0438\u043a\",\n       b:\"You have survived four General Secretaries by agreeing enthusiastically and remembering nothing. To you, the buffet table is a matter of ideology.\",\n       f:\"Boxy grey suit one size too large, wide tie, party pin on the lapel, a folder you carry into every room.\"},\n      {t:\"Ambassador to the United Nations\", c:\"\u041f\u043e\u0441\u043e\u043b \u0432 \u041e\u041e\u041d\",\n       b:\"You have walked out of eleven sessions and returned to nine of them. You can hold a grudge in six languages and a glass in one hand.\",\n       f:\"Impeccable dark suit or evening dress, lapel pin, pocket square, and a small flag on your table setting.\"},\n      {t:\"Military Attach\u00e9, Colonel\", c:\"\u0412\u043e\u0435\u043d\u043d\u044b\u0439 \u0430\u0442\u0442\u0430\u0448\u0435, \u043f\u043e\u043b\u043a\u043e\u0432\u043d\u0438\u043a\",\n       b:\"You hold one half of a two-key system and you have never once been tempted. You do, however, have strong opinions about the American colonel's shoes.\",\n       f:\"Olive dress tunic, an absurdly large peaked cap, epaulettes, medals, boots polished to a mirror.\"},\n      {t:\"Chief, Trade Delegation\", c:\"\u0413\u043b\u0430\u0432\u0430 \u0442\u043e\u0440\u0433\u043f\u0440\u0435\u0434\u0441\u0442\u0432\u0430\",\n       b:\"You are here to buy grain and sell nothing. Every handshake is a negotiation and every negotiation ends with you asking for slightly more time.\",\n       f:\"Heavy double-breasted suit, leather portfolio, a calculator you do not need, and a pocketful of business cards.\"},\n      {t:\"Cultural Attach\u00e9\", c:\"\u0410\u0442\u0442\u0430\u0448\u0435 \u043f\u043e \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u0435\",\n       b:\"You arrange the ballet tours, the chess exhibitions and the folk ensembles. You also file a report on everyone who attends them.\",\n       f:\"Elegant but sober. Silk scarf or good tie, programme notes under one arm, and a genuine enthusiasm nobody quite believes.\"},\n      {t:\"Disarmament Negotiator\", c:\"\u041f\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0440\u0449\u0438\u043a \u043f\u043e \u0440\u0430\u0437\u043e\u0440\u0443\u0436\u0435\u043d\u0438\u044e\",\n       b:\"You have sat at the same table for eleven years arguing about the definition of the word verifiable. You have aged. The table has not.\",\n       f:\"Grey on grey, reading glasses, a thick binder of annexes, and the calm of a person who cannot be hurried.\"}\n    ],\n    Scientist: [\n      {t:\"Chief Designer, OKB-1\", c:\"\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\",\n       b:\"Your real name is a state secret and will stay one. You put the first satellite over enemy skies and you haven't slept properly since 1957. You speak almost entirely in launch windows.\",\n       f:\"Rumpled dark suit, no tie, sleeves pushed up. Slide rule in the breast pocket, rolled blueprints under one arm, ink on your fingers.\"},\n      {t:\"Cosmonaut, First Detachment\", c:\"\u041a\u043e\u0441\u043c\u043e\u043d\u0430\u0432\u0442\",\n       b:\"One hundred and eight minutes above the world, and a lifetime of parades below it. You are extremely photogenic, faintly radioactive, and no longer allowed to fly anything.\",\n       f:\"Flight coveralls or any orange jumpsuit, tall boots, a chest of medals, leather flight helmet if you can find one.\"},\n      {t:\"Cyberneticist, Academy of Sciences\", c:\"\u041a\u0438\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u043a\",\n       b:\"You built a machine that fills a room and thinks slower than you do, and you love it anyway. You have requested more magnetic tape every year since 1959.\",\n       f:\"Lab coat over a shirt and tie, punch cards in the pocket, a reel of tape under one arm, chalk on the sleeve.\"},\n      {t:\"Physicist, Arzamas-16\", c:\"\u0424\u0438\u0437\u0438\u043a, \u0410\u0440\u0437\u0430\u043c\u0430\u0441-16\",\n       b:\"You work in a city that does not appear on any map and has no name, only a number. Your family thinks you are an engineer in Gorky.\",\n       f:\"White coat over a plain shirt, dosimeter badge clipped on, security pass on a lanyard, and a habit of not finishing sentences.\"},\n      {t:\"Chief Engineer, Baikonur\", c:\"\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440, \u0411\u0430\u0439\u043a\u043e\u043d\u0443\u0440\",\n       b:\"You live in the desert with a rocket and four hundred people who are frightened of you. Weather is the only thing you cannot argue with.\",\n       f:\"Canvas work jacket, dust on everything, hard hat under one arm, stopwatch, and a radio you keep raising to your mouth.\"},\n      {t:\"Doctor, Space Medicine\", c:\"\u0412\u0440\u0430\u0447 \u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0435\u0434\u0438\u0446\u0438\u043d\u044b\",\n       b:\"You sent the dogs up first and you have never entirely forgiven yourself. You now take the pulse of heroes for a living.\",\n       f:\"White coat, stethoscope, clipboard of readings, and a small kind smile you use on people about to do something dangerous.\"}\n    ],\n    Civilian: [\n      {t:\"State Grandmaster\", c:\"\u0413\u0440\u043e\u0441\u0441\u043c\u0435\u0439\u0441\u0442\u0435\u0440\",\n       b:\"You have not lost a serious match in eleven years and you would like everyone here to be aware of that. Nothing tonight is a game to you, including the games.\",\n       f:\"Turtleneck or heavy cardigan, thick square glasses, a chess clock in hand, a permanent thousand-yard stare.\"},\n      {t:\"Prima Ballerina, Cultural Delegation\", c:\"\u041f\u0440\u0438\u043c\u0430-\u0431\u0430\u043b\u0435\u0440\u0438\u043d\u0430\",\n       b:\"Sent abroad as living proof of Soviet refinement. You are watched by two people at all times and you have decided to enjoy it.\",\n       f:\"Elegant black, hair in a severe bun, flats, and a fur stole that technically belongs to the state.\"},\n      {t:\"Foreign Correspondent, Pravda\", c:\"\u041a\u043e\u0440\u0440\u0435\u0441\u043f\u043e\u043d\u0434\u0435\u043d\u0442 \u00ab\u041f\u0440\u0430\u0432\u0434\u044b\u00bb\",\n       b:\"You file the truth exactly as it has been assigned to you. Your camera has two lenses and one of them is not for photography.\",\n       f:\"Trench coat, press badge, film camera on a strap, notebook, and an unlit cigarette that stays unlit all night.\"},\n      {t:\"Hero of Socialist Labour\", c:\"\u0413\u0435\u0440\u043e\u0439 \u0421\u043e\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0422\u0440\u0443\u0434\u0430\",\n       b:\"Your tractor plant exceeded its quota by four hundred percent and your face is on a poster in nine cities. You are very tired.\",\n       f:\"Work shirt and cap, a single enormous gold star medal, calloused handshake, and sleeves permanently rolled.\"},\n      {t:\"Fartsovshchik\", c:\"\u0424\u0430\u0440\u0446\u043e\u0432\u0449\u0438\u043a\",\n       b:\"You can get anything. Jeans, records, chewing gum, a decent watch. You do not ask where things come from and neither should anyone else. See you at the auction.\",\n       f:\"Suspiciously good Western clothes worn slightly wrong, a heavy coat with deep pockets, and a bag you never put down.\"},\n      {t:\"Weightlifter, National Team\", c:\"\u0422\u044f\u0436\u0435\u043b\u043e\u0430\u0442\u043b\u0435\u0442 \u0441\u0431\u043e\u0440\u043d\u043e\u0439\",\n       b:\"Three world records and a training regime nobody is allowed to write down. You will be taking part in every physical event tonight whether invited or not.\",\n       f:\"Tracksuit with national lettering, medals over the top, gym bag, and a towel around the neck at all times.\"}\n    ]\n  },\n  west: {\n    Spy: [\n      {t:\"Case Officer, Directorate of Plans\", c:\"Central Intelligence Agency\",\n       b:\"Your cover is agricultural attach\u00e9 and you will maintain it all evening no matter who asks. There is a dead drop behind the bar and you put it there.\",\n       f:\"Slim grey suit, skinny tie, dark sunglasses, and an attach\u00e9 case that never leaves your hand.\"},\n      {t:\"Counterintelligence, Mole Hunt\", c:\"Federal Bureau of Investigation\",\n       b:\"There is a leak on our side of the room and you have narrowed it to four people. Two of them brought you a drink tonight.\",\n       f:\"Plain dark suit, short haircut, notebook, badge on the belt, and a habit of standing where you can see the door.\"},\n      {t:\"Officer, Listening Post\", c:\"National Security Agency\",\n       b:\"You have heard every conversation at this party twice already \u2014 once live and once on tape. You laugh at jokes slightly before they land.\",\n       f:\"Short-sleeve shirt and tie, headphones around the neck, clipboard of intercepts, government ID clipped on.\"},\n      {t:\"Station Chief, Berlin\", c:\"Berlin Operations Base\",\n       b:\"You run an entire city's worth of assets from a desk above a bakery. You have not trusted a phone line since 1961.\",\n       f:\"Good overcoat over a tired suit, hat, gloves, a folded map, and the ability to end a conversation instantly.\"},\n      {t:\"Photo Interpreter, Overflight Program\", c:\"National Photographic Interpretation Center\",\n       b:\"You find missiles in grey smudges for a living. You once ruined a president's week with a magnifying glass and were entirely correct.\",\n       f:\"Shirtsleeves, loupe on a cord, light table tan, stacks of contact prints, and pencil behind the ear.\"},\n      {t:\"Technical Services Division\", c:\"Office of Technical Service\",\n       b:\"You built the camera in the cigarette lighter and the microphone in the olive. Nothing on your person is what it appears to be.\",\n       f:\"Lab coat or a plain jacket with far too many pockets, jeweller's loupe, tiny screwdrivers, and a case of prototypes.\"}\n    ],\n    Diplomat: [\n      {t:\"Chief of Staff to the Senator\", c:\"United States Senate\",\n       b:\"You write every word the great man says and you have never been photographed beside him. You know exactly where the votes are and what they cost.\",\n       f:\"Navy suit, flag pin, clipboard, and the ability to whisper in anyone's ear without being noticed.\"},\n      {t:\"Ambassador to the United Nations\", c:\"United States Mission to the UN\",\n       b:\"You once produced photographs at a Security Council session and asked a man to answer yes or no. You are still waiting for the answer and still enjoying it.\",\n       f:\"Impeccable suit or evening dress, flag pin, folder of photographs, reading glasses used for emphasis.\"},\n      {t:\"Colonel, Strategic Air Command\", c:\"United States Air Force\",\n       b:\"Fourteen hours airborne a day, every day, waiting for a call that must never come. You land with excellent stories and a slight hearing problem.\",\n       f:\"Leather flight jacket, aviators, khakis, squadron patches, and a duffel bag you refuse to put down.\"},\n      {t:\"Arms Control Negotiator\", c:\"Department of State\",\n       b:\"You have spent four years arguing about throw-weight and you can no longer discuss anything without proposing a framework for discussing it.\",\n       f:\"Conservative suit, half-moon glasses, an enormous briefing book, and three pens in case two fail.\"},\n      {t:\"Director, Radio Free Europe\", c:\"Broadcasting Service\",\n       b:\"You send news across the curtain on a frequency they spend a fortune trying to jam. You consider the jamming a compliment.\",\n       f:\"Shirtsleeves and loosened tie, headphones, a script marked in red, and a cigarette going in the ashtray.\"},\n      {t:\"Economic Attach\u00e9\", c:\"Department of Commerce\",\n       b:\"You arrive with reconstruction money and a very long list of conditions. Everyone is delighted to see you and nobody is pleased about it.\",\n       f:\"Prosperous suit, good shoes, leather satchel of contracts, and a chequebook you produce like a weapon.\"}\n    ],\n    Scientist: [\n      {t:\"Flight Director\", c:\"National Aeronautics and Space Administration\",\n       b:\"You wear a fresh vest for every launch and you have never once used the word impossible in a control room. Failure is not on tonight's schedule.\",\n       f:\"White short-sleeve shirt, black skinny tie, embroidered vest, headset around the neck, pens in the pocket.\"},\n      {t:\"Physicist, Los Alamos\", c:\"Atomic Energy Commission\",\n       b:\"You helped build the thing and you have been complicated about it every day since. You can do the math on the bar tab in your head and you always do.\",\n       f:\"White shirt with rolled sleeves, ID badge clipped on, slide rule, a pipe, and a slightly haunted expression.\"},\n      {t:\"Systems Programmer, IBM 7090\", c:\"International Business Machines\",\n       b:\"You speak to a machine the size of a garage in a language eleven people understand. You brought a deck of punch cards and you will not let anyone drop it.\",\n       f:\"White shirt, thin tie, horn-rimmed glasses, pocket protector, and a rubber-banded stack of cards.\"},\n      {t:\"Astronaut, First Seven\", c:\"Project Mercury\",\n       b:\"You were a test pilot until they put you on a magazine cover. You have been poked, spun and photographed more than any human in history.\",\n       f:\"Silver flight suit or flight coveralls, aviators, name patch, and a grin you have practised for photographers.\"},\n      {t:\"Rocket Engineer, Redstone Arsenal\", c:\"Army Ballistic Missile Agency\",\n       b:\"You have wanted to reach the moon since you were nine years old and you are not especially interested in who pays for it.\",\n       f:\"Sharp suit worn in a workshop, drafting triangle in the pocket, blueprints, and an accent nobody asks about.\"},\n      {t:\"Analyst, RAND Corporation\", c:\"Systems Analysis\",\n       b:\"You do game theory on cocktail napkins and you have already run the numbers on tonight. You give the Eastern bloc thirty-eight percent.\",\n       f:\"Tweed jacket with elbow patches, horn-rims, a legal pad, and chalk dust on one sleeve.\"}\n    ],\n    Civilian: [\n      {t:\"Account Executive, Madison Avenue\", c:\"Advertising\",\n       b:\"You have sold this country on cigarettes, station wagons and the fallout shelter as a lifestyle choice. Three-martini lunch, four-martini party.\",\n       f:\"Sharp two-piece suit, pocket square, hat, and an old fashioned in hand at all times.\"},\n      {t:\"Jazz Ambassador\", c:\"Department of State Cultural Program\",\n       b:\"Sent overseas to prove that America swings. Diplomacy in four-four time, and your horn has crossed more borders than the fleet.\",\n       f:\"Tailored suit, thin tie, instrument case, and an unhurried cool nobody else in the room can fake.\"},\n      {t:\"Wire Service Correspondent\", c:\"Associated Press\",\n       b:\"You filed from Berlin the night they put the wall up and you have not been surprised by anything since. You will be the first person here to know anything.\",\n       f:\"Rumpled trench coat, press card tucked in the hatband, notepad, and a typewriter case used as a stool.\"},\n      {t:\"Network News Anchor\", c:\"Evening Broadcast\",\n       b:\"Forty million people believe you because of how you say things, not what you say. You end every conversation with a small pause and a nod.\",\n       f:\"Immaculate suit, hair that does not move, a sheaf of scripts, and reading glasses used purely for gravity.\"},\n      {t:\"Stewardess, Transatlantic Service\", c:\"Commercial Aviation\",\n       b:\"Nine countries this month. You have carried other people's letters across four borders and never once been searched.\",\n       f:\"Sharp uniform suit in blue, pillbox hat, white gloves, silk scarf, and a small case with wheels that everyone envies.\"},\n      {t:\"Fallout Shelter Salesman\", c:\"Civil Defense Products\",\n       b:\"Business has never been better and you feel wonderful about that in a way you do not examine closely. Ask you about ventilation. Please ask you about ventilation.\",\n       f:\"Loud checked jacket, wide tie, brochures fanned in one hand, and a smile that arrives before you do.\"}\n    ]\n  }\n};\n\nvar CODENAMES = {\n  east: [\"SOKOL\",\"MOROZ\",\"YANTAR\",\"ZUBR\",\"TAIGA\",\"GRANIT\",\"VYMPEL\",\"ZENIT\",\"ISKRA\",\"BURAN\",\"SEVER\",\"KRONA\",\n         \"OMSK\",\"ROSA\",\"VETER\",\"KAMEN\",\"VOSTOK\",\"ORYOL\",\"LADOGA\",\"MEDVED\",\"ANTEY\",\"ZARYA\",\"PLAMYA\",\"SOBOL\"],\n  west: [\"NIGHTHAWK\",\"SILVERBELL\",\"GOLDCREST\",\"HIGHWIRE\",\"LONG SHADOW\",\"COPPER KETTLE\",\"TALL PINE\",\"GLASS HOUSE\",\n         \"SNOWBIRD\",\"BRIGHT STAR\",\"DRY MARTINI\",\"IRON DOOR\",\"BLUE RIDGE\",\"PALE HORSE\",\"QUICKSAND\",\"HALFTIME\",\n         \"SANDPIPER\",\"CLEARWATER\",\"HALF LIGHT\",\"RED CEDAR\",\"OPEN WINDOW\",\"STONE FRUIT\",\"WHITE LANTERN\",\"FAIR WEATHER\"]\n};\n\nvar COMPARTMENTS = [\"OVERCOAT\",\"SAMOVAR\",\"TAILWIND\",\"BIRCHWOOD\",\"HALFMOON\",\"DEEP FREEZE\",\"WHITE NOISE\",\"LONG PLAY\"];\nvar AGENCY = {east:\"\u041a\u0413\u0411 \u00b7 \u0426\u041a \u041a\u041f\u0421\u0421 \u00b7 \u041b\u0418\u0427\u041d\u041e\u0415 \u0414\u0415\u041b\u041e\", west:\"CIA \u00b7 DOD \u00b7 PERSONNEL FILE\"};\n\n\/* ---------------- Hashing ---------------- *\/\nfunction norm(s){\n  return String(s||'').toLowerCase().normalize('NFD').replace(\/[\\u0300-\\u036f]\/g,'')\n    .replace(\/[^a-z0-9\\u0400-\\u04ff ]\/g,'').replace(\/\\s+\/g,' ').trim();\n}\nfunction hash(s, seed){\n  var h = seed >>> 0;\n  for (var i=0;i<s.length;i++){ h ^= s.charCodeAt(i); h = Math.imul(h,16777619) >>> 0; }\n  h ^= h >>> 13; h = Math.imul(h,2246822507) >>> 0; h ^= h >>> 16;\n  return h >>> 0;\n}\nfunction pick(arr,s,seed){ return arr[hash(s,seed) % arr.length]; }\n\nvar PINS = {};                                   \/* session flips from the registry *\/\nObject.keys(ROSTER).forEach(function(k){ PINS[norm(k)] = ROSTER[k]; });\n\n\/* ==================================================================\n   GUESTS \u2014 paste your confirmed list here, one name per line, exactly\n   as guests will type it. Anyone in this list is guaranteed a role and\n   a codename nobody else has. Use the Central Registry's \"Copy guest\n   list\" button to generate this block.\n\n   Names NOT in this list still get a file, but it is drawn by hash\n   alone and may collide with someone else's.\n   ================================================================== *\/\nvar GUESTS = [\n  \/\/ \"Jane Doe\",\n  \/\/ \"Mike Ross\"\n];\n\n\/* ==================================================================\n   LOCKED \u2014 people who already received a file. Their exact role and\n   codename are frozen here and removed from the pool before anyone\n   else is dealt in, so nobody can be given them by accident.\n   Keys are lowercase. Copy the values straight from the RSVP email.\n   ================================================================== *\/\nvar LOCKED = {\n  \"emily lauter\": {bloc:\"west\", cat:\"Scientist\", role:\"Physicist, Los Alamos\",          code:\"PALE HORSE\"},\n  \"ari feldman\":  {bloc:\"east\", cat:\"Civilian\",  role:\"Foreign Correspondent, Pravda\",  code:\"ZUBR\"}\n};\n\n\/* Resolve the whole guest list at once so nobody shares a role or a\n   codename. Order is fixed by hash, not by list position, so adding a\n   name to the end does not reshuffle the people before it any more\n   than adding one anywhere else would. Every browser runs the same\n   pass over the same list and gets the same answer. *\/\nvar RESOLVED = {};\nfunction buildAssignments(){\n  RESOLVED = {};\n  var takenRole = {}, takenCode = {}, seen = {}, queue = [];\n\n  \/* locked files are placed first and their slots taken out of play *\/\n  Object.keys(LOCKED).forEach(function(raw){\n    var key = norm(raw), L = LOCKED[raw];\n    var pool = ROLES[L.bloc] && ROLES[L.bloc][L.cat];\n    if (!pool) return;\n    var idx = -1;\n    for (var i=0;i<pool.length;i++){ if (pool[i].t === L.role){ idx = i; break; } }\n    if (idx < 0) return;                       \/* title not found \u2014 leave to the hash *\/\n    takenRole[L.bloc + '|' + L.cat + '|' + idx] = 1;\n    takenCode[L.code] = 1;\n    seen[key] = 1;\n    RESOLVED[key] = {bloc:L.bloc, cat:L.cat, role:pool[idx], code:L.code, locked:true};\n  });\n\n  GUESTS.forEach(function(raw){\n    var k = norm(raw);\n    if (k && !seen[k]){ seen[k] = 1; queue.push(k); }\n  });\n  queue.sort(function(a,b){ return hash(a,0x5bf03635) - hash(b,0x5bf03635); });\n  queue.forEach(function(key){\n    var bloc = PINS[key] || (hash(key,0x811c9dc5) % 2 === 0 ? 'east' : 'west');\n    var want = CATS[hash(key,0x9e3779b1) % CATS.length];\n    var order = [want].concat(CATS.filter(function(c){ return c !== want; }));\n    var role = null, cat = want;\n\n    for (var ci=0; ci<order.length && !role; ci++){\n      var pool = ROLES[bloc][order[ci]];\n      var from = hash(key,0x7feb352d) % pool.length;\n      for (var i=0;i<pool.length;i++){\n        var idx = (from + i) % pool.length;\n        var id = bloc + '|' + order[ci] + '|' + idx;\n        if (!takenRole[id]){ takenRole[id] = 1; role = pool[idx]; cat = order[ci]; break; }\n      }\n    }\n    if (!role){                                   \/* 24 in one bloc \u2014 pool exhausted *\/\n      var p = ROLES[bloc][want];\n      role = p[hash(key,0x7feb352d) % p.length];\n      cat = want;\n    }\n\n    var cn = CODENAMES[bloc], cf = hash(key,0x85ebca6b) % cn.length, code = null;\n    for (var j=0;j<cn.length;j++){\n      var c = cn[(cf + j) % cn.length];\n      if (!takenCode[c]){ takenCode[c] = 1; code = c; break; }\n    }\n    if (!code) code = cn[cf];\n\n    RESOLVED[key] = {bloc:bloc, cat:cat, role:role, code:code};\n  });\n}\n\nfunction assign(raw){\n  var key = norm(raw);\n  var r = RESOLVED[key], bloc, cat, role, code;\n  if (r){\n    bloc = r.bloc; cat = r.cat; role = r.role; code = r.code;\n  } else {\n    bloc = PINS[key] || (hash(key,0x811c9dc5) % 2 === 0 ? 'east' : 'west');\n    cat  = CATS[hash(key,0x9e3779b1) % CATS.length];\n    role = pick(ROLES[bloc][cat], key, 0x7feb352d);\n    code = pick(CODENAMES[bloc], key, 0x85ebca6b);\n  }\n  var comp = pick(COMPARTMENTS, key, 0x27d4eb2f);\n  var n = hash(key,0xc2b2ae35);\n  return {\n    key:key, bloc:bloc, blocName:(bloc==='east'?'Eastern':'Western'), cat:cat,\n    role:role, code:code, listed:!!r,\n    num:(bloc==='east'?'\u0414-':'F-') + (n % 9000 + 1000) + '\/' + (n % 67 + 12),\n    clearance:(bloc==='east'?'\u0421\u041e\u0412. \u0421\u0415\u041a\u0420\u0415\u0422\u041d\u041e':'TOP SECRET') + ' \u00b7 ' + comp,\n    agency:AGENCY[bloc]\n  };\n}\nbuildAssignments();\n\n\/* ==================================================================\n   SFX \u2014 everything synthesized live. No audio files, nothing to load.\n   Starts only on a deliberate click (browsers block autoplay anyway).\n   ================================================================== *\/\nvar SFX = (function(){\n  var ctx = null, master = null, noiseBuf = null, on = false, lastKey = 0;\n  var nodes = [], timers = [];\n\n  \/* D harmonic minor \u2014 the raised 7th against the flat 6th is what\n     gives it the Eastern European colour. *\/\n  var MOTIF = [293.66, 349.23, 392.00, 440.00, 466.16, 554.37, 587.33, 698.46];\n  var DRONE = [73.42, 110.00, 146.83];\n\n\n  function init(){\n    if (ctx) return true;\n    var AC = window.AudioContext || window.webkitAudioContext;\n    if (!AC) return false;\n    ctx = new AC();\n    master = ctx.createGain();\n    master.gain.value = 0;\n    master.connect(ctx.destination);\n    var len = Math.floor(ctx.sampleRate * 2);\n    noiseBuf = ctx.createBuffer(1, len, ctx.sampleRate);\n    var d = noiseBuf.getChannelData(0);\n    for (var i=0;i<len;i++) d[i] = Math.random()*2 - 1;\n    return true;\n  }\n\n  \/* --- mechanical keypress: noise snap over a low thock --- *\/\n  function key(){\n    if (!on || !ctx) return;\n    var t = ctx.currentTime;\n    if (t - lastKey < 0.022) return;\n    lastKey = t;\n\n    var s = ctx.createBufferSource(); s.buffer = noiseBuf;\n    s.playbackRate.value = 0.8 + Math.random()*0.5;\n    var bp = ctx.createBiquadFilter();\n    bp.type = 'bandpass'; bp.frequency.value = 1700 + Math.random()*1000; bp.Q.value = 1.3;\n    var g = ctx.createGain();\n    g.gain.setValueAtTime(0.11, t);\n    g.gain.exponentialRampToValueAtTime(0.0008, t + 0.042);\n    s.connect(bp); bp.connect(g); g.connect(master);\n    s.start(t); s.stop(t + 0.06);\n\n    var o = ctx.createOscillator(); o.type = 'sine';\n    o.frequency.setValueAtTime(190 + Math.random()*50, t);\n    o.frequency.exponentialRampToValueAtTime(72, t + 0.05);\n    var og = ctx.createGain();\n    og.gain.setValueAtTime(0.075, t);\n    og.gain.exponentialRampToValueAtTime(0.0008, t + 0.06);\n    o.connect(og); og.connect(master);\n    o.start(t); o.stop(t + 0.08);\n  }\n\n  \/* --- confirmation tone when something locks in --- *\/\n  function beep(freq, dur, vol){\n    if (!on || !ctx) return;\n    var t = ctx.currentTime;\n    var o = ctx.createOscillator(); o.type = 'sine';\n    o.frequency.value = freq || 720;\n    var g = ctx.createGain();\n    g.gain.setValueAtTime(0, t);\n    g.gain.linearRampToValueAtTime(vol || 0.07, t + 0.012);\n    g.gain.exponentialRampToValueAtTime(0.0006, t + (dur || 0.18));\n    o.connect(g); g.connect(master);\n    o.start(t); o.stop(t + (dur || 0.18) + 0.05);\n  }\n\n  \/* --- sparse minor-key phrase, long tail --- *\/\n  function note(freq, delay){\n    if (!on || !ctx) return;\n    var t = ctx.currentTime + (delay || 0);\n    var o = ctx.createOscillator(); o.type = 'triangle'; o.frequency.value = freq;\n    var lp = ctx.createBiquadFilter(); lp.type = 'lowpass'; lp.frequency.value = 1500;\n    var g = ctx.createGain();\n    g.gain.setValueAtTime(0, t);\n    g.gain.linearRampToValueAtTime(0.055, t + 0.55);\n    g.gain.exponentialRampToValueAtTime(0.0005, t + 3.4);\n    o.connect(lp); lp.connect(g); g.connect(echo);\n    o.start(t); o.stop(t + 3.6);\n  }\n\n  var echo = null;\n  function buildBed(){\n    echo = ctx.createDelay(1.2);\n    echo.delayTime.value = 0.44;\n    var fb = ctx.createGain(); fb.gain.value = 0.34;\n    var wet = ctx.createBiquadFilter(); wet.type = 'lowpass'; wet.frequency.value = 2200;\n    echo.connect(fb); fb.connect(echo);\n    echo.connect(wet); wet.connect(master);\n\n    \/* low drone *\/\n    DRONE.forEach(function(f, i){\n      var o = ctx.createOscillator();\n      o.type = i === 2 ? 'triangle' : 'sawtooth';\n      o.frequency.value = f;\n      o.detune.value = (i - 1) * 4;\n      var lp = ctx.createBiquadFilter(); lp.type = 'lowpass';\n      lp.frequency.value = 260; lp.Q.value = 0.8;\n      var g = ctx.createGain(); g.gain.value = i === 0 ? 0.10 : 0.045;\n      o.connect(lp); lp.connect(g); g.connect(master);\n      o.start();\n      nodes.push(o);\n\n      \/* slow filter drift, like a signal wandering *\/\n      var lfo = ctx.createOscillator(); lfo.frequency.value = 0.03 + i*0.017;\n      var lg = ctx.createGain(); lg.gain.value = 70;\n      lfo.connect(lg); lg.connect(lp.frequency);\n      lfo.start(); nodes.push(lfo);\n    });\n\n    \/* shortwave static *\/\n    var st = ctx.createBufferSource();\n    st.buffer = noiseBuf; st.loop = true;\n    var sbp = ctx.createBiquadFilter();\n    sbp.type = 'bandpass'; sbp.frequency.value = 1150; sbp.Q.value = 0.7;\n    var sg = ctx.createGain(); sg.gain.value = 0.016;\n    st.connect(sbp); sbp.connect(sg); sg.connect(master);\n    st.start(); nodes.push(st);\n\n    var drift = ctx.createOscillator(); drift.frequency.value = 0.07;\n    var dg = ctx.createGain(); dg.gain.value = 0.009;\n    drift.connect(dg); dg.connect(sg.gain);\n    drift.start(); nodes.push(drift);\n  }\n\n  function motifLoop(){\n    if (!on) return;\n    var i = Math.floor(Math.random()*MOTIF.length);\n    note(MOTIF[i], 0);\n    if (Math.random() < 0.45 && i > 0) note(MOTIF[i-1], 0.9 + Math.random()*0.5);\n    timers.push(setTimeout(motifLoop, 4500 + Math.random()*6500));\n  }\n  function stationLoop(){\n    if (!on) return;\n    var count = 3 + Math.floor(Math.random()*3);\n    var f = 700 + Math.random()*180;\n    for (var i=0;i<count;i++){\n      (function(k){ timers.push(setTimeout(function(){ beep(f, 0.14, 0.035); }, k*430)); })(i);\n    }\n    timers.push(setTimeout(stationLoop, 26000 + Math.random()*28000));\n  }\n\n  \/* iOS routes Web Audio through the \"ambient\" audio session, which the\n     hardware ringer switch silences \u2014 the synth runs but you hear nothing.\n     Keeping a real <audio> element playing flips the page into the playback\n     session, so the switch stops muting us. *\/\n  var silentEl = null;\n  var SILENT_WAV = 'data:audio\/wav;base64,UklGRuwAAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==';\n  function unlockMedia(){\n    try {\n      if (!silentEl){\n        silentEl = document.createElement('audio');\n        silentEl.src = SILENT_WAV;\n        silentEl.loop = true;\n        silentEl.volume = 0.001;\n        silentEl.setAttribute('playsinline','');\n        silentEl.setAttribute('webkit-playsinline','');\n      }\n      var pr = silentEl.play();\n      if (pr && pr.catch) pr.catch(function(){});\n    } catch(err){}\n  }\n\n  function start(){\n    if (!init()) return false;\n    unlockMedia();                       \/* must happen inside the click *\/\n    on = true;\n\n    var go = function(){\n      if (!on || !ctx) return;\n      if (!echo) buildBed();\n      var t = ctx.currentTime;\n      master.gain.cancelScheduledValues(t);\n      master.gain.setValueAtTime(master.gain.value, t);\n      master.gain.linearRampToValueAtTime(0.5, t + 2.2);\n      motifLoop(); stationLoop();\n      beep(880, 0.12, 0.05);\n    };\n\n    \/* resume() is a promise on iOS \u2014 scheduling before it settles is silent *\/\n    if (ctx.state !== 'running'){\n      var r = ctx.resume();\n      if (r && r.then) r.then(go, go); else go();\n    } else go();\n    return true;\n  }\n  function stop(){\n    on = false;\n    timers.forEach(clearTimeout); timers = [];\n    if (silentEl){ try { silentEl.pause(); } catch(err){} }\n    if (!ctx) return;\n    master.gain.cancelScheduledValues(ctx.currentTime);\n    master.gain.setValueAtTime(master.gain.value, ctx.currentTime);\n    master.gain.linearRampToValueAtTime(0, ctx.currentTime + 0.7);\n  }\n  return {\n    start:start, stop:stop, key:key, beep:beep,\n    isOn:function(){ return on; },\n    state:function(){ return ctx ? ctx.state : 'none'; },\n    duck:function(hidden){\n      if (!ctx || !on) return;\n      if (hidden) ctx.suspend(); else ctx.resume();\n    }\n  };\n})();\n\nvar audioBtn = $('audio-toggle'), audioLabel = $('audio-label'), replayBtn = $('replay');\naudioBtn.addEventListener('click', function(){\n  if (SFX.isOn()){\n    SFX.stop();\n    audioBtn.classList.remove('on');\n    audioBtn.setAttribute('aria-pressed','false');\n    audioLabel.textContent = 'Sound off';\n  } else if (SFX.start()){\n    audioBtn.classList.add('on');\n    audioBtn.setAttribute('aria-pressed','true');\n    audioLabel.textContent = 'Sound on';\n    if (window.matchMedia && window.matchMedia('(hover:none)').matches) showHint(6000);\n    setTimeout(function(){\n      if (SFX.isOn() && SFX.state() !== 'running') audioLabel.textContent = 'Tap again';\n    }, 900);\n  } else {\n    audioLabel.textContent = 'Unavailable';\n  }\n});\nvar hintTimer = null;\nfunction showHint(ms){\n  var h = $('audio-hint');\n  h.hidden = false;\n  clearTimeout(hintTimer);\n  hintTimer = setTimeout(function(){ h.hidden = true; }, ms);\n}\ndocument.addEventListener('visibilitychange', function(){ SFX.duck(document.hidden); });\n\n\/* ---------------- Animation helpers ---------------- *\/\nvar POOL='\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042d\u042e\u042fABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\nfunction rnd(){ return POOL.charAt(Math.floor(Math.random()*POOL.length)); }\n\nfunction scramble(el,target,dur){\n  return new Promise(function(resolve){\n    if (reduce){ el.textContent = target; resolve(); return; }\n    var chars = target.split('');\n    var starts = chars.map(function(ch,i){\n      return \/[A-Za-z0-9\\u0400-\\u04ff]\/.test(ch) ? (i\/chars.length)*dur*0.68 + Math.random()*dur*0.22 : 0;\n    });\n    var t0 = performance.now(), locked = 0;\n    (function frame(now){\n      var t = now - t0, done = true, out = '', count = 0;\n      for (var i=0;i<chars.length;i++){\n        if (t >= starts[i] + dur*0.24){ out += chars[i]; count++; }\n        else { out += rnd(); done = false; }\n      }\n      if (count > locked){ locked = count; SFX.key(); }\n      el.textContent = out;\n      if (done || t > dur*1.6){ el.textContent = target; resolve(); }\n      else requestAnimationFrame(frame);\n    })(t0);\n  });\n}\nfunction typeOut(el,text,speed){\n  return new Promise(function(resolve){\n    if (reduce){ el.textContent = text; resolve(); return; }\n    el.textContent = ''; var i = 0;\n    var id = setInterval(function(){\n      el.textContent = text.slice(0,++i);\n      if (text.charAt(i-1) !== ' ') SFX.key();\n      if (i >= text.length){ clearInterval(id); resolve(); }\n    }, speed);\n  });\n}\nfunction wait(ms){ return new Promise(function(r){ setTimeout(r, reduce ? 0 : ms); }); }\nfunction $(id){ return document.getElementById(id); }\n\n\/* ---------------- Config into the page ---------------- *\/\n$('v-place').firstChild.nodeValue = CONFIG.place;  $('v-place-sub').textContent = CONFIG.placeSub;\n$('v-date').firstChild.nodeValue  = CONFIG.date;   $('v-date-sub').textContent  = CONFIG.dateSub;\n$('v-time').firstChild.nodeValue  = CONFIG.time;   $('v-time-sub').textContent  = CONFIG.timeSub;\n$('foot-line').textContent = CONFIG.place + ' \u00b7 ' + CONFIG.date + ' \u00b7 ' + CONFIG.time;\n$('o-time').textContent = CONFIG.time + ' on ' + CONFIG.date + '. ' + CONFIG.place +\n  '. Late arrivals will be logged and gently mocked.';\n\n\/* ---------------- Curtain marquee ---------------- *\/\n(function(){\n  var unit = '';\n  for (var i=0;i<8;i++) unit += '<span>\u0416\u0435\u043b\u0435\u0437\u043d\u044b\u0439 \u0437\u0430\u043d\u0430\u0432\u0435\u0441<\/span><span>Iron Curtain<\/span>';\n  $('track').innerHTML = unit + unit;\n})();\n\n\/* ---------------- Boot sequence ---------------- *\/\nvar bootLines = [\n  '> \u041f\u0420\u0418\u0401\u041c \/\/ INCOMING TRANSMISSION',\n  '> \u0418\u0421\u0422\u041e\u0427\u041d\u0418\u041a: UNLISTED TRANSMITTER, BAND 7.13 MHz',\n  '> \u0414\u0415\u0428\u0418\u0424\u0420\u041e\u0412\u041a\u0410 \/\/ DECRYPTING...'\n];\nvar headline = $('headline'), bootEl = $('boot'), done = false;\n\nfunction finish(){\n  if (done) return;\n  done = true;\n  headline.textContent = \"YOU'RE INVITED\";\n  ['sub','vitals','cue'].forEach(function(id){ $(id).classList.add('on'); });\n  SFX.beep(660, 0.5, 0.06);\n  replayBtn.hidden = false;\n}\nasync function boot(){\n  if (reduce){ bootEl.textContent = bootLines.join('\\n'); finish(); return; }\n  for (var i=0;i<bootLines.length;i++){\n    var p = document.createElement('p');\n    bootEl.appendChild(p);\n    await typeOut(p, bootLines[i], 11);\n    await wait(90);\n  }\n  await wait(180);\n  if (done) return;\n  await scramble(headline,'\u0412\u042b \u041f\u0420\u0418\u0413\u041b\u0410\u0428\u0415\u041d\u042b',800);\n  await wait(620);\n  if (done) return;\n  await scramble(headline,\"YOU'RE INVITED\",780);\n  finish();\n}\nreplayBtn.addEventListener('click', async function(){\n  if (replayBtn.disabled) return;\n  replayBtn.disabled = true;\n  window.scrollTo({top:0, behavior: reduce ? 'auto' : 'smooth'});\n  bootEl.textContent = '';\n  await wait(400);\n  for (var i=0;i<bootLines.length;i++){\n    var p = document.createElement('p');\n    bootEl.appendChild(p);\n    await typeOut(p, bootLines[i], 11);\n    await wait(90);\n  }\n  await wait(160);\n  await scramble(headline,'\u0412\u042b \u041f\u0420\u0418\u0413\u041b\u0410\u0428\u0415\u041d\u042b',800);\n  await wait(620);\n  await scramble(headline,\"YOU'RE INVITED\",780);\n  SFX.beep(660, 0.5, 0.06);\n  replayBtn.disabled = false;\n});\ndocument.querySelector('.console').addEventListener('click', function(e){\n  if (e.target.closest('.audiobar')) return;\n  finish();\n});\nboot();\n\n\/* ---------------- Guest terminal ---------------- *\/\nvar input = $('who'), note = $('note'), dossier = $('dossier'), busy = false, lastText = '';\nvar lastA = null, lastName = '';\nvar DEFAULT_NOTE = \"Files are permanent. Choose the spelling you'll answer to at the door.\";\n\nasync function openFile(){\n  var raw = input.value;\n  if (!norm(raw)){\n    note.className = 'note error';\n    note.textContent = 'No name entered. The console cannot open an empty file.';\n    input.focus(); return;\n  }\n  if (busy) return;\n  busy = true;\n  note.className = 'note';\n  note.textContent = 'Cross-referencing ' + raw.trim() + '...';\n\n  var a = assign(raw), name = raw.trim();\n  lastA = a; lastName = name;\n  dossier.classList.add('on');\n  $('rsvp-copy').textContent = 'Transmit this file back to Central. ' + name +\n    ' will be logged as ' + a.blocName + ' bloc, ' + a.cat + '.';\n  $('rsvp-note').className = 'note';\n  $('rsvp-note').textContent = '';\n  $('f-agency').textContent = a.agency;\n  $('f-num').textContent = 'FILE ' + a.num;\n  $('f-stamp').className = 'stamp ' + a.bloc;\n  $('f-stamp').textContent = a.blocName + ' Bloc';\n  $('f-rolecyr').textContent = a.role.c;\n  $('f-bloc').textContent = a.blocName;\n  $('f-cat').textContent = a.cat;\n  $('f-clear').textContent = a.clearance;\n\n  await scramble($('f-role'), a.role.t, 620);\n  await scramble($('f-code'), a.code, 420);\n  await typeOut($('f-bio'), a.role.b, 9);\n  await typeOut($('f-fit'), a.role.f, 8);\n  SFX.beep(560, 0.4, 0.055);\n\n  note.textContent = 'File open. ' + name + ' \u2014 ' + a.blocName + ' bloc, ' + a.cat + '.';\n  lastText = name + ' \u2014 ' + a.blocName.toUpperCase() + ' BLOC (' + a.cat.toUpperCase() + ')\\n' +\n    'Codename: ' + a.code + '\\nRole: ' + a.role.t + '\\n' +\n    'Clearance: ' + a.clearance + ' \u00b7 File ' + a.num + '\\n\\n' + a.role.b +\n    '\\n\\nCostume: ' + a.role.f + '\\n\\nThe Cold Pour: Operation 35\\n' +\n    CONFIG.place + ' \u00b7 ' + CONFIG.date + ' \u00b7 ' + CONFIG.time;\n  busy = false;\n}\n$('go').addEventListener('click', openFile);\ninput.addEventListener('keydown', function(e){ if (e.key === 'Enter') openFile(); });\ninput.addEventListener('input', function(){\n  if (note.className === 'note error'){ note.className = 'note'; note.textContent = DEFAULT_NOTE; }\n});\n$('again').addEventListener('click', function(){\n  dossier.classList.remove('on');\n  input.value = '';\n  $('rsvp-msg').value = '';\n  $('rsvp-note').textContent = '';\n  $('rsvp-note').className = 'note';\n  lastA = null; lastName = '';\n  note.className = 'note';\n  note.textContent = 'Terminal cleared. Enter the next name.';\n  input.focus();\n});\n\n\/* ---------------- RSVP ---------------- *\/\nvar rsvpNote = $('rsvp-note'), rsvpBusy = false;\n\nfunction rsvpSummary(status){\n  var a = lastA, msg = $('rsvp-msg').value.trim();\n  return [\n    'RSVP: ' + status,\n    'Guest: ' + lastName,\n    '',\n    'Bloc: ' + a.blocName,\n    'Classification: ' + a.cat,\n    'Codename: ' + a.code,\n    'Role: ' + a.role.t,\n    'File: ' + a.num,\n    'Clearance: ' + a.clearance,\n    '',\n    'Message: ' + (msg || '(none)'),\n    '',\n    'The Cold Pour: Operation 35',\n    CONFIG.place + ' \u00b7 ' + CONFIG.date + ' \u00b7 ' + CONFIG.time\n  ].join('\\n');\n}\nfunction openMailto(status){\n  window.location.href = 'mailto:' + encodeURIComponent(CONFIG.rsvpEmail) +\n    '?subject=' + encodeURIComponent('RSVP \u2014 ' + lastName + ' \u2014 ' + status) +\n    '&body=' + encodeURIComponent(rsvpSummary(status));\n}\nasync function sendRSVP(status){\n  if (!lastA || rsvpBusy) return;\n  if ($('rsvp-hp').value) return;                       \/* honeypot: bots only *\/\n  rsvpBusy = true;\n  rsvpNote.className = 'note';\n\n  if (!CONFIG.rsvpEndpoint){\n    rsvpNote.textContent = 'Opening your mail app \u2014 press send to transmit the file.';\n    openMailto(status);\n    rsvpBusy = false;\n    return;\n  }\n\n  rsvpNote.textContent = 'Transmitting...';\n  try {\n    var res = await fetch(CONFIG.rsvpEndpoint, {\n      method:'POST',\n      headers:{'Content-Type':'application\/json','Accept':'application\/json'},\n      body: JSON.stringify({\n        _subject: 'RSVP \u2014 ' + lastName + ' \u2014 ' + status,\n        rsvp: status,\n        guest: lastName,\n        bloc: lastA.blocName,\n        classification: lastA.cat,\n        codename: lastA.code,\n        role: lastA.role.t,\n        file: lastA.num,\n        message: $('rsvp-msg').value.trim(),\n        summary: rsvpSummary(status)\n      })\n    });\n    if (!res.ok) throw new Error('HTTP ' + res.status);\n    rsvpNote.className = 'note sent';\n    rsvpNote.textContent = 'Transmission received. ' + lastName + ' logged as ' + status.toLowerCase() + '.';\n  } catch (err){\n    rsvpNote.textContent = 'Transmission failed \u2014 opening your mail app instead.';\n    openMailto(status);\n  }\n  rsvpBusy = false;\n}\n$('rsvp-yes').addEventListener('click', function(){ sendRSVP('ACCEPTING'); });\n$('rsvp-no').addEventListener('click',  function(){ sendRSVP('DECLINING'); });\n\n\/* ---------------- Clipboard ---------------- *\/\nfunction copyTo(btn, text, okLabel){\n  var original = btn.dataset.label || btn.textContent;\n  btn.dataset.label = original;\n  var reset = function(){ setTimeout(function(){ btn.textContent = original; }, 1600); };\n  if (!text){ btn.textContent = okLabel || 'Nothing to copy'; reset(); return; }\n  if (navigator.clipboard && navigator.clipboard.writeText){\n    navigator.clipboard.writeText(text).then(\n      function(){ btn.textContent = okLabel || 'Copied'; reset(); },\n      function(){ btn.textContent = 'Copy failed'; reset(); });\n  } else { btn.textContent = 'Copy unavailable'; reset(); }\n}\n$('copy').addEventListener('click', function(){ copyTo(this, lastText, 'Copied'); });\n\n\/* ================= CENTRAL REGISTRY ================= *\/\nvar hq = $('hq'), hqBody = $('hq-body'), roster = [];\n\nfunction openHQ(){ hq.classList.add('on'); document.body.style.overflow = 'hidden'; $('hq-input').focus(); }\nfunction closeHQ(){ hq.classList.remove('on'); document.body.style.overflow = ''; }\n\nfunction buildRoster(){\n  var names = $('hq-input').value.split('\\n')\n    .map(function(s){ return s.replace(\/^[\\s,;\\-\u2022*\\d.)]+\/,'').trim(); })\n    .filter(function(s){ return norm(s).length > 0; });\n\n  var seen = {};\n  roster = [];\n  names.forEach(function(n){\n    var k = norm(n);\n    if (seen[k]) return;\n    seen[k] = 1;\n    roster.push({ name:n.trim() });\n  });\n  GUESTS = roster.map(function(r){ return r.name; });\n  buildAssignments();\n  render();\n}\n\nfunction render(){\n  var t = {total:roster.length, east:0, west:0, Spy:0, Diplomat:0, Scientist:0, Civilian:0};\n  hqBody.innerHTML = '';\n\n  roster.forEach(function(row, idx){\n    row.a = assign(row.name);\n    t[row.a.bloc]++; t[row.a.cat]++;\n\n    var tr = document.createElement('tr');\n\n    var td1 = document.createElement('td'); td1.className = 'nm'; td1.textContent = row.name;\n    var td2 = document.createElement('td');\n    var chip = document.createElement('span');\n    chip.className = 'chip ' + row.a.bloc +\n      (RESOLVED[row.a.key] && RESOLVED[row.a.key].locked ? ' locked' : (PINS[row.a.key] ? ' pinned' : ''));\n    chip.textContent = row.a.blocName;\n    td2.appendChild(chip);\n    var td3 = document.createElement('td'); td3.textContent = row.a.cat;\n    var td4 = document.createElement('td'); td4.textContent = row.a.code;\n    var td5 = document.createElement('td'); td5.textContent = row.a.role.t;\n    var td6 = document.createElement('td'); td6.textContent = row.a.num;\n    var td7 = document.createElement('td');\n    var btn = document.createElement('button');\n    btn.className = 'flip'; btn.type = 'button';\n    btn.textContent = 'Flip to ' + (row.a.bloc === 'east' ? 'West' : 'East');\n    if (RESOLVED[row.a.key] && RESOLVED[row.a.key].locked){\n      btn.disabled = true;\n      btn.textContent = 'Locked';\n      btn.title = 'Already has a file \u2014 edit the LOCKED block to change it';\n    }\n    btn.addEventListener('click', function(){\n      if (btn.disabled) return;\n      PINS[row.a.key] = (row.a.bloc === 'east') ? 'west' : 'east';\n      buildAssignments();\n      render();\n    });\n    td7.appendChild(btn);\n\n    [td1,td2,td3,td4,td5,td6,td7].forEach(function(td){ tr.appendChild(td); });\n    hqBody.appendChild(tr);\n  });\n\n  $('t-total').textContent = t.total;\n  $('t-east').textContent = t.east;\n  $('t-west').textContent = t.west;\n  $('t-spy').textContent = t.Spy;\n  $('t-dip').textContent = t.Diplomat;\n  $('t-sci').textContent = t.Scientist;\n  $('t-civ').textContent = t.Civilian;\n\n  var roleSeen = {}, codeSeen = {}, clash = 0;\n  roster.forEach(function(r){\n    var rk = r.a.bloc + '|' + r.a.role.t;\n    if (roleSeen[rk] || codeSeen[r.a.code]) clash++;\n    roleSeen[rk] = 1; codeSeen[r.a.code] = 1;\n  });\n  var warn = $('hq-clash');\n  if (!roster.length) warn.hidden = true;\n  else if (clash){\n    warn.hidden = false;\n    warn.className = 'hq-clash bad';\n    warn.textContent = clash + ' duplicate role or codename \\u2014 press Copy guest list, then paste it into the file.';\n  } else {\n    warn.hidden = false;\n    warn.className = 'hq-clash good';\n    warn.textContent = 'All ' + roster.length + ' assignments unique. Paste the guest list into the file to lock it in for guests.';\n  }\n\n  var has = roster.length > 0;\n  $('hq-tally').style.display = has ? '' : 'none';\n  $('hq-tablewrap').style.display = has ? '' : 'none';\n  $('hq-empty').style.display = has ? 'none' : '';\n}\n\nfunction csvCell(v){ return '\"' + String(v).replace(\/\"\/g,'\"\"') + '\"'; }\n\n$('hq-open').addEventListener('click', openHQ);\n$('hq-close').addEventListener('click', closeHQ);\n$('hq-build').addEventListener('click', buildRoster);\n$('hq-clear').addEventListener('click', function(){\n  $('hq-input').value = ''; roster = []; render();\n});\n$('hq-csv').addEventListener('click', function(){\n  if (!roster.length) return copyTo(this, '', 'Nothing to copy');\n  var out = ['Guest,Bloc,Classification,Codename,Role,File'];\n  roster.forEach(function(r){\n    out.push([r.name, r.a.blocName, r.a.cat, r.a.code, r.a.role.t, r.a.num].map(csvCell).join(','));\n  });\n  copyTo(this, out.join('\\n'), 'CSV copied');\n});\n$('hq-guests').addEventListener('click', function(){\n  if (!roster.length) return copyTo(this, '', 'Nothing to copy');\n  var lines = roster.map(function(r){ return '  \"' + r.name.replace(\/\"\/g,'\\\\\"') + '\"'; });\n  copyTo(this, 'var GUESTS = [\\n' + lines.join(',\\n') + '\\n];', 'List copied');\n});\n$('hq-pins').addEventListener('click', function(){\n  var keys = Object.keys(PINS);\n  if (!keys.length) return copyTo(this, '', 'No pins set');\n  var lines = keys.map(function(k){ return '  \"' + k + '\": \"' + PINS[k] + '\"'; });\n  copyTo(this, 'var ROSTER = {\\n' + lines.join(',\\n') + '\\n};', 'Snippet copied');\n});\n\n\/* ---------------- Tabs ---------------- *\/\nArray.prototype.forEach.call(document.querySelectorAll('.tab'), function(btn){\n  btn.addEventListener('click', function(){\n    Array.prototype.forEach.call(document.querySelectorAll('.tab'), function(b){ b.classList.toggle('on', b === btn); });\n    Array.prototype.forEach.call(document.querySelectorAll('.tabpanel'), function(p){\n      p.classList.toggle('on', p.id === 'tab-' + btn.dataset.tab);\n    });\n  });\n});\n$('hq-print').addEventListener('click', function(){ window.print(); });\n\n\/* ---------------- Scoreboard ---------------- *\/\nvar EVENTS = [\n  {k:'mis',  n:'The Missile Crisis',       p:30, f:'Full bloc \u00b7 30 min'},\n  {k:'arms', n:'The Arms Race',            p:25, f:'Full bloc \u00b7 25 min'},\n  {k:'foos', n:'Summer Olympic Showdown',  p:20, f:'Four assets \u00b7 foosball'},\n  {k:'pong', n:'Beer Pong',                p:20, f:'Four assets \u00b7 30 min'},\n  {k:'cost', n:'Best Costume',             p:15, f:'Guest vote \u00b7 show of hands'},\n  {k:'esp',  n:'Espionage Bonus',          p:10, f:\"Host's discretion \u00b7 bribes accepted\"}\n];\nvar TOTAL_POINTS = EVENTS.reduce(function(a,e){ return a + e.p; }, 0);\nvar results = {};\n\nfunction encodeScores(){\n  return EVENTS.map(function(e){ return results[e.k] || '-'; }).join('');\n}\nfunction decodeScores(str){\n  results = {};\n  EVENTS.forEach(function(e,i){\n    var c = str.charAt(i);\n    if (c === 'e' || c === 'w' || c === 's') results[e.k] = c;\n  });\n}\nfunction syncHash(){\n  if (!hq.classList.contains('on')) return;\n  var enc = encodeScores();\n  var target = '#hq' + (\/[ews]\/.test(enc) ? '!' + enc : '');\n  if (location.hash !== target){\n    try { history.replaceState(null, '', target); } catch(err){ \/* file:\/\/ \u2014 skip *\/ }\n  }\n}\nfunction scoreTotals(){\n  var e = 0, w = 0;\n  EVENTS.forEach(function(ev){\n    var r = results[ev.k];\n    if (r === 'e') e += ev.p;\n    else if (r === 'w') w += ev.p;\n    else if (r === 's'){ e += ev.p\/2; w += ev.p\/2; }\n  });\n  return {e:e, w:w};\n}\nfunction renderScores(){\n  var list = $('score-list');\n  list.innerHTML = '';\n  EVENTS.forEach(function(ev){\n    var row = document.createElement('div'); row.className = 'srow';\n    var meta = document.createElement('div'); meta.className = 'meta';\n    var b = document.createElement('b'); b.textContent = ev.n;\n    var s = document.createElement('span'); s.textContent = ev.f + ' \u00b7 ' + ev.p + ' pts';\n    meta.appendChild(b); meta.appendChild(s);\n\n    var set = document.createElement('div'); set.className = 'btnset';\n    [['e','East'],['s','Tie'],['w','West'],['-','Clear']].forEach(function(pair){\n      var btn = document.createElement('button'); btn.type = 'button'; btn.textContent = pair[1];\n      if (results[ev.k] === pair[0]) btn.className = 'win-' + pair[0];\n      btn.addEventListener('click', function(){\n        if (pair[0] === '-') delete results[ev.k];\n        else results[ev.k] = pair[0];\n        renderScores(); syncHash();\n      });\n      set.appendChild(btn);\n    });\n\n    row.appendChild(meta); row.appendChild(set);\n    list.appendChild(row);\n  });\n\n  var t = scoreTotals();\n  $('s-east').textContent = t.e;\n  $('s-west').textContent = t.w;\n  var played = EVENTS.filter(function(ev){ return results[ev.k]; })\n                     .reduce(function(a,ev){ return a + ev.p; }, 0);\n  var left = TOTAL_POINTS - played;\n  var lead;\n  if (!played) lead = 'No events scored yet \u00b7 ' + TOTAL_POINTS + ' points in play';\n  else if (t.e === t.w) lead = 'Dead heat \u00b7 ' + left + ' points still in play';\n  else lead = (t.e > t.w ? 'East' : 'West') + ' leads by ' + Math.abs(t.e - t.w) +\n              ' \u00b7 ' + (left ? left + ' points still in play' : 'all events scored');\n  $('s-leader').textContent = lead;\n}\n$('score-reset').addEventListener('click', function(){ results = {}; renderScores(); syncHash(); });\n$('score-copy').addEventListener('click', function(){\n  var t = scoreTotals();\n  var out = ['THE COLD POUR: OPERATION 35 \u2014 FINAL STANDINGS',\n             'Eastern Bloc ' + t.e + '  \u00b7  Western Bloc ' + t.w, ''];\n  EVENTS.forEach(function(ev){\n    var r = results[ev.k];\n    out.push(ev.n + ' (' + ev.p + ') \u2014 ' +\n      (r === 'e' ? 'East' : r === 'w' ? 'West' : r === 's' ? 'Tie' : 'not played'));\n  });\n  copyTo(this, out.join('\\n'), 'Result copied');\n});\n\n\/* ---------------- Run of show ---------------- *\/\nvar RUN = [\n  {t:0,   d:45, n:'Arrival & the Defection Desk', lead:'Both hosts',\n   note:'One table by the door: name tag, dossier card, bloc marker (red armband or blue lapel pin), first drink. Guests who never opened their file get assigned on the spot from the roster tab.'},\n  {t:45,  d:10, n:'Opening statement', lead:'Secretary-General',\n   note:'Welcome both delegations, read the rules of engagement, and name a Bloc Chief for each side. The Chiefs \u2014 not you \u2014 are responsible for getting their people to every event.'},\n  {t:55,  d:30, n:'The Missile Crisis', lead:'Secretary-General',\n   note:'Highest-value event, so run it while everyone is fresh. Two hidden grids, alternating salvos, whole bloc shouting coordinates. 30 points.'},\n  {t:85,  d:25, n:'Neutral Zone opens', lead:'Bloc Chiefs',\n   note:'Deliberate downtime. Bar, food, photos, plotting. Do not program this \u2014 people need a gap to actually talk. Chiefs pick their foosball and beer pong assets here.'},\n  {t:110, d:25, n:'The Arms Race', lead:'Bloc Chiefs',\n   note:'Identical supplies to each side, tallest structure wins. Fast, loud, everybody plays. 25 points.'},\n  {t:135, d:30, n:'Summer Olympic Showdown & Beer Pong', lead:'Bloc Chiefs',\n   note:'Run both at once in different rooms \u2014 four players per bloc at each. 20 points apiece. Announce the foosball final loudly enough that people come watch it.'},\n  {t:165, d:20, n:'Resupply', lead:'Both hosts',\n   note:'Food out again, second round of cocktails. Say out loud that the auction is coming so people start caring about their chips.'},\n  {t:185, d:10, n:'Best Costume', lead:'Secretary-General',\n   note:'Show of hands, one winner per bloc, 15 points to the side with the better one. Rewards the people who committed to their dossier.'},\n  {t:195, d:5,  n:'Medal table', lead:'Secretary-General',\n   note:'Read the standings out loud, then hand out black-market chips: 3 per winning-bloc guest, 1 per losing-bloc guest, plus a bonus chip for each side\\u2019s MVP.'},\n  {t:200, d:30, n:'The Black Market', lead:'Agent 35',\n   note:'Auction the lots for chips. Keep them hidden until each one hits the block. Go fast, take bribes, be corrupt about it.'},\n  {t:230, d:20, n:'Ceasefire & cake', lead:'Secretary-General',\n   note:'Call the ceasefire live \\u2014 it is not on the website, so it lands as a surprise. Then the cake comes out. This is the only beat that must not be skipped or moved.'},\n  {t:250, d:0,  n:'Hostilities resume', lead:'Both hosts',\n   note:'Bar stays open, games stay out, no more scoring. Let it wind down on its own.'}\n];\nvar ticked = {};\n\nfunction clockAt(startStr, offset){\n  var parts = String(startStr || '17:00').split(':');\n  var mins = (parseInt(parts[0],10) || 0) * 60 + (parseInt(parts[1],10) || 0) + offset;\n  mins = ((mins % 1440) + 1440) % 1440;\n  var h = Math.floor(mins \/ 60), m = mins % 60;\n  var suffix = h >= 12 ? 'PM' : 'AM';\n  var h12 = h % 12; if (h12 === 0) h12 = 12;\n  return h12 + ':' + (m < 10 ? '0' : '') + m + ' ' + suffix;\n}\nfunction renderRun(){\n  var list = $('run-list'), start = $('run-start').value;\n  list.innerHTML = '';\n  RUN.forEach(function(item, i){\n    var row = document.createElement('div');\n    row.className = 'runrow' + (ticked[i] ? ' done' : '');\n\n    var cb = document.createElement('input');\n    cb.type = 'checkbox'; cb.checked = !!ticked[i];\n    cb.setAttribute('aria-label', 'Mark ' + item.n + ' complete');\n    cb.addEventListener('change', function(){ ticked[i] = cb.checked; renderRun(); });\n\n    var clock = document.createElement('div'); clock.className = 'clock';\n    clock.appendChild(document.createTextNode(clockAt(start, item.t)));\n    var em = document.createElement('em');\n    em.textContent = 'T+' + Math.floor(item.t\/60) + ':' + (item.t%60 < 10 ? '0' : '') + (item.t%60) +\n                     (item.d ? ' \u00b7 ' + item.d + ' min' : '');\n    clock.appendChild(em);\n\n    var body = document.createElement('div');\n    var b = document.createElement('b'); b.textContent = item.n;\n    var p = document.createElement('p'); p.textContent = item.note;\n    body.appendChild(b); body.appendChild(p);\n\n    var lead = document.createElement('div'); lead.className = 'lead'; lead.textContent = item.lead;\n\n    row.appendChild(cb); row.appendChild(clock); row.appendChild(body); row.appendChild(lead);\n    list.appendChild(row);\n  });\n}\n$('run-start').addEventListener('input', renderRun);\n$('run-reset').addEventListener('click', function(){ ticked = {}; renderRun(); });\n\n\/* ---------------- Entry points ---------------- *\/\ndocument.addEventListener('keydown', function(e){\n  if (e.key === 'Escape'){ if (hq.classList.contains('on')) closeHQ(); else finish(); }\n  if (e.shiftKey && (e.ctrlKey || e.metaKey) && (e.key === 'H' || e.key === 'h')){\n    e.preventDefault();\n    hq.classList.contains('on') ? closeHQ() : openHQ();\n  }\n});\nfunction checkHash(){\n  var h = location.hash.toLowerCase();\n  if (h.indexOf('#hq') !== 0) return;\n  var bang = h.indexOf('!');\n  if (bang > -1){ decodeScores(h.slice(bang + 1)); renderScores(); }\n  openHQ();\n}\nwindow.addEventListener('hashchange', checkHash);\n\nrender();\nrenderScores();\nrenderRun();\ncheckHash();\n})();\n<\/script>\n<\/body>\n<\/html><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>The Cold Pour: Operation (Nate&#8217;s Turning) 35 \u2014 Classified Hear nothing? Take your phone off silent. Sound off \u21bb Replay \u0421\u041e\u0412. \u0421\u0415\u041a\u0420\u0415\u0422\u041d\u041e \/\/ TOP SECRET \u00b7 EYES ONLY BAND 7.13 MHz \u25cf &nbsp; The Cold Pour \u00b7 Operation (Nate&#8217;s Turning) 35Two blocs \u00b7 one house \u00b7 classified cocktails \u041c\u0435\u0441\u0442\u043e \/ Location\u2014 \u0414\u0430\u0442\u0430 \/ Date\u2014 \u0412\u0440\u0435\u043c\u044f \/ Time\u2014 Continue\u25bc \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u00b7 &#8230; <\/p>\n<div><a href=\"https:\/\/thecoldpour-operation35.com\/\" class=\"more-link\">Read More<\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-blank-6.php","meta":{"footnotes":""},"class_list":["post-7","page","type-page","status-publish","hentry","no-post-thumbnail"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The Cold Pour: Operation (Nate&#039;s Turning) 35<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Cold Pour: Operation (Nate&#039;s Turning) 35\" \/>\n<meta property=\"og:description\" content=\"The Cold Pour: Operation (Nate&#039;s Turning) 35 \u2014 Classified Hear nothing? Take your phone off silent. Sound off \u21bb Replay \u0421\u041e\u0412. \u0421\u0415\u041a\u0420\u0415\u0422\u041d\u041e \/\/ TOP SECRET \u00b7 EYES ONLY BAND 7.13 MHz \u25cf &nbsp; The Cold Pour \u00b7 Operation (Nate&#039;s Turning) 35Two blocs \u00b7 one house \u00b7 classified cocktails \u041c\u0435\u0441\u0442\u043e \/ Location\u2014 \u0414\u0430\u0442\u0430 \/ Date\u2014 \u0412\u0440\u0435\u043c\u044f \/ Time\u2014 Continue\u25bc \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u00b7 ... Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecoldpour-operation35.com\/\" \/>\n<meta property=\"og:site_name\" content=\"The Cold Pour: Operation (Nate&#039;s Turning) 35\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-03T02:51:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecoldpour-operation35.com\/wp-content\/uploads\/2026\/08\/the-cold-pour-1024x536.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"536\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecoldpour-operation35.com\\\/\",\"url\":\"https:\\\/\\\/thecoldpour-operation35.com\\\/\",\"name\":\"The Cold Pour: Operation (Nate&#039;s Turning) 35\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecoldpour-operation35.com\\\/#website\"},\"datePublished\":\"2026-08-03T00:41:41+00:00\",\"dateModified\":\"2026-08-03T02:51:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecoldpour-operation35.com\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecoldpour-operation35.com\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecoldpour-operation35.com\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecoldpour-operation35.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Home\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecoldpour-operation35.com\\\/#website\",\"url\":\"https:\\\/\\\/thecoldpour-operation35.com\\\/\",\"name\":\"The Cold Pour: Operation (Nate&#039;s Turning) 35\",\"description\":\"Are you ready?\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecoldpour-operation35.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Cold Pour: Operation (Nate&#039;s Turning) 35","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"The Cold Pour: Operation (Nate&#039;s Turning) 35","og_description":"The Cold Pour: Operation (Nate's Turning) 35 \u2014 Classified Hear nothing? Take your phone off silent. Sound off \u21bb Replay \u0421\u041e\u0412. \u0421\u0415\u041a\u0420\u0415\u0422\u041d\u041e \/\/ TOP SECRET \u00b7 EYES ONLY BAND 7.13 MHz \u25cf &nbsp; The Cold Pour \u00b7 Operation (Nate's Turning) 35Two blocs \u00b7 one house \u00b7 classified cocktails \u041c\u0435\u0441\u0442\u043e \/ Location\u2014 \u0414\u0430\u0442\u0430 \/ Date\u2014 \u0412\u0440\u0435\u043c\u044f \/ Time\u2014 Continue\u25bc \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u00b7 ... Read More","og_url":"https:\/\/thecoldpour-operation35.com\/","og_site_name":"The Cold Pour: Operation (Nate&#039;s Turning) 35","article_modified_time":"2026-08-03T02:51:36+00:00","og_image":[{"width":1024,"height":536,"url":"https:\/\/thecoldpour-operation35.com\/wp-content\/uploads\/2026\/08\/the-cold-pour-1024x536.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/thecoldpour-operation35.com\/","url":"https:\/\/thecoldpour-operation35.com\/","name":"The Cold Pour: Operation (Nate&#039;s Turning) 35","isPartOf":{"@id":"https:\/\/thecoldpour-operation35.com\/#website"},"datePublished":"2026-08-03T00:41:41+00:00","dateModified":"2026-08-03T02:51:36+00:00","breadcrumb":{"@id":"https:\/\/thecoldpour-operation35.com\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecoldpour-operation35.com\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/thecoldpour-operation35.com\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecoldpour-operation35.com\/"},{"@type":"ListItem","position":2,"name":"Home"}]},{"@type":"WebSite","@id":"https:\/\/thecoldpour-operation35.com\/#website","url":"https:\/\/thecoldpour-operation35.com\/","name":"The Cold Pour: Operation (Nate&#039;s Turning) 35","description":"Are you ready?","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecoldpour-operation35.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/thecoldpour-operation35.com\/index.php?rest_route=\/wp\/v2\/pages\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecoldpour-operation35.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/thecoldpour-operation35.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/thecoldpour-operation35.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thecoldpour-operation35.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":17,"href":"https:\/\/thecoldpour-operation35.com\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions"}],"predecessor-version":[{"id":32,"href":"https:\/\/thecoldpour-operation35.com\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions\/32"}],"wp:attachment":[{"href":"https:\/\/thecoldpour-operation35.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}