:root{
  --ink:#131C22;
  --ink-2:#4A5C68;
  --ink-3:#7E909C;
  --frost:#EDF2F4;
  --card:#FFFFFF;
  --line:#D6E0E5;
  --cold:#2F6E8C;
  --alert:#A8621C;
  --r:14px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  background:var(--frost);
  color:var(--ink);
  font-family:"Instrument Sans",system-ui,-apple-system,sans-serif;
  font-size:16px;line-height:1.5;
  padding-bottom:calc(84px + env(safe-area-inset-bottom));
}
body.locked{overflow:hidden}
h1,h2,h3{font-family:"Bricolage Grotesque","Instrument Sans",sans-serif;font-weight:700;letter-spacing:-.02em;margin:0}
h1{font-size:29px;line-height:1.1}
h2{font-size:21px;line-height:1.2}
h3{font-size:16px;font-weight:700}
p{margin:0}
button{font:inherit;color:inherit;border:none;background:none;cursor:pointer}
input,select{font:inherit;color:inherit}
.wrap{max-width:560px;margin:0 auto;padding:20px 18px 0}
.top{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:6px}
.day{color:var(--ink-3);font-size:14px;font-variant-numeric:tabular-nums;flex:none}
.sub{color:var(--ink-2);font-size:15px;margin:8px 0 20px;max-width:60ch}
.muted{color:var(--ink-3)}

/* stock strip — the identity element */
.strip{display:flex;gap:8px;margin:0 0 22px;flex-wrap:wrap}
.pool{flex:1 1 30%;min-width:96px;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:11px 12px 12px}
.pool .n{font-family:"Bricolage Grotesque",sans-serif;font-size:26px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}
.pool .l{font-size:12.5px;color:var(--ink-3);margin-top:3px}
.mini{display:flex;gap:2px;margin-top:8px;height:8px;overflow:hidden}
.mini i{width:8px;height:8px;border-radius:2px;flex:none;display:block}

.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:15px 16px;margin-bottom:11px}
.card.flat{background:transparent;border-style:dashed}
.meal{display:flex;gap:11px;align-items:flex-start}
.swatch{width:36px;height:36px;border-radius:9px;flex:none;margin-top:2px;border:1px solid rgba(0,0,0,.09)}
.swatch.sm{width:26px;height:26px;border-radius:7px;margin-top:0}
.meal .body{flex:1;min-width:0;text-align:left;background:none;padding:0}
.meal .when{font-size:12.5px;color:var(--ink-3);margin-bottom:1px}
.meal .what{font-weight:600}
.meal .qty{font-size:13.5px;color:var(--ink-2);margin-top:2px;font-variant-numeric:tabular-nums}
.serve{border:1px solid var(--ink);border-radius:999px;padding:7px 15px;font-size:14px;font-weight:600;flex:none;align-self:center}
.serve:active{background:var(--ink);color:#fff}
.serve[disabled]{opacity:.32;border-color:var(--line)}
.done{border-color:var(--line);color:var(--ink-3);background:var(--frost)}

/* planning */
.dayhead{display:flex;align-items:baseline;gap:9px;margin:22px 0 9px}
.dayhead:first-of-type{margin-top:4px}
.dayhead h2{font-size:17px}
.dayhead .day{font-size:13px}
.slot{position:relative}
.slot.over{outline:2.5px solid var(--cold);outline-offset:-1px;border-radius:var(--r)}
.slot.dragging{opacity:.28}
.grip{width:38px;align-self:stretch;min-height:44px;margin:-15px 0 -15px -11px;padding:0 10px;flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;touch-action:none;border-radius:9px}
.grip i{display:block;width:14px;height:1.5px;background:var(--line);border-radius:1px}
.grip:active i{background:var(--ink-3)}
.thin{padding:11px 13px}
.thin .swatch{width:28px;height:28px;border-radius:7px;margin-top:1px}
.thin .when{font-size:12px}
.thin .what{font-weight:600;font-size:15px}
.thin .qty{font-size:12.5px;margin-top:1px}
.empty-slot{color:var(--ink-3);font-style:normal}
.ghost{position:fixed;z-index:60;pointer-events:none;margin:0;box-shadow:0 12px 28px rgba(19,28,34,.22);transform:translate(0,-50%) rotate(-1deg)}

.warn{background:#FBF2E6;border-color:#E8D3B0;color:var(--alert);font-size:14px}
.warn h3{color:var(--alert)}
.warn .link{text-decoration:underline;font-weight:600;color:var(--alert);padding:0}

.sachet{margin-bottom:11px}
.shead{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.age{font-size:12.5px;color:var(--ink-3);font-variant-numeric:tabular-nums;flex:none}
.cubes{display:flex;flex-wrap:wrap;gap:4px;margin:11px 0 12px}
.cube{width:17px;height:17px;border-radius:4px;border:1px solid rgba(0,0,0,.1)}
.cube.gone{background:transparent!important;border:1px dashed var(--line)}
.row{display:flex;gap:8px}
.row button{border:1px solid var(--line);border-radius:9px;padding:8px 0;flex:1;font-size:14px;font-weight:500;background:var(--frost)}
.row button:active{background:var(--ink);color:#fff;border-color:var(--ink)}

.pick{display:flex;flex-wrap:wrap;gap:7px;margin:12px 0 4px}
.chip{border:1px solid var(--line);background:var(--card);border-radius:999px;padding:8px 13px;font-size:14.5px;display:flex;align-items:center;gap:7px}
.chip .dot{width:11px;height:11px;border-radius:3px;flex:none}
.chip.on{border-color:var(--ink);border-width:1.5px;font-weight:600}
.cta{width:100%;background:var(--ink);color:#fff;border-radius:12px;padding:15px;font-weight:600;font-size:16px;margin-top:16px}
.cta[disabled]{background:var(--line);color:var(--ink-3)}
.ghost-cta{background:transparent;color:var(--ink);border:1px dashed var(--line)}
.list{list-style:none;padding:0;margin:10px 0 0}
.list li{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-top:1px solid var(--line);font-size:15px}
.list li:first-child{border-top:none}
.list .q{color:var(--ink-2);font-variant-numeric:tabular-nums;flex:none}

.step{display:flex;gap:12px;align-items:center;padding:11px 0;border-top:1px solid var(--line)}
.step:first-of-type{border-top:none}
.step .idx{width:34px;font-size:13px;color:var(--ink-3);flex:none;font-variant-numeric:tabular-nums}
.step .nm{flex:1;min-width:0}
.step .nm b{display:block;font-weight:600}
.step .nm span{font-size:13px;color:var(--ink-3)}
.box{width:26px;height:26px;border-radius:8px;border:1.5px solid var(--line);flex:none}
.box.on{background:var(--cold);border-color:var(--cold);position:relative}
.box.on::after{content:"";position:absolute;left:8px;top:4px;width:6px;height:12px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(42deg)}
.step.today{background:#E7F0F4;margin:0 -8px;padding:11px 8px;border-radius:10px;border-top-color:transparent}

/* segmented control */
.seg{display:flex;background:#E1E9ED;border-radius:11px;padding:3px;margin:0 0 16px}
.seg button{flex:1;padding:9px 6px;font-size:14px;font-weight:600;color:var(--ink-2);border-radius:9px}
.seg button.on{background:var(--card);color:var(--ink);box-shadow:0 1px 2px rgba(19,28,34,.10)}

/* per-food stock rows */
.fline{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--line)}
.fline:first-of-type{border-top:none}
.fline .body{flex:1;min-width:0;text-align:left;background:none;padding:0}
.fline .nm{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fline .qty{font-size:13px;color:var(--ink-3);font-variant-numeric:tabular-nums;margin-top:1px}
.bar{height:7px;border-radius:4px;background:var(--frost);overflow:hidden;margin-top:7px}
.bar i{display:block;height:100%;border-radius:4px}
.pm{display:flex;gap:6px;flex:none}
.pm button{width:38px;height:38px;border:1px solid var(--line);border-radius:10px;background:var(--frost);font-size:18px;font-weight:600;line-height:1;display:flex;align-items:center;justify-content:center}
.pm button:active{background:var(--ink);color:#fff;border-color:var(--ink)}
.pm button[disabled]{opacity:.35}
.count{font-family:"Bricolage Grotesque",sans-serif;font-size:21px;font-weight:700;font-variant-numeric:tabular-nums;min-width:34px;text-align:right;flex:none}

/* marques et tuiles */
.mk{width:34px;height:34px;display:block;flex:none}
.mk.sm{width:30px;height:30px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;margin:10px 0 2px}
.tile{background:var(--card);border:1px solid var(--line);border-radius:13px;padding:11px 6px 10px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;min-height:94px}
.tile .mk{width:38px;height:38px}
.tile b{font-size:12px;font-weight:500;line-height:1.15;text-align:center;color:var(--ink-2);overflow-wrap:anywhere}
.tile.on{border-color:var(--ink);border-width:1.5px;padding:10.5px 5.5px 9.5px}
.tile.on b{color:var(--ink);font-weight:600}
.tile:active{background:var(--frost)}

/* library */
.rate{display:flex;gap:6px;flex:none}
.rate button{width:36px;height:36px;border:1px solid var(--line);border-radius:10px;background:var(--frost);font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;filter:saturate(.15) opacity(.55)}
.rate button.on{border-width:1.5px;filter:none;color:#fff}
.rate button.on[data-r="aime"]{background:#5F8C4B;border-color:#5F8C4B}
.rate button.on[data-r="mitige"]{background:#C98A3A;border-color:#C98A3A}
.rate button.on[data-r="refuse"]{background:#8E9BA4;border-color:#8E9BA4}
.catlab{font-size:12.5px;color:var(--ink-3);font-weight:600;letter-spacing:.04em;text-transform:uppercase;margin:22px 0 8px}

/* bottom sheet */
.scrim{position:fixed;inset:0;background:rgba(19,28,34,.42);z-index:40;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.sheet{position:fixed;left:50%;transform:translateX(-50%);width:100%;max-width:560px;bottom:0;z-index:41;background:var(--frost);border-radius:20px 20px 0 0;
  max-height:88vh;display:flex;flex-direction:column;box-shadow:0 -8px 30px rgba(19,28,34,.18)}
.sheet .hd{display:flex;align-items:center;gap:12px;padding:14px 18px 12px;border-bottom:1px solid var(--line);flex:none}
.sheet .hd h2{flex:1;min-width:0;font-size:19px}
.sheet .hd .x{width:38px;height:38px;border-radius:10px;background:#E1E9ED;font-size:19px;line-height:1;flex:none;display:flex;align-items:center;justify-content:center}
.sheet .bd{overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 18px calc(20px + env(safe-area-inset-bottom))}
.sheet .grab{width:38px;height:4px;border-radius:2px;background:var(--line);margin:8px auto 0}
.field{margin-bottom:14px}
.field label{display:block;font-size:13px;color:var(--ink-3);font-weight:600;margin-bottom:6px}
.field input{width:100%;border:1px solid var(--line);border-radius:11px;padding:12px 13px;background:var(--card);font-size:16px}
.field input:focus{outline:none;border-color:var(--cold);box-shadow:0 0 0 2.5px rgba(47,110,140,.16)}
.two{display:flex;gap:10px}
.two .field{flex:1}
.comp{display:flex;align-items:center;gap:10px;padding:11px 0;border-top:1px solid var(--line)}
.comp:first-of-type{border-top:none}
.comp .nm{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.comp .sm2{font-size:12.5px;color:var(--ink-3);font-weight:400;font-variant-numeric:tabular-nums}
.x-lite{width:34px;height:34px;border-radius:9px;color:var(--ink-3);font-size:17px;flex:none;display:flex;align-items:center;justify-content:center}
.x-lite:active{background:var(--frost)}
.pickrow{display:flex;align-items:center;gap:11px;width:100%;padding:12px 0;border-top:1px solid var(--line);text-align:left}
.pickrow:first-of-type{border-top:none}
.pickrow .nm{flex:1;min-width:0;font-weight:600}
.pickrow .q{font-size:13px;color:var(--ink-3);font-variant-numeric:tabular-nums;flex:none}

nav{position:fixed;left:0;right:0;bottom:0;background:rgba(255,255,255,.94);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--line);display:flex;padding-bottom:env(safe-area-inset-bottom);z-index:9}
nav button{flex:1;padding:13px 2px 15px;font-size:11.5px;color:var(--ink-3);font-weight:500;display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0}
nav button .g{width:19px;height:19px;border-radius:5px;border:1.5px solid currentColor}
nav button.on{color:var(--ink)}
nav button.on .g{background:var(--ink);border-color:var(--ink)}
.hide{display:none}
[hidden]{display:none!important}
@media (prefers-reduced-motion:no-preference){.serve,.cta,.chip,.seg button{transition:background .12s,color .12s,border-color .12s}}
:focus-visible{outline:2.5px solid var(--cold);outline-offset:2px}
