/* Rations. A ration book and stamped keys: olive drab, khaki, stamp red, a stencil face. */
@font-face{font-family:'Black Ops One';font-weight:400;font-display:swap;src:url(fonts/black-ops-one-400.woff2) format('woff2')}
@font-face{font-family:'IBM Plex Mono';font-weight:500;font-display:swap;src:url(fonts/ibm-plex-mono-500.woff2) format('woff2')}
:root{--olive:#4b5320;--olive2:#5e6829;--olive3:#3a4018;--khaki:#d8c99b;--khaki2:#c9b985;--shade:#8f8460;--ink:#2b2f12;--cream:#efe6c4;--red:#b3261e;--red2:#d8392f;
--df:'Black Ops One',Impact,sans-serif;--mono:'IBM Plex Mono',ui-monospace,Menlo,Consolas,monospace;--bf:system-ui,-apple-system,'Segoe UI',Roboto,sans-serif}
*{box-sizing:border-box}
html{background:var(--olive);-webkit-text-size-adjust:100%}
body{margin:0;min-height:100vh;min-height:100dvh;color:var(--cream);font:16px/1.5 var(--bf);overflow-x:hidden;
background:radial-gradient(90% 60% at 0 0,var(--olive2),transparent 70%),radial-gradient(80% 50% at 100% 100%,var(--olive3),transparent 70%),var(--olive)}
body::before{content:'';position:fixed;inset:0;pointer-events:none;opacity:.35;mix-blend-mode:multiply;z-index:0;
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .2  0 0 0 0 .22  0 0 0 0 .08  0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E")}
body>*{position:relative;z-index:1}
a{color:var(--cream);text-underline-offset:.2em}
button{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--cream);outline-offset:2px}
[hidden]{display:none!important}
.sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

/* header */
.hd{display:flex;align-items:center;gap:8px;width:min(560px,100%);margin:0 auto;padding:12px 14px 6px}
.logo{font-family:var(--df);font-size:28px;letter-spacing:.04em;text-decoration:none;color:var(--cream);line-height:1}
.logo:hover{color:#fff}
.hd .no{white-space:nowrap;font-family:var(--df);font-size:14px;color:var(--khaki);letter-spacing:.06em;margin-left:4px;padding-top:4px}
.hd .sp{margin-left:auto}
.ib{width:42px;height:42px;display:grid;place-items:center;border:1.5px solid rgba(239,230,196,.45);border-radius:6px;background:transparent;cursor:pointer;text-decoration:none;color:var(--cream)}
.ib:hover{background:rgba(239,230,196,.12);color:#fff}
.ib svg{width:20px;height:20px}

/* the page of the ration book */
.book{width:min(560px,100%);margin:0 auto;padding:4px 12px calc(14px + env(safe-area-inset-bottom))}
.coupon{position:relative;background:var(--khaki);color:var(--ink);padding:14px 22px 14px;border-radius:4px;box-shadow:0 2px 0 var(--shade),0 12px 30px -14px rgba(0,0,0,.6)}
.coupon::before{content:'';position:absolute;inset:6px;border:1.5px dashed rgba(43,47,18,.45);border-radius:2px;pointer-events:none}
.coupon::after{content:'';position:absolute;inset:0;pointer-events:none;border-radius:4px;
background:radial-gradient(circle at 0 50%,var(--olive) 9px,transparent 9.5px),radial-gradient(circle at 100% 50%,var(--olive) 9px,transparent 9.5px)}
.c-top{display:flex;justify-content:space-between;gap:10px;font-family:var(--df);font-size:11px;letter-spacing:.1em;color:#5a5a2a}
.c-top span{white-space:nowrap}
.c-label{margin:8px 0 2px;font-family:var(--df);font-size:12px;letter-spacing:.16em;color:var(--red)}
.prompt{margin:0;font:700 clamp(20px,5.6vw,26px)/1.18 var(--bf);letter-spacing:-.01em;text-wrap:balance}
.c-foot{display:flex;justify-content:space-between;margin-top:10px;font-family:var(--df);font-size:12px;letter-spacing:.1em;color:#5a5a2a}
.c-foot b{font-weight:400;color:var(--ink);font-size:16px}
.coupon .stamp{position:absolute;right:16px;top:12px}

.stamp{display:inline-block;font-family:var(--df);color:var(--red);border:3px solid var(--red);padding:.06em .35em;transform:rotate(-12deg);text-transform:uppercase;mix-blend-mode:multiply;opacity:.92;letter-spacing:.04em;line-height:1.05;
-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='90' height='90'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='.5' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 -2.2 1.6'/%3E%3C/filter%3E%3Crect width='90' height='90' filter='url(%23n)'/%3E%3C/svg%3E");mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='90' height='90'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='.5' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 -2.2 1.6'/%3E%3C/filter%3E%3Crect width='90' height='90' filter='url(%23n)'/%3E%3C/svg%3E")}
.stamp.thump{animation:thump .45s cubic-bezier(.2,1.8,.4,1) both}
@keyframes thump{0%{transform:rotate(-12deg) scale(2.4);opacity:0}100%{transform:rotate(-12deg) scale(1);opacity:.92}}

/* what you've written */
.answer{margin:12px 0 0;min-height:96px;background:var(--cream);color:var(--ink);border-radius:4px;padding:12px 14px;font:500 19px/1.5 var(--mono);overflow-wrap:anywhere;white-space:pre-wrap;box-shadow:inset 0 2px 0 rgba(0,0,0,.06);cursor:text;
background-image:repeating-linear-gradient(transparent 0 27.5px,rgba(43,47,18,.13) 27.5px 28.5px);background-position:0 11px}
.answer .ph{color:#8b8566}
.answer .bad{text-decoration:underline wavy var(--red);text-decoration-thickness:2px;text-underline-offset:4px;color:var(--red)}
.caret{display:inline-block;width:2px;height:1.15em;background:var(--ink);vertical-align:-.2em;margin-left:1px;animation:caret 1s steps(1) infinite}
@keyframes caret{50%{opacity:0}}
.answer.done .caret{display:none}
.status{display:flex;justify-content:space-between;gap:10px;align-items:baseline;margin:8px 2px 0;font-size:14px;min-height:1.5em}
.status .msg{color:var(--khaki)}
.status .msg.err{color:#ffd2c8}
.status .cnt{font-family:var(--df);letter-spacing:.06em;color:var(--khaki);white-space:nowrap}
.meter{height:8px;margin:8px 2px 0;background:rgba(43,47,18,.55);border-radius:4px;overflow:hidden}
.meter i{display:block;height:100%;width:0;background:var(--khaki);transition:width .25s}
.meter.full i{background:var(--cream)}
.row-act{display:flex;gap:10px;margin:12px 0 10px}
.btn{flex:1;min-height:50px;border:0;border-radius:6px;background:var(--red);color:#fff;font-family:var(--df);font-size:20px;letter-spacing:.08em;cursor:pointer;box-shadow:0 4px 0 #7c1813;text-transform:uppercase;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;padding:0 18px}
.btn:active{transform:translateY(3px);box-shadow:0 1px 0 #7c1813}
.btn.ghost{background:transparent;border:2px solid var(--khaki);color:var(--cream);box-shadow:none}
.btn.ghost:hover{background:rgba(216,201,155,.12)}
.btn[disabled]{opacity:.5;cursor:not-allowed}
.shake{animation:shake .35s}
@keyframes shake{20%,60%{transform:translateX(-6px)}40%,80%{transform:translateX(6px)}}

/* keys */
.kb{display:grid;gap:7px;user-select:none;-webkit-user-select:none;touch-action:manipulation}
.kr{display:flex;gap:5px;justify-content:center}
.k{position:relative;flex:1 1 0;max-width:50px;height:54px;border:0;border-radius:5px;background:var(--khaki);color:var(--ink);font-family:var(--df);font-size:21px;display:grid;place-items:center;cursor:pointer;box-shadow:0 4px 0 var(--shade);transition:background .25s,color .25s,box-shadow .25s,transform .1s;padding:0}
.k small{position:absolute;right:4px;top:3px;font:700 10.5px/1 var(--bf)}
.k:active{transform:translateY(3px);box-shadow:0 1px 0 var(--shade)}
.k.low small{color:var(--red)}
.k.dead{background:var(--ink);color:#566027;box-shadow:0 1px 0 #1b1e0a;transform:translateY(3px);cursor:default}
.k.dead small{opacity:0}
.k.none{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(216,201,155,.28);color:rgba(216,201,155,.38)}
.k.wide{flex:1.6 1 0;max-width:80px;font-size:13px;letter-spacing:.08em}
.k.space{flex:4 1 0;max-width:none;font-size:13px;letter-spacing:.16em}
.k.punc{font-family:var(--mono);font-size:22px}
.k.del svg{width:24px;height:24px}
.k.hit{animation:hit .25s}
@keyframes hit{50%{background:var(--cream)}}

/* result */
.result{background:var(--khaki);color:var(--ink);border-radius:4px;padding:18px 18px 20px;position:relative;box-shadow:0 2px 0 var(--shade)}
.result[hidden]{display:none}
.result h2{margin:0;font-family:var(--df);font-weight:400;font-size:13px;letter-spacing:.16em;color:#5a5a2a}
.result .rk{display:flex;align-items:center;gap:16px;margin:10px 0 6px}
.result .rk .stamp{font-size:clamp(32px,10vw,46px);border-width:4px}
.result .rk p{margin:0;font-weight:700;font-size:15px;line-height:1.35}
.result .proof{margin:14px 0 0;padding:10px 12px;background:rgba(43,47,18,.08);border-left:3px solid var(--red);font-size:14.5px}
.result .proof b{font-family:var(--mono);font-weight:500;letter-spacing:.02em}
.result .shr{display:flex;gap:10px;margin:14px 0 6px;flex-wrap:wrap}
.result .shr .btn{flex:1 1 140px}
.result label.inc{display:flex;gap:8px;align-items:center;font-size:14px;margin:8px 0 0}
.result .copied{font-size:14px;min-height:1.4em;margin:4px 0 0}
.result .next{display:flex;justify-content:space-between;align-items:baseline;margin-top:14px;padding-top:12px;border-top:1.5px dashed rgba(43,47,18,.4);font-size:14px;gap:10px;flex-wrap:wrap}
.result .next b{font-family:var(--df);font-weight:400;font-size:22px;letter-spacing:.06em}
.result a{color:var(--ink)}
.result .btn.ghost{border-color:var(--ink);color:var(--ink)}
.tally{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:14px 0 0;text-align:center}
.tally div{background:rgba(43,47,18,.08);padding:8px 2px;border-radius:3px}
.tally b{display:block;font-family:var(--df);font-weight:400;font-size:24px;line-height:1.1}
.tally small{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:#5a5a2a}
.dist{margin:14px 0 0;display:grid;gap:4px;font-size:13px}
.dist div{display:grid;grid-template-columns:5.5em 1fr 2em;gap:8px;align-items:center}
.dist i{display:block;height:14px;background:var(--olive);min-width:2px;border-radius:2px}
.dist .me i{background:var(--red)}

/* signup strip */
.sign{margin:18px 0 0;padding:14px 16px;border:1.5px dashed rgba(239,230,196,.45);border-radius:4px}
.sign h3{margin:0 0 4px;font-family:var(--df);font-weight:400;font-size:18px;letter-spacing:.04em}
.sign p{margin:0 0 10px;font-size:14px;color:var(--khaki)}
.signup{display:flex;flex-wrap:wrap;gap:8px}
.signup input[type=email]{flex:1 1 200px;min-height:46px;padding:0 12px;border:0;border-radius:4px;background:var(--cream);color:var(--ink);font-size:16px}
.signup .btn{flex:0 0 auto;font-size:16px;min-height:46px}
.signup .msg{flex-basis:100%;margin:0;font-size:14px;min-height:1.4em;color:var(--cream)}

/* dialogs */
dialog{border:0;padding:0;border-radius:6px;background:var(--khaki);color:var(--ink);width:min(480px,calc(100vw - 20px));max-height:calc(100dvh - 30px);box-shadow:0 30px 70px -20px rgba(0,0,0,.7)}
dialog::backdrop{background:rgba(27,30,10,.72)}
.dh{display:flex;align-items:center;padding:14px 16px 6px}
.dh h2{margin:0;font-family:var(--df);font-weight:400;font-size:26px;letter-spacing:.03em}
.dh button{margin-left:auto;width:40px;height:40px;border:0;background:transparent;font-size:26px;cursor:pointer;color:var(--ink)}
.db{padding:4px 18px 18px;font-size:15.5px}
.db ol,.db ul{padding-left:1.2em;margin:8px 0}
.db li{margin:0 0 6px}
.db .ex{display:flex;gap:4px;margin:10px 0}
.db .ex span{position:relative;width:34px;height:40px;border-radius:4px;background:#e9dcb1;display:grid;place-items:center;font-family:var(--df);font-size:18px;box-shadow:0 3px 0 var(--shade)}
.db .ex span small{position:absolute;right:3px;top:2px;font:700 9px var(--bf)}
.db .ex span.dead{background:var(--ink);color:#566027;box-shadow:none}
.ranks{display:grid;grid-template-columns:auto 1fr;gap:2px 14px;margin:8px 0 0;font-size:14.5px}
.ranks b{font-family:var(--df);font-weight:400;letter-spacing:.04em}
.db a{color:var(--ink)}

/* pages */
.page{width:min(680px,100%);margin:0 auto;padding:18px 16px 50px}
.page h1{font-family:var(--df);font-weight:400;font-size:clamp(40px,11vw,64px);line-height:1;margin:10px 0 16px;letter-spacing:.02em}
.page h2{font-family:var(--df);font-weight:400;font-size:24px;margin:28px 0 8px;letter-spacing:.03em}
.page p,.page li{color:#f3ecd2}
.paper{background:var(--khaki);color:var(--ink);border-radius:4px;padding:16px 18px;margin:16px 0}
.paper p,.paper li{color:var(--ink)}
.arch{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.arch a{display:grid;grid-template-columns:4.2em 1fr auto;gap:10px;align-items:center;padding:12px 14px;background:var(--khaki);color:var(--ink);border-radius:4px;text-decoration:none;box-shadow:0 3px 0 var(--shade)}
.arch a:hover{background:#e3d5aa}
.arch .n{font-family:var(--df);font-size:15px;color:var(--red)}
.arch .p{font-weight:600;font-size:15px;line-height:1.3}
.arch .p small{display:block;font-weight:400;color:#5a5a2a;font-size:12.5px}
.arch .r{font-family:var(--df);font-size:13px;letter-spacing:.06em;color:var(--red)}
.arch .r.un{color:#7a7550}
.foot{width:min(560px,100%);margin:0 auto;padding:16px 14px 30px;display:flex;flex-wrap:wrap;gap:8px 18px;font-size:13.5px;color:var(--khaki)}
.foot a{color:var(--khaki)}
.over{padding:30px 0;text-align:center}
@media (min-width:900px){
  .hd{padding-top:22px}
  .book{padding-top:10px}
}
@media (max-height:700px){.k{height:46px}.answer{min-height:76px}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
/* wide screens: a stencilled watermark down each side of the book */
@media (min-width:1100px){
  html::before,html::after{content:'RATIONED';position:fixed;top:50%;z-index:0;pointer-events:none;font-family:var(--df);font-size:min(11vw,150px);line-height:1;letter-spacing:.06em;color:rgba(43,47,18,.28);writing-mode:vertical-rl;white-space:nowrap}
  html::before{left:3vw;transform:translateY(-50%) rotate(180deg)}
  html::after{content:'ONE BAG A DAY';right:3vw;transform:translateY(-50%);color:rgba(216,201,155,.09)}
}
