/* LRSN TECH design system — SPEC §13.
   Ported from lrsntech.com. Tokens only: never write a raw hex below :root. */

@font-face{
  font-family:'VT323';font-style:normal;font-weight:400;font-display:swap;
  src:url('/static/vt323.woff2') format('woff2');
}

:root{
  --void:#050A14; --bezel:#0B1426; --edge:#2C3E5C;
  --screen:#08222B; --screen-lo:#051820;
  --dim:#0F4C5C; --mid:#2B9AAD; --lit:#5CE1F2;
  --chrome:#CBD5E1; --silver:#94A3B8; --slate:#475569;
  --warn:#F2A65C;
  --glow:0 0 6px rgba(92,225,242,.55), 0 0 18px rgba(92,225,242,.22);
  --mono:'VT323',ui-monospace,'Courier New',monospace;
}

*{box-sizing:border-box;margin:0;padding:0}
html{background:var(--void)}
body{
  background:
    radial-gradient(120% 70% at 50% 108%, rgba(43,154,173,.30) 0%, rgba(15,76,92,.10) 42%, transparent 70%),
    radial-gradient(90% 60% at 50% -10%, rgba(30,58,95,.55) 0%, transparent 65%),
    linear-gradient(180deg,#050A14 0%,#08111F 45%,#050A14 100%);
  background-attachment:fixed;
  color:var(--chrome);font-family:var(--mono);font-size:21px;line-height:1.35;
  -webkit-font-smoothing:none;min-height:100vh;padding:34px 16px 60px;overflow-x:hidden;
}

/* synthwave horizon */
.horizon{position:fixed;left:-25%;right:-25%;bottom:-6vh;height:46vh;z-index:0;
  pointer-events:none;perspective:220px;opacity:.5}
.horizon i{position:absolute;inset:0;transform:rotateX(72deg);transform-origin:50% 0;
  background:
    repeating-linear-gradient(to right, rgba(92,225,242,.30) 0 1px, transparent 1px 62px),
    repeating-linear-gradient(to bottom, rgba(92,225,242,.30) 0 1px, transparent 1px 46px);
  -webkit-mask-image:linear-gradient(to bottom,transparent 0%,#000 55%,transparent 100%);
          mask-image:linear-gradient(to bottom,transparent 0%,#000 55%,transparent 100%)}

/* chassis */
.unit{position:relative;z-index:2;max-width:920px;margin:0 auto;padding:20px;
  background:linear-gradient(168deg,#2E4468 0%,#182642 30%,#0C1424 78%,#080E1A 100%);
  border:1px solid var(--edge);border-radius:10px;
  box-shadow:inset 0 1px 0 rgba(203,213,225,.34),inset 0 -3px 0 rgba(0,0,0,.55),
    0 26px 60px rgba(0,0,0,.72),0 0 90px rgba(43,154,173,.13)}
.unit::before{content:"";position:absolute;left:1px;right:1px;top:1px;height:44%;
  border-radius:9px 9px 0 0;pointer-events:none;
  background:linear-gradient(180deg,rgba(235,239,244,.055),transparent)}

/* brand plate */
.plate{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:2px 8px 14px;flex-wrap:wrap}
.brand{font-size:30px;letter-spacing:.30em;color:var(--lit);text-shadow:var(--glow);
  text-decoration:none}
.leds{display:flex;align-items:center;gap:14px;font-size:17px;letter-spacing:.14em;color:var(--silver)}
.led{display:inline-block;width:9px;height:9px;border-radius:50%;background:#12304a;
  box-shadow:inset 0 1px 1px rgba(0,0,0,.7);margin-right:6px}
.led.on{background:var(--lit);box-shadow:0 0 8px var(--lit),0 0 18px rgba(92,225,242,.6)}

/* LCD */
.screen{position:relative;border-radius:7px;padding:22px;color:var(--mid);overflow:hidden;
  background:radial-gradient(120% 130% at 50% 0%,#0A2A35 0%,var(--screen) 45%,var(--screen-lo) 100%);
  box-shadow:inset 0 4px 16px rgba(0,0,0,.9),inset 0 0 0 1px rgba(92,225,242,.14),
    0 0 0 3px #060D18,0 0 0 4px rgba(92,225,242,.22),0 0 34px rgba(92,225,242,.20)}
.screen::after{content:"";position:absolute;inset:0;pointer-events:none;border-radius:7px;
  background:
    repeating-linear-gradient(to bottom,rgba(0,0,0,.20) 0 1px,transparent 1px 4px),
    linear-gradient(115deg,rgba(235,239,244,.07) 0%,transparent 34%),
    radial-gradient(115% 115% at 50% 50%,transparent 62%,rgba(0,0,0,.55) 100%)}
.screen > *{position:relative;z-index:1}
.lcd-main{display:grid;grid-template-columns:1fr 194px;gap:20px;align-items:start}

/* section rule */
.mtitle{display:flex;align-items:center;gap:12px;margin:0 0 8px;color:var(--lit);
  font-size:19px;letter-spacing:.20em;text-shadow:var(--glow)}
.mtitle span{flex:1;height:1px;background:linear-gradient(90deg,rgba(92,225,242,.55),transparent)}

/* menu rows */
.menu{list-style:none}
.menu a{display:flex;align-items:baseline;gap:10px;padding:3px 8px;font-size:22px;
  color:var(--mid);text-decoration:none;letter-spacing:.03em}
.menu a:hover{color:var(--lit);text-shadow:var(--glow)}
.menu .mark{width:1.1em;flex:none;position:relative}
/* the source uses \25B8, which VT323 lacks — drawn in CSS instead (SPEC §13.2b) */
.menu li.sel .mark::before{content:"";position:absolute;top:.30em;left:0;
  border-left:.45em solid currentColor;border-top:.30em solid transparent;
  border-bottom:.30em solid transparent}
.menu .num{color:var(--dim);flex:none}
.menu .name{white-space:nowrap}
.menu .lead{flex:1;border-bottom:2px dotted rgba(43,154,173,.45);transform:translateY(-6px);min-width:18px}
.menu .val{white-space:nowrap;color:var(--dim);flex:none}
.menu li.sel a{background:var(--lit);color:#052029;text-shadow:none;
  box-shadow:0 0 14px rgba(92,225,242,.55)}
.menu li.sel .num,.menu li.sel .val{color:#0A3540}
.menu li.sel .lead{border-bottom-color:rgba(5,32,41,.5)}
.menu .sub{display:block;padding:0 8px 4px 3.1em;color:var(--dim);font-size:17px}

/* readout */
.readout{border:1px solid rgba(92,225,242,.28);border-radius:4px;padding:9px 10px 10px;
  background:rgba(9,45,56,.5)}
.readout .rt{font-size:16px;letter-spacing:.20em;color:var(--lit);text-shadow:var(--glow);
  border-bottom:1px solid rgba(92,225,242,.25);padding-bottom:4px;margin-bottom:7px}
.readout dl{display:grid;grid-template-columns:auto 1fr;gap:1px 8px;font-size:18px}
.readout dt{color:var(--dim)}
.readout dd{color:var(--lit);text-align:right;text-shadow:var(--glow)}

/* raised modules */
.mods{display:grid;grid-template-columns:1fr;gap:16px;margin-top:24px}
.mod{position:relative;border-radius:6px;padding:20px 18px 16px;border:1px solid var(--edge);
  background:linear-gradient(180deg,#1A2740 0%,#101A2C 100%);
  box-shadow:inset 0 1px 0 rgba(203,213,225,.16),inset 0 -2px 0 rgba(0,0,0,.5),0 5px 14px rgba(0,0,0,.5)}
.mod-tab{position:absolute;top:-11px;left:16px;background:#16243B;border:1px solid var(--edge);
  border-radius:3px;padding:0 9px;font-size:17px;letter-spacing:.18em;color:var(--lit);
  text-shadow:var(--glow)}
.mod h2,.mod h3{font-weight:400;font-size:22px;letter-spacing:.10em;color:var(--lit);
  text-shadow:var(--glow);margin-bottom:8px}
.mod p{color:var(--chrome);opacity:.86;max-width:66ch;margin-bottom:10px}
.mod p:last-child{margin-bottom:0}

/* generic rows */
.rows{list-style:none;font-size:20px}
.rows li{display:flex;align-items:baseline;gap:10px;padding:3px 0;color:var(--chrome);opacity:.88}
.rows .n{color:var(--dim);min-width:2.2ch;flex:none;text-align:right}
.rows .nm{flex:1}
.rows .meta{color:var(--mid);font-size:17px;flex:none}

/* recipe cards */
.cards{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.card{display:block;text-decoration:none;border:1px solid var(--edge);border-radius:6px;
  padding:14px 15px 13px;background:linear-gradient(180deg,#1A2740 0%,#101A2C 100%);
  box-shadow:inset 0 1px 0 rgba(203,213,225,.16),0 4px 12px rgba(0,0,0,.45)}
.card:hover{border-color:var(--lit);box-shadow:inset 0 1px 0 rgba(203,213,225,.2),0 0 18px rgba(92,225,242,.28)}
.card .t{font-size:24px;color:var(--lit);text-shadow:var(--glow);line-height:1.1}
.card .b{color:var(--chrome);opacity:.8;font-size:18px;margin-top:5px}
.card .m{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px;font-size:16px;
  letter-spacing:.12em;color:var(--mid)}
.tag{border:1px solid var(--mid);color:var(--mid);padding:0 6px;font-size:15px;letter-spacing:.12em}
.tag.lit{border-color:var(--lit);color:var(--lit);text-shadow:var(--glow)}

/* forms */
.field{margin-bottom:14px}
.field > label{display:block;font-size:17px;letter-spacing:.16em;color:var(--lit);
  text-shadow:var(--glow);margin-bottom:4px}
.field .help{font-size:17px;color:var(--dim);margin-top:3px}
input[type=text],input[type=number],input[type=url],select,textarea{
  width:100%;font-family:var(--mono);font-size:20px;color:var(--lit);
  background:var(--screen-lo);border:1px solid var(--edge);border-radius:4px;
  padding:7px 10px;box-shadow:inset 0 2px 6px rgba(0,0,0,.6);
  -webkit-font-smoothing:none}
textarea{min-height:150px;line-height:1.4;resize:vertical}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--lit);
  box-shadow:inset 0 2px 6px rgba(0,0,0,.6),0 0 0 1px var(--lit),0 0 16px rgba(92,225,242,.35)}
input::placeholder,textarea::placeholder{color:var(--slate)}
select{appearance:none;cursor:pointer;padding-right:26px;
  background-image:linear-gradient(45deg,transparent 50%,var(--lit) 50%),
                   linear-gradient(135deg,var(--lit) 50%,transparent 50%);
  background-position:calc(100% - 15px) calc(1em - 1px),calc(100% - 10px) calc(1em - 1px);
  background-size:5px 5px,5px 5px;background-repeat:no-repeat}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}

/* confirm table — qty | unit | merge name | aisle, with the raw line beneath */
.ing,.ing-head{display:grid;gap:8px;
  grid-template-columns:2.2ch 5.5em 7.5em minmax(0,1fr) 13em}
.ing{align-items:center;padding:7px 0;border-bottom:1px dashed rgba(44,62,92,.85)}
.ing:last-of-type{border-bottom:0}
.ing .n{color:var(--dim);text-align:right;font-size:18px}
.ing input,.ing select{font-size:18px;padding:5px 8px}
.ing .raw{grid-column:2 / -1;color:var(--dim);font-size:17px;overflow-wrap:anywhere}
.ing-head{font-size:15px;letter-spacing:.14em;color:var(--dim);padding-bottom:5px;
  border-bottom:1px solid rgba(92,225,242,.22);margin-bottom:4px}

/* buttons */
.btns{display:flex;gap:9px;margin-top:18px;flex-wrap:wrap}
.btn{flex:1;min-width:92px;text-align:center;text-decoration:none;cursor:pointer;
  font-family:var(--mono);padding:9px 6px 7px;border-radius:5px;font-size:19px;
  letter-spacing:.14em;color:var(--silver);border:1px solid var(--edge);
  background:linear-gradient(180deg,#22334F 0%,#131E33 100%);
  box-shadow:inset 0 1px 0 rgba(203,213,225,.20),0 3px 0 #060C16}
.btn:hover{color:var(--chrome)}
.btn:active{transform:translateY(3px);box-shadow:inset 0 1px 0 rgba(203,213,225,.14),0 0 0 #060C16}
.btn.on{color:#052029;border-color:#7BEDFB;text-shadow:none;
  background:linear-gradient(180deg,#7BEDFB 0%,#2B9AAD 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 3px 0 #08303B,0 0 18px rgba(92,225,242,.55)}
.btn.wide{flex:none;width:100%}

/* notices */
.err{border:1px solid var(--warn);border-radius:4px;padding:8px 11px;margin-bottom:14px;
  color:var(--warn);font-size:19px;background:rgba(242,166,92,.08)}
.note{color:var(--dim);font-size:18px;margin-top:10px}
.empty{color:var(--dim);font-size:20px;padding:10px 0}

.foot{display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;
  padding:16px 8px 2px;font-size:17px;letter-spacing:.08em;color:var(--slate)}
.foot a{color:var(--slate)}

@media (max-width:760px){
  .lcd-main{grid-template-columns:1fr}
  .readout{display:none}
  .cards{grid-template-columns:1fr}
}
@media (max-width:640px){
  body{padding:16px 10px 44px;font-size:19px}
  .unit{padding:11px;border-radius:8px}
  .screen{padding:15px 13px 14px}
  .brand{font-size:23px;letter-spacing:.22em}
  .leds{font-size:15px;gap:10px}
  .menu a{font-size:19px;gap:6px}
  .menu .val{display:none}
  .grid2,.grid3{grid-template-columns:1fr}
  .ing{grid-template-columns:2.2ch 4.5em 1fr;row-gap:5px}
  .ing input[name=canonical_name]{grid-column:2 / -1}
  .ing select[name=aisle]{grid-column:2 / -1}
  .ing .raw{grid-column:2 / -1}
  .ing-head{display:none}
  .btn{min-width:0;flex:1 1 40%;font-size:17px}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* offline menu slots — sections not built yet */
.menu li.off a{color:#1D6070;cursor:default}
.menu li.off a:hover{color:#1D6070;text-shadow:none}
.menu li.off .num,.menu li.off .val{color:#1D6070}

/* --- plan + shopping list (slice 2) --- */
.card.planned{border-color:var(--lit);box-shadow:inset 0 1px 0 rgba(203,213,225,.2),0 0 16px rgba(92,225,242,.22)}
.card a{text-decoration:none;display:block}
.card form{margin-top:11px}
.card .btn{font-size:17px;padding:7px 6px 5px}

.planrow{display:grid;grid-template-columns:1fr auto auto;gap:12px;align-items:center;
  padding:7px 0;border-bottom:1px dashed rgba(44,62,92,.85)}
.planrow:last-child{border-bottom:0}
.planrow .nm a{color:var(--lit);text-shadow:var(--glow);text-decoration:none;font-size:21px}
.planrow .sub2{display:block;color:var(--dim);font-size:17px}
.stepper{display:flex;align-items:center;gap:8px}
.stepper .count{color:var(--lit);text-shadow:var(--glow);min-width:2.4ch;text-align:center;font-size:22px}
.step{font-family:var(--mono);font-size:20px;line-height:1;cursor:pointer;
  width:2em;height:1.75em;border-radius:4px;color:var(--lit);border:1px solid var(--edge);
  background:linear-gradient(180deg,#22334F 0%,#131E33 100%);
  box-shadow:inset 0 1px 0 rgba(203,213,225,.20),0 2px 0 #060C16}
.step:active{transform:translateY(2px);box-shadow:inset 0 1px 0 rgba(203,213,225,.14),0 0 0 #060C16}
.step.drop{color:var(--warn)}

.tickable{cursor:pointer;user-select:none}
.tickable .box{width:.66em;height:.66em;flex:none;display:inline-block;border:1px solid var(--lit);
  border-radius:1px;box-shadow:0 0 5px rgba(92,225,242,.45);align-self:center}
.tickable.ticked{opacity:.34;text-decoration:line-through;text-decoration-color:var(--mid)}
.tickable.ticked .box{background:var(--lit)}
.tickable .qty{color:var(--lit);text-shadow:var(--glow);flex:none}
.xn{color:var(--mid);font-size:16px;letter-spacing:.10em;border:1px solid var(--mid);
  padding:0 5px;flex:none}
@media (max-width:640px){
  .planrow{grid-template-columns:1fr auto;row-gap:6px}
  .planrow form:last-child{grid-column:2}
  .tickable{flex-wrap:wrap}
}

/* --- the week strip (calendar) --- */
.monthbar{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.monthlabel{flex:1;color:var(--lit);text-shadow:var(--glow);font-size:23px;letter-spacing:.14em}
.btn.nav{flex:none;min-width:2.6em;padding:6px 12px 5px}
.btn.nav.today{min-width:0;font-size:16px}

.week{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.wday{min-height:104px;border:1px solid var(--edge);border-radius:4px;padding:5px;
  background:linear-gradient(180deg,rgba(26,39,64,.75) 0%,rgba(16,26,44,.75) 100%);
  display:flex;flex-direction:column;gap:4px}
.wday.past{background:linear-gradient(180deg,rgba(14,22,38,.8) 0%,rgba(10,17,32,.8) 100%)}
.wday.now{border-color:var(--lit);box-shadow:0 0 0 1px var(--lit),0 0 16px rgba(92,225,242,.28)}
.wtop{display:flex;align-items:baseline;justify-content:space-between;gap:5px;
  border-bottom:1px solid rgba(44,62,92,1);padding-bottom:3px;margin-bottom:1px}
.wname{font-size:14px;letter-spacing:.12em;color:var(--dim)}
.wnum{font-size:19px;color:var(--silver)}
.wday.now .wname,.wday.now .wnum{color:var(--lit);text-shadow:var(--glow)}
.wempty{color:var(--slate);font-size:17px;text-align:center;margin-top:6px}

/* One tick box per meal, labelled with its tag. */
.tick button{display:flex;align-items:center;gap:6px;width:100%;text-align:left;
  font-family:var(--mono);font-size:17px;line-height:1.1;cursor:pointer;
  padding:3px 5px;border-radius:3px;color:var(--lit);
  border:1px solid rgba(92,225,242,.30);background:rgba(15,76,92,.35)}
.tick button:hover{border-color:var(--lit);background:rgba(43,154,173,.32)}
.tick .box{width:.72em;height:.72em;flex:none;display:inline-block;border-radius:2px;
  border:1px solid var(--lit);box-shadow:0 0 5px rgba(92,225,242,.4)}
.tick .tagname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tick.cooked button{color:var(--dim);border-color:rgba(44,62,92,1);background:rgba(10,17,32,.6)}
.tick.cooked .tagname{text-decoration:line-through;text-decoration-color:var(--slate)}
.tick.cooked .box{background:var(--lit);border-color:var(--lit);box-shadow:0 0 7px var(--lit)}

/* form controls shared by the week page and This Week */
input[type=date]{font-family:var(--mono);font-size:18px;color:var(--lit);
  background:var(--screen-lo);border:1px solid var(--edge);border-radius:4px;padding:5px 8px;
  box-shadow:inset 0 2px 6px rgba(0,0,0,.6)}
input[type=date]::-webkit-calendar-picker-indicator{filter:invert(72%) sepia(60%) saturate(600%) hue-rotate(140deg)}
/* Wide enough for the whole 'Breakfast / Lunch / Dinner' placeholder;
   measured at 208px of text in VT323 at 18px. */
.tagbox{width:15em;min-width:15em;font-size:18px;padding:5px 8px}
.step.wide2{width:auto;padding:0 12px;font-size:17px}
.step.cook{color:var(--lit)}

/* This Week rows carry a stepper, a date, a tag and two buttons. */
.planrow.wide{grid-template-columns:1fr auto auto auto auto}

@media (max-width:760px){
  /* Seven columns cannot hold a tag on a phone, so the week becomes a list. */
  .week{grid-template-columns:1fr;gap:4px}
  .wday{min-height:0;flex-direction:row;align-items:center;flex-wrap:wrap;gap:7px;padding:7px 9px}
  .wtop{border-bottom:0;padding:0;margin:0;gap:9px;min-width:5.5em}
  .wname{font-size:17px}
  .wnum{font-size:20px}
  .tick{flex:0 0 auto}
  .tick button{min-height:38px;font-size:18px}
  .wempty{margin:0}
  /* Release the desktop minimum, or a 300px box bursts a 355px chassis. */
  .tagbox{width:100%;min-width:0}
  .planrow .stepper,.wday .stepper{flex-wrap:wrap}
  .planrow.wide{grid-template-columns:1fr auto;row-gap:7px}
  .planrow.wide form{grid-column:span 1}
  .planrow.wide form.stepper:has(.tagbox){grid-column:1 / -1}
}

/* --- clicking a day reveals its meals, between the week and the tray --- */
.wday{position:relative}
/* Under the tick boxes, so ticking cooks and clicking elsewhere picks the day. */
.daylink{position:absolute;inset:0;z-index:0;border-radius:3px;text-decoration:none}
.daylink:hover{background:rgba(92,225,242,.09);box-shadow:inset 0 0 0 1px rgba(92,225,242,.4)}
/* ONLY the tick boxes sit above the day link. Raising the header too made
   the most obvious click target — the day name and number — inert. */
.wday > .tick{position:relative;z-index:1}
.wday.picked{border-color:var(--lit);
  background:linear-gradient(180deg,rgba(21,58,74,.92) 0%,rgba(12,32,44,.92) 100%)}
.wday.picked .wname,.wday.picked .wnum{color:var(--lit);text-shadow:var(--glow)}

.dayrow{display:grid;grid-template-columns:8.5em minmax(0,1fr) auto;gap:12px;
  align-items:center;padding:7px 0;border-bottom:1px dashed rgba(44,62,92,.85)}
.dayrow:last-child{border-bottom:0}
.dayrow .dtag{font-size:16px;letter-spacing:.14em;color:var(--lit);text-shadow:var(--glow);
  border:1px solid rgba(92,225,242,.45);border-radius:3px;padding:2px 7px;text-align:center;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dayrow .nm a{color:var(--chrome);text-decoration:none;font-size:21px}
.dayrow .nm a:hover{color:var(--lit);text-shadow:var(--glow)}
.dayrow .sub2{display:block;color:var(--dim);font-size:17px}
.dayrow.cooked .dtag{color:var(--dim);border-color:rgba(44,62,92,1);text-shadow:none}
.dayrow.cooked .nm a{color:var(--slate);text-decoration:line-through}

@media (max-width:760px){
  .dayrow{grid-template-columns:7em minmax(0,1fr);row-gap:6px}
  .dayrow form{grid-column:2;justify-self:start}
}

/* --- the video / source link box on a recipe --- */
.sourcelink{display:block;color:var(--lit);text-shadow:var(--glow);font-size:20px;
  text-decoration:none;word-break:break-all;padding:2px 0 10px;border-bottom:1px dashed var(--edge)}
.sourcelink:hover{text-decoration:underline}
.sourceform{display:grid;grid-template-columns:minmax(0,1fr) 7em;gap:9px;
  align-items:center;margin-top:12px}
.sourceform .btn{flex:none}
@media (max-width:640px){
  .sourceform{grid-template-columns:1fr}
  .sourceform input,.sourceform .btn{min-height:44px}
}

/* --- save & load --- */
input[type=file]{font-family:var(--mono);font-size:18px;color:var(--chrome);
  background:var(--screen-lo);border:1px solid var(--edge);border-radius:4px;
  padding:9px 10px;width:100%}
input[type=file]::file-selector-button{font-family:var(--mono);font-size:17px;
  letter-spacing:.10em;cursor:pointer;margin-right:11px;padding:6px 12px;
  border-radius:4px;color:var(--silver);border:1px solid var(--edge);
  background:linear-gradient(180deg,#22334F 0%,#131E33 100%)}
input[type=file]::file-selector-button:hover{color:var(--chrome)}

/* --- print: the shopping list in your hand, the recipe on the counter -----
   The CRT styling is for the screen. On paper it costs a whole ink cartridge
   and reads worse, so print gets plain black on white. --- */
@media print{
  @page{margin:14mm}
  html,body{background:#fff!important;color:#000!important;padding:0;font-size:12pt}
  body{font-family:ui-monospace,'Courier New',monospace}

  /* Chrome that means nothing on paper. */
  .horizon,.plate,.screen,.foot,.btns,.note,.readout,
  .sourceform,.monthbar,.week,.monthlist,.empty:empty{display:none!important}

  .unit{max-width:none;margin:0;padding:0;border:0;border-radius:0;
    background:#fff!important;box-shadow:none}
  .unit::before{display:none}

  .mods{display:block;margin:0}
  .mod{break-inside:avoid;page-break-inside:avoid;border:0;border-radius:0;
    background:#fff!important;box-shadow:none;padding:0 0 10pt;margin-bottom:10pt}
  .mod-tab{position:static;display:block;background:none;border:0;padding:0;
    color:#000!important;text-shadow:none;font-size:11pt;letter-spacing:.12em;
    border-bottom:1pt solid #000;margin-bottom:5pt}
  .mod h2,.mod h3{color:#000!important;text-shadow:none;font-size:15pt}
  .mod p,.rows li,.dayrow{color:#000!important;opacity:1}

  .rows li{padding:2pt 0}
  .rows .n,.rows .meta,.sub2{color:#444!important}
  .qty{color:#000!important;text-shadow:none;font-weight:bold}
  .xn{border:1pt solid #666;color:#444!important}

  /* An unticked box you can actually mark with a pen. */
  .tickable .box{width:10pt;height:10pt;border:1pt solid #000;box-shadow:none;
    background:#fff!important}
  .tickable.ticked{opacity:1;text-decoration:none}
  .tickable.ticked .box{background:#000!important}

  .sourcelink{color:#000!important;text-shadow:none;font-size:10pt;
    border-bottom:0;padding:0}
  a{color:#000!important;text-decoration:none}

  /* Print the destination of a source link, since you cannot click paper. */
  .source-box .sourcelink::after{content:""}
}

/* --- add a meal, 3 ways --- */
.ok{border:1px solid var(--lit);border-radius:4px;padding:8px 11px;margin-bottom:14px;
  color:var(--lit);font-size:19px;background:rgba(92,225,242,.07)}
.prompt{white-space:pre-wrap;font-family:var(--mono);font-size:17px;line-height:1.3;
  color:var(--mid);background:var(--screen-lo);border:1px solid var(--edge);
  border-radius:4px;padding:11px 13px;box-shadow:inset 0 2px 6px rgba(0,0,0,.6);
  max-height:19em;overflow:auto}

/* --- "save this as an app on my phone" ------------------------------------
   A slow breathing glow, not a strobe. Fast blinking is a genuine
   accessibility problem, and the whole thing stops dead under
   prefers-reduced-motion (SPEC §13 rule 4). --- */
.install{margin-top:22px;padding-top:4px}
.btn.beacon{width:100%;flex:none;font-size:20px;padding:14px 10px 12px;
  color:#052029;border-color:#7BEDFB;text-shadow:none;
  background:linear-gradient(180deg,#7BEDFB 0%,#2B9AAD 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 3px 0 #08303B,
             0 0 18px rgba(92,225,242,.55);
  animation:beacon 2.4s ease-in-out infinite}
.btn.beacon:hover{color:#04181f}
.btn.beacon.open{animation:none}
@keyframes beacon{
  0%,100%{box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 3px 0 #08303B,
                     0 0 10px rgba(92,225,242,.40)}
  50%    {box-shadow:inset 0 1px 0 rgba(255,255,255,.7),0 3px 0 #08303B,
                     0 0 30px rgba(92,225,242,.95),0 0 58px rgba(92,225,242,.45)}
}

.install-how{margin-top:12px;border:1px solid var(--edge);border-radius:6px;
  padding:16px 16px 14px;background:linear-gradient(180deg,#1A2740 0%,#101A2C 100%);
  box-shadow:inset 0 1px 0 rgba(203,213,225,.16)}
.install-how p{color:var(--chrome);opacity:.88;margin-bottom:9px}
.install-how .k{opacity:1;letter-spacing:.16em;font-size:17px}
.install-how .rows li{padding:5px 0;align-items:flex-start}
.install-how b{color:var(--lit);text-shadow:var(--glow);font-weight:400}
/* The iOS share glyph, drawn rather than typed: it is not in VT323. */
.ios-share{position:relative;display:inline-block;width:.62em;height:.86em;
  border:1.5px solid var(--lit);border-top:0;border-radius:2px;
  vertical-align:-.16em;margin:0 .18em;box-shadow:0 0 5px rgba(92,225,242,.4)}
.ios-share::before{content:"";position:absolute;left:50%;top:-.42em;
  width:1.5px;height:.56em;background:var(--lit);transform:translateX(-50%)}
.ios-share::after{content:"";position:absolute;left:50%;top:-.42em;
  width:.34em;height:.34em;border-left:1.5px solid var(--lit);
  border-top:1.5px solid var(--lit);transform:translateX(-50%) rotate(45deg)}

@media (prefers-reduced-motion:reduce){
  .btn.beacon{animation:none;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 3px 0 #08303B,
               0 0 22px rgba(92,225,242,.7)}
}
@media print{.install{display:none!important}}
