:root{--fs-page:clamp(30px,4vw,44px);--fs-modal:clamp(28px,3.5vw,40px);--fs-block:19px;--sp-block:26px}
/* Anton (OFL, self-hosted): visage titre garanti partout — Android n'a ni Impact ni Haettenschweiler
   ni Arial Narrow (retour Arthur Pixel 7: fallback Roboto sur les titres). Impact reste devant:
   le rendu desktop Mac/Windows ne change pas, Anton ne sert que la ou Impact manque. */
@font-face{font-family:"Druk";font-style:normal;font-weight:400 900;font-display:swap;src:url("fonts/DrukHeavy.woff2") format("woff2")}
@font-face{font-family:"Druk";font-style:italic;font-weight:400 900;font-display:swap;src:url("fonts/DrukHeavy-Italic.woff2") format("woff2")}
@font-face{font-family:"Anton";font-style:normal;font-weight:400;font-display:swap;src:url("fonts/anton-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Anton";font-style:normal;font-weight:400;font-display:swap;src:url("fonts/anton-latin-ext.woff2") format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
/* Voile de surbrillance tactile (Android surtout) : ce gris-bleu se pose sur tout element
   interactif au toucher, et RESTE affiche pendant un appui long -- d'ou l'impression d'un
   bouton « selectionne ». La propriete est heritee : une declaration sur html couvre l'app.
   Le retour tactile passe par les etats :active du systeme (translate + ombre reduite). */
html{-webkit-tap-highlight-color:transparent}

/* Koruki DA pass for Epicure Recipes */
:root{
  --ink:#15130f;--bone:#f4eedf;--paper:#fffaf0;--soft:#ebe2cf;--muted:#766f62;
  --lime:#c9ff3b;--cobalt:#2457ff;--red:#ff3b30;--line:rgba(21,19,15,.18);
  --love:#ff5470;--frichti:#ffe23d;
  --shadow:7px 7px 0 var(--ink);--r:24px;--gap:18px;
  /* Design system (cf static/design.html) — échelles canoniques */
  --r-pill:999px;--r-lg:20px;--r-md:16px;--r-sm:10px;
  --sh-hero:7px 7px 0 var(--ink);--sh-card:4px 4px 0 var(--ink);--sh-int:2px 2px 0 var(--ink);
  --lime-soft:rgba(201,255,59,.18);--cobalt-soft:rgba(36,87,255,.12);--red-soft:rgba(255,59,48,.1);
  --dv-a:#2457ff;--dv-b:var(--ink);--dv-c:rgba(21,19,15,.3);
  --sp-1:8px;--sp-2:14px;--sp-3:22px;--sp-4:36px;
}
*{box-sizing:border-box}html{background:var(--bone);color:var(--ink)}
body{margin:0;min-height:100vh;min-height:100dvh;color:var(--ink);font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;overflow-x:hidden;background:radial-gradient(circle at 14% -4%,rgba(201,255,59,var(--halo,.15)),transparent 30%),linear-gradient(90deg,rgba(21,19,15,.045) 1px,transparent 1px),linear-gradient(rgba(21,19,15,.04) 1px,transparent 1px),var(--bone);background-size:auto,32px 32px,32px 32px,auto}
button,input,textarea,select{font:inherit;color:inherit}.shell{width:min(1400px,calc(100% - 32px));margin:0 auto;padding:28px 0 56px}.hero{display:grid;grid-template-columns:minmax(0,1.25fr) 340px;gap:var(--gap);align-items:stretch;margin-bottom:var(--gap)}
.hero-copy,.signal-card,.panel,.recipe-card,.history{border:2px solid var(--ink);border-radius:var(--r);box-shadow:var(--shadow);background:var(--paper)}
.hero-copy{min-height:310px;background:var(--ink);color:var(--bone);padding:32px;position:relative;overflow:hidden}.hero-copy:after{content:"旨";position:absolute;right:18px;bottom:-52px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:190px;color:rgba(244,238,223,.08);letter-spacing:-0.04em}.mark{display:inline-flex;background:var(--lime);color:var(--ink);font-size:12px;letter-spacing:.11em;text-transform:uppercase;font-weight:950;border-radius:999px;padding:10px 14px;border:2px solid var(--bone);margin-bottom:28px;box-shadow:3px 3px 0 rgba(244,238,223,.35)}
h1{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(54px,9vw,116px);line-height:.82;letter-spacing:-0.015em;text-transform:uppercase;max-width:900px;margin:0}.hero p{max-width:760px;margin:26px 0 0;font-size:clamp(17px,2vw,22px);line-height:1.35;color:rgba(244,238,223,.76)}
.signal-card{background:var(--paper);color:var(--ink);padding:24px;display:flex;flex-direction:column;justify-content:space-between;min-height:310px}.signal-top span{display:block;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:130px;line-height:.75;letter-spacing:-0.04em;color:var(--red)}.signal-top em{font-style:normal;color:var(--muted);font-weight:950;text-transform:uppercase;letter-spacing:.08em}.signal-grid{display:grid;grid-template-columns:74px 1fr;gap:10px 14px;font-size:14px}.signal-grid b{color:var(--cobalt);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.signal-grid span{color:var(--muted);font-weight:750}.composer{display:grid;grid-template-columns:minmax(0,.95fr) minmax(360px,.7fr);gap:var(--gap)}.panel{padding:20px;min-width:0;align-self:start}.panel h2,.section-head span,h2,h3{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;letter-spacing:0.005em}.section-head span,.frigo-head h2,.plan-head h2,.carte-head h2{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:var(--fs-page);line-height:.9;letter-spacing:0.01em;text-transform:uppercase;margin:0;font-weight:400}.section-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:var(--sp-block) 0 14px}.page-title{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:var(--fs-page);line-height:.9;letter-spacing:0.01em;text-transform:uppercase;font-weight:400;margin:0}.page-head{display:flex;align-items:flex-start;gap:12px;margin:0 0 14px}.page-chip{flex:0 0 auto;display:inline-grid;place-items:center;width:44px;height:44px;background:var(--lime);border:2px solid var(--ink);border-radius:14px;box-shadow:var(--sh-int)}.page-chip svg{width:24px;height:24px;fill:none;stroke:var(--ink);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}.page-headtext{min-width:0}/* .page-sub: encre a 62% et pas --muted. Le muted (#766f62) sur le fond bone donne 4.30:1,
   sous le seuil AA de 4.5:1 pour du 11px -- et ces sous-titres ne sont pas du gros texte.
   L'encre a 62% donne 4.94:1 en restant plus discrete que le cobalt d'avant. */
.page-sub{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:rgba(21,19,15,.62);font-weight:850;margin-top:3px}.plan-head .page-chip{align-self:center}@media(max-width:640px){.page-chip{width:40px;height:40px;border-radius:12px}.page-chip svg{width:22px;height:22px}}.section-head small,.status,.meta,.src{font-size:11px;text-transform:uppercase;letter-spacing:.075em;color:var(--muted);font-weight:900}
label{display:grid;gap:9px;font-weight:950;letter-spacing:-.02em;min-width:0}input,textarea,select{width:100%;border:2px solid var(--ink);background:var(--paper);color:var(--ink);border-radius:16px;padding:13px 14px;outline:none}textarea{resize:vertical;line-height:1.4}input:focus,textarea:focus,select:focus{box-shadow:0 0 0 4px rgba(201,255,59,.42)}.picker{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px}.picker button,.history button,.primary,.secondary{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:950;padding:10px 14px;cursor:pointer;box-shadow:3px 3px 0 var(--ink);transition:transform .16s ease;text-decoration:none}.picker button:hover,.history button:hover,.primary:hover,.secondary:hover{transform:translateY(-2px)}.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;min-height:34px}.chip{border:2px solid var(--ink);background:var(--lime);border-radius:999px;padding:7px 10px 7px 12px;display:inline-flex;gap:8px;align-items:center;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:900;box-shadow:2px 2px 0 var(--ink)}.chip button{all:unset;cursor:pointer}.settings{display:grid;grid-template-columns:1.6fr .7fr .7fr;gap:12px;margin:18px 0}.primary{width:100%;margin-top:16px;background:var(--lime);color:var(--ink)}.secondary{width:100%;margin-top:16px;background:var(--cobalt);color:#fff}button:disabled{opacity:.5;cursor:not-allowed}.pairings,.modes{display:flex;flex-wrap:wrap;gap:8px}.empty{color:var(--muted)}.token,.mode{border:2px solid var(--ink);border-radius:18px;background:rgba(255,250,240,.76);box-shadow:2px 2px 0 var(--ink);padding:9px 11px}.token{display:inline-flex;gap:8px;align-items:baseline;background:var(--ink);color:var(--bone)}.token small{color:rgba(244,238,223,.62);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.mode{max-width:100%}.mode b{display:block;font-size:12px;color:var(--cobalt);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.mode span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:360px;font-weight:850}.modes-head{margin-top:22px}.recipe-card{margin-top:var(--gap);padding:24px;display:grid;grid-template-columns:minmax(0,1fr) 410px;gap:24px}.hidden{display:none!important}.recipe-kicker{display:inline-flex;background:var(--lime);border:2px solid var(--ink);border-radius:999px;padding:7px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:950;margin-bottom:12px}h2{margin:0;font-size:clamp(40px,6vw,78px);line-height:.88}h3{margin:28px 0 10px;font-size:24px}#recipeDescription,#why{color:rgba(21,19,15,.76);line-height:1.5;font-size:17px}#steps,#notes{font-size:17px}.meta{display:flex;flex-wrap:wrap;gap:8px;margin:16px 0 4px}.meta span{border:2px solid var(--ink);border-radius:999px;padding:5px 10px;background:var(--soft);font-size:12px;font-weight:900;letter-spacing:-.01em;line-height:1.15}.ingredient-table{display:grid;gap:7px}.ing-row{display:grid;grid-template-columns:1fr 145px 82px;gap:8px;padding:11px 0;border-bottom:1px dashed var(--line)}.ing-row span:nth-child(2),.ing-row span:nth-child(3){color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}ol,ul{padding-left:22px;line-height:1.55}.image-panel{position:sticky;top:16px;align-self:start}.image-slot{min-height:390px;border-radius:24px;background:var(--ink);color:rgba(244,238,223,.62);display:grid;grid-template-rows:minmax(0,1fr) auto auto;place-items:stretch;text-align:center;overflow:hidden;border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink)}.image-slot>img,.image-carousel-main img{width:100%;height:100%;object-fit:cover;display:block}.image-carousel-main{min-height:320px}.image-carousel-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px;background:rgba(21,19,15,.92);color:var(--bone);font-weight:950}.image-carousel-bar button,.image-thumbs button{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-weight:950;cursor:pointer}.image-carousel-bar button{width:38px;height:30px}.image-thumbs{display:flex;gap:6px;overflow-x:auto;padding:8px;background:rgba(244,238,223,.12)}.image-thumbs button{flex:0 0 54px;width:54px;height:54px;padding:0;overflow:hidden;border-radius:14px;opacity:.62}.image-thumbs button.active{opacity:1;outline:3px solid var(--lime)}.image-thumbs img{width:100%;height:100%;object-fit:cover;display:block}.photo-style-block{margin-top:14px;border:1px solid var(--line);border-radius:18px;background:rgba(235,226,207,.45);padding:12px}.photo-style-block select{margin-top:2px}.image-panel small{display:block;color:var(--muted);margin-top:12px;line-height:1.35}.history{padding:20px;margin-top:var(--gap)}.history-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.history-item{border:2px solid var(--ink);border-radius:18px;padding:14px;background:rgba(255,250,240,.7);cursor:pointer;box-shadow:2px 2px 0 var(--ink)}.history-item b{display:block;letter-spacing:-.03em}.history-item span{display:block;margin-top:8px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.menu-dishes{margin-top:14px;display:grid;gap:8px}.menu-dishes-head{font-weight:950;letter-spacing:-.02em;margin:0 0 4px}.menu-dishes label.menu-dish{display:flex;gap:10px;align-items:flex-start;border:2px solid var(--ink);border-radius:14px;background:rgba(255,250,240,.7);padding:9px 11px;box-shadow:2px 2px 0 var(--ink);cursor:pointer;font-weight:800}.menu-dishes .menu-dish input{width:auto;margin-top:3px}.menu-dishes .menu-dish span{display:grid;gap:2px;min-width:0}.menu-dishes .menu-dish i{font-style:normal;font-weight:650;color:var(--muted);font-size:13px}#menuGenBtn{margin-top:12px}#menuText{margin-bottom:10px}.sport-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px}.sport-btn{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:950;padding:9px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}.sport-btn.active{background:var(--lime)}.sport-row .checkline{font-weight:900;font-size:13px}.sport-hint{width:100%;color:var(--muted);font-weight:850;font-size:11px;line-height:1.35}
/* la note n'apparait que quand un des deux toggles est actif (bruit permanent sinon); sans :has = comportement actuel */
.sport-row:not(:has([aria-checked="true"],input:checked)) .sport-hint{display:none}@media(max-width:960px){body{overflow:auto}.shell{width:min(100% - 20px,720px);padding:calc(12px + env(safe-area-inset-top)) 0 32px}.hero,.composer,.recipe-card{grid-template-columns:1fr}.hero-copy{min-height:360px;padding:22px}.signal-card{min-height:210px}.settings{grid-template-columns:1fr}.image-panel{position:static;order:-1}.history-list{grid-template-columns:1fr}.ing-row{grid-template-columns:1fr}.picker{grid-template-columns:1fr}.hero-copy:after{font-size:130px}.image-slot{min-height:280px}}@media(prefers-reduced-motion:no-preference){.panel,.recipe-card,.history{animation:slide .38s cubic-bezier(.16,1,.3,1) both}.hero{animation:heroDrift 7s ease-in-out infinite}@keyframes slide{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes heroDrift{0%,100%{transform:translateY(0) rotate(-.12deg)}50%{transform:translateY(-5px) rotate(.12deg)}}}

/* Share + Frichti ordering controls */
.recipe-actions{display:flex;flex-direction:column;gap:14px;margin:14px 0 4px}
/* Actions fiche recette regroupees par intention. 1 seul heros lime (Mode cuisine), le reste calme.
   Les boutons se masquent individuellement (owner/guest via JS) : un groupe vide se cache tout seul via :has(). */
.act-hero{width:100%;margin:0;font-size:16px;padding:15px 16px}
.act-group{display:flex;flex-direction:column;gap:8px}
.act-group>small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:950;font-size:11px;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.act-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.act-row button{width:100%;margin:0;background:var(--paper);color:var(--ink)}
.act-group:not(:has(button:not(.hidden))){display:none}
/* Modifier = utilitaire owner, demote en ghost discret. */
.act-group--util .act-row{grid-template-columns:auto}
.act-group--util button{justify-self:start;background:transparent!important;box-shadow:none;opacity:.72;font-size:13px}
/* Easter egg Sommelier : au hover, une nappe lime remonte avec une vague douce (le verre se remplit).
   Texte/icone au-dessus (z-index 1), liquide dessous, texte ink lisible sur lime a tout niveau. */
#beverageRecipe{position:relative;overflow:hidden;isolation:isolate}
#beverageRecipe>svg,#beverageRecipe>.som-txt{position:relative;z-index:1}
#beverageRecipe .som-liquid{position:absolute;left:0;bottom:0;width:100%;height:130%;background:var(--lime);z-index:0;transform:translateY(125%);transition:transform .58s cubic-bezier(.45,.05,.25,1);pointer-events:none}
#beverageRecipe .som-liquid::before{content:'';position:absolute;left:0;top:-9px;width:220%;height:10px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='130' height='10' viewBox='0 0 130 10' preserveAspectRatio='none'%3E%3Cpath d='M0 8 Q32.5 2 65 8 T130 8 V10 H0 Z' fill='%23c9ff3b'/%3E%3C/svg%3E") repeat-x;background-size:130px 10px;animation:somliq 2.4s linear infinite paused}
/* au repos : totalement cache (translateY 125%), aucune anim ; tout se declenche au hover uniquement */
#beverageRecipe:hover .som-liquid{transform:translateY(38%)}
#beverageRecipe:hover .som-liquid::before{animation-play-state:running}
@keyframes somliq{to{transform:translateX(-130px)}}
@media(prefers-reduced-motion:reduce){#beverageRecipe .som-liquid{transition:none}#beverageRecipe .som-liquid::before{animation:none}}
@media(max-width:600px){.act-row{grid-template-columns:repeat(2,minmax(0,1fr))}}.secondary.bone{background:var(--paper);color:var(--ink)}.secondary.frichti{background:var(--paper);color:var(--ink)}.modal{position:fixed;inset:0;z-index:40;display:grid;place-items:center;padding:18px;background:rgba(21,19,15,.52);backdrop-filter:blur(8px)}.modal.hidden{display:none}.modal-card{width:min(960px,calc(100vw - 24px));max-height:90vh;overflow:auto;border:2px solid var(--ink);border-radius:28px;background:var(--paper);box-shadow:var(--shadow);padding:20px}.modal-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;border-bottom:2px solid var(--ink);padding-bottom:12px;margin-bottom:12px}.modal-head small{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:rgba(21,19,15,.62);font-weight:950;text-transform:uppercase;letter-spacing:.08em}.modal-head h2{font-size:var(--fs-modal);margin:0;line-height:.9}.icon-btn{border:2px solid var(--ink);background:var(--paper);color:var(--ink);border-radius:999px;width:42px;height:42px;font-size:24px;font-weight:950;box-shadow:3px 3px 0 var(--ink);cursor:pointer}.modal-copy{margin:0 0 14px;color:var(--muted);font-weight:760;line-height:1.35}.gsi-wrap{position:relative;margin:6px 0 12px}
.gsi-btn{display:flex;justify-content:center;min-height:46px}
.gsi-wrap .gsi-btn>div,.gsi-wrap .gsi-btn iframe{width:100%!important;height:100%!important;min-height:46px}#view-library.searching #railLibrary,#view-library.searching .section-head:has(#menusToggle),#view-library.searching #menusList{display:none}#view-library .coll-search-row{display:none}#view-library.searching .coll-search-row{display:block;margin-bottom:26px}.login-or{margin:0 0 10px;text-align:center;color:var(--muted);font-weight:850;font-size:13px;text-transform:uppercase;letter-spacing:.06em}.chips-input{position:relative;display:grid;gap:8px}.chips-input input{width:100%}.chips-list{display:flex;flex-wrap:wrap;gap:6px}.chips-list:empty{display:none}.chips-input .chip{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);padding:4px 6px 4px 12px;font-weight:900;font-size:13px}.chips-input .chip button{border:0;background:transparent;font-size:16px;font-weight:950;cursor:pointer;line-height:1;padding:0 4px}.chips-sug{position:absolute;top:100%;left:0;right:0;z-index:30;display:grid;background:var(--paper);border:2px solid var(--ink);border-radius:14px;box-shadow:3px 3px 0 var(--ink);overflow:hidden;margin-top:4px}.chips-opt{border:0;background:transparent;text-align:left;padding:9px 12px;font-weight:850;cursor:pointer}.chips-opt:hover{background:var(--lime)}.frichti-ingredients{display:grid;gap:10px}.frichti-ing{border:2px solid var(--ink);border-radius:18px;background:rgba(235,226,207,.42);padding:12px;display:grid;gap:10px}.frichti-check{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 10px;align-items:start}.frichti-check input{width:20px;height:20px;margin:2px 0 0;accent-color:var(--lime)}.frichti-check b{grid-column:2;font-size:16px}.frichti-check span{grid-column:2;color:var(--muted);font-size:12px;font-weight:850}.frichti-pref{background:var(--paper)}.modal-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:16px 0}.modal-actions .primary,.modal-actions .secondary{width:auto;margin:0}.frichti-results{display:grid;gap:12px;margin-top:12px}.product-group{border:2px solid var(--ink);border-radius:20px;padding:12px;background:#fffdf6}.product-head{display:flex;justify-content:space-between;gap:12px;border-bottom:1px dashed var(--line);padding-bottom:10px;margin-bottom:8px}.product-head small{color:var(--muted);font-weight:850}.product-choice{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start;padding:10px;border-radius:14px;border:1px solid transparent}.product-choice.picked,.product-choice:has(input:checked){border-color:var(--ink);background:var(--lime)}.product-choice input{width:18px;height:18px;accent-color:var(--cobalt)}.product-choice b{display:block}.product-choice small{display:block;color:var(--muted);font-weight:850;margin-top:2px}.missing{padding:12px;border:1px dashed var(--red);border-radius:14px;color:var(--red);font-weight:900}.cart-commit{margin-top:4px}.share-shell .recipe-card{margin-top:var(--gap)}.share-hero .hero-copy{min-height:260px}.hidden{display:none!important}@media(max-width:820px){.recipe-actions{grid-template-columns:1fr}.modal-card{padding:14px;border-radius:22px}.product-head{display:block}.frichti-check{grid-template-columns:24px 1fr}}

/* Beverage pairing layer */
.recipe-actions{grid-template-columns:repeat(3,minmax(0,1fr))}.secondary.beverage{background:var(--paper);color:var(--ink)}.beverage-panel{margin:18px 0 22px;border:2px solid var(--ink);border-radius:24px;background:var(--ink);color:var(--bone);box-shadow:var(--shadow);padding:24px;overflow:hidden;position:relative}.beverage-panel:after{content:"飲";position:absolute;right:-8px;bottom:-58px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:180px;color:rgba(244,238,223,.06);pointer-events:none}.bev-head{display:grid;grid-template-columns:minmax(0,.55fr) 1fr;gap:16px;align-items:end;margin-bottom:20px;position:relative;z-index:1}.bev-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--lime);font-weight:950;text-transform:uppercase;letter-spacing:.1em}.bev-head h3{margin:2px 0 0;font-size:42px;line-height:.9;color:var(--bone)}.bev-head p,.bev-caveat{margin:0;color:rgba(244,238,223,.68);font-weight:750;line-height:1.3}.bev-axes{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:20px;position:relative;z-index:1}.bev-axes span{border:1px solid rgba(244,238,223,.34);border-radius:999px;padding:8px 9px;background:rgba(244,238,223,.08);display:grid;gap:5px}.bev-axes b{font-size:10px;text-transform:uppercase;letter-spacing:.08em}.bev-axes i{display:block;height:5px;border-radius:99px;background:linear-gradient(90deg,var(--lime) var(--w),rgba(244,238,223,.22) var(--w));}.bev-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;position:relative;z-index:1}.bev-card{border:2px solid rgba(244,238,223,.3);border-radius:18px;background:rgba(244,238,223,.08);padding:16px;display:grid;grid-template-columns:34px minmax(0,1fr);gap:12px}.bev-card.soft{background:rgba(201,255,59,.12)}.bev-card.wild{background:rgba(36,87,255,.18)}.bev-rank{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--lime);color:var(--ink);font-weight:950;border:2px solid var(--bone);box-shadow:2px 2px 0 rgba(244,238,223,.35)}.bev-card h4{margin:0 0 4px;font-size:17px;letter-spacing:-.03em;color:var(--bone)}.bev-card p{margin:0;color:rgba(244,238,223,.74);font-size:13px;line-height:1.32}.bev-meta,.bev-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}.bev-meta span,.bev-tags em{font-style:normal;border:1px solid rgba(244,238,223,.3);border-radius:999px;padding:4px 7px;font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:rgba(244,238,223,.78)}.bev-tags em{color:var(--lime);border-color:rgba(201,255,59,.36)}.bev-lower{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:20px;align-items:start;position:relative;z-index:1}.bev-lower>div{display:grid;gap:12px;align-content:start}.bev-lower h4{margin:0;color:var(--lime);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;font-size:12px;letter-spacing:.08em}.bev-caveat{margin-top:12px;font-size:12px;position:relative;z-index:1}
.bev-refresh{border:1px solid rgba(244,238,223,.4);background:rgba(244,238,223,.08);color:var(--bone);border-radius:999px;padding:6px 12px;font-weight:850;font-size:12px;cursor:pointer;margin-top:8px}
.bev-refresh:hover{background:rgba(201,255,59,.16);border-color:rgba(201,255,59,.5)}@media(max-width:780px){.recipe-actions{grid-template-columns:1fr}.bev-head,.bev-grid,.bev-lower{grid-template-columns:1fr}.bev-head h3{font-size:34px}}


/* History grid: thumbnails + load-more */
.history-item{display:grid;grid-template-rows:auto auto;gap:10px;padding:10px}
.history-thumb{position:relative;width:100%;aspect-ratio:4/5;border:2px solid var(--ink);border-radius:14px;overflow:hidden;background:var(--soft);box-shadow:2px 2px 0 var(--ink);display:grid;place-items:center}
.history-thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .25s ease}
.history-item:hover .history-thumb img{transform:scale(1.04)}
.history-thumb.no-image{background:linear-gradient(135deg,var(--bone),var(--soft) 65%,rgba(201,255,59,.35))}
.history-thumb-fallback{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:64px;color:rgba(21,19,15,.32);line-height:1}
.history-body{padding:0 4px 4px}
.history-footer{margin-top:14px;display:flex;flex-direction:column;align-items:center;gap:10px}
.history-more{width:auto!important;margin:0!important;padding:12px 22px}
.history-error{margin:0;color:#a01313;font-weight:800}
@media(max-width:960px){.history-thumb{aspect-ratio:16/10}}

/* Prepared component accordions */
.ing-row.has-component{background:rgba(201,255,59,.16);border:1px dashed rgba(21,19,15,.32);border-radius:14px;padding:10px 11px}.ing-row span:first-child{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.ing-row em{font-style:normal;border:2px solid var(--ink);border-radius:999px;background:var(--lime);padding:4px 7px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:950;text-transform:uppercase;letter-spacing:.05em;box-shadow:2px 2px 0 var(--ink)}.prepared-components{display:grid;gap:10px;margin:12px 0 22px}.prepared-accordion{border:2px solid var(--ink);border-radius:18px;background:var(--bone);box-shadow:3px 3px 0 var(--ink);overflow:hidden}.prepared-accordion summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:12px;align-items:center;padding:12px 14px;font-weight:950}.prepared-accordion summary::-webkit-details-marker{display:none}.prepared-accordion summary:after{content:"+";display:grid;place-items:center;min-width:26px;height:26px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);box-shadow:2px 2px 0 var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.prepared-accordion[open] summary:after{content:"–"}.prepared-accordion summary span{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;letter-spacing:0.015em;font-size:24px;line-height:.95}.prepared-accordion summary b{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.075em}.prepared-body{border-top:2px solid var(--ink);display:grid;grid-template-columns:.9fr 1fr 1.25fr;gap:12px;padding:14px;background:var(--paper)}.prepared-body small{display:block;color:var(--cobalt);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:950;text-transform:uppercase;letter-spacing:.075em;margin-bottom:6px}.prepared-body p{margin:0;color:rgba(21,19,15,.76);font-weight:800;line-height:1.35}.prepared-body ul,.prepared-body ol{margin:0;padding-left:18px;line-height:1.4;color:rgba(21,19,15,.76);font-weight:760}@media(max-width:960px){.prepared-body{grid-template-columns:1fr}.prepared-accordion summary{align-items:flex-start}.prepared-accordion summary b{max-width:160px;text-align:right}.ing-row.has-component{grid-template-columns:1fr}}

/* History edit mode: small delete cross on each card */
.history-controls{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.history-controls button{background:var(--bone);color:var(--ink)}
#editHistory.active{background:var(--ink);color:var(--bone)}
.history-delete{position:absolute;top:6px;right:6px;width:28px;height:28px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:950;font-size:18px;line-height:1;cursor:pointer;box-shadow:2px 2px 0 var(--ink);display:none;align-items:center;justify-content:center;padding:0;opacity:0;transform:scale(.7);transition:opacity .15s ease,transform .15s ease,background .15s ease}
.history.edit-mode .history-delete{display:inline-flex;opacity:1;transform:scale(1)}
.history-delete:hover{background:var(--red);color:#fff}
.history-delete:focus-visible{outline:3px solid var(--lime);outline-offset:2px}
.history-delete:disabled{cursor:progress;opacity:.55}
.history.edit-mode .history-item{cursor:default}
.history.edit-mode .history-item:hover .history-thumb img{transform:none}
.history-item.deleting{opacity:.45;pointer-events:none;filter:saturate(.6)}
.history-item.delete-error{outline:2px solid var(--red);outline-offset:2px;position:relative}
.history-item.delete-error:after{content:attr(data-error);position:absolute;left:8px;right:8px;bottom:8px;background:rgba(21,19,15,.9);color:#fff;font-size:11px;font-weight:850;letter-spacing:.04em;padding:6px 8px;border-radius:10px;text-align:center;pointer-events:none}
@media(max-width:640px){.history-delete{width:34px;height:34px;font-size:22px;top:8px;right:8px}}

/* Image zoom affordance + lightbox */
.image-carousel-main{position:relative;cursor:zoom-in}
.image-carousel-main img{transition:transform .25s ease}
.image-carousel-main:hover img{transform:scale(1.015)}
.image-carousel-main:after{content:"⤢";position:absolute;top:10px;right:10px;width:32px;height:32px;display:grid;place-items:center;border-radius:999px;background:rgba(21,19,15,.7);color:var(--bone);font-size:16px;font-weight:950;opacity:0;transition:opacity .2s ease;pointer-events:none;border:1px solid rgba(244,238,223,.32);backdrop-filter:blur(4px)}
.image-carousel-main:hover:after,.image-carousel-main:focus-within:after{opacity:1}
.image-thumbs button{cursor:pointer}
.lightbox{position:fixed;inset:0;z-index:120;display:grid;grid-template-rows:1fr auto;background:rgba(15,13,11,.94);backdrop-filter:blur(10px);opacity:0;transition:opacity .2s ease;touch-action:none;overscroll-behavior:contain}
.lightbox.lb-open{opacity:1}
.lightbox.hidden{display:none!important}
.lb-stage{position:relative;overflow:hidden;display:grid;place-items:center;touch-action:none;cursor:zoom-in;user-select:none;-webkit-user-select:none;outline:none}
.lightbox.lb-zoomed .lb-stage{cursor:grab}
.lightbox.lb-zoomed .lb-stage:active{cursor:grabbing}
.lb-img{max-width:96vw;max-height:84vh;transform-origin:center center;will-change:transform;user-select:none;-webkit-user-drag:none;box-shadow:0 24px 60px rgba(0,0,0,.55)}
.lb-btn{position:absolute;z-index:5;border:2px solid rgba(244,238,223,.78);border-radius:999px;background:rgba(21,19,15,.78);color:var(--bone);width:46px;height:46px;font-size:24px;font-weight:950;cursor:pointer;display:grid;place-items:center;line-height:1;font-family:ui-sans-serif,-apple-system,"Segoe UI",sans-serif;transition:background .15s ease,transform .15s ease}
.lb-btn:hover{background:rgba(244,238,223,.18);transform:scale(1.05)}
.lb-btn:focus-visible{outline:3px solid var(--lime);outline-offset:2px}
.lb-btn.hidden{display:none!important}
.lb-close{top:14px;right:14px}
.lb-nav{top:50%;transform:translateY(-50%)}
.lb-nav:hover{transform:translateY(-50%) scale(1.05)}
.lb-prev{left:14px}
.lb-next{right:14px}
.lb-toolbar{position:relative;display:flex;justify-content:center;align-items:center;gap:10px;padding:14px;background:rgba(15,13,11,.62);border-top:1px solid rgba(244,238,223,.12)}
.lb-toolbar .lb-btn{position:static;width:42px;height:42px;font-size:18px;transform:none}
.lb-toolbar .lb-btn:hover{transform:scale(1.05)}
.lb-counter{color:var(--bone);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:950;font-size:13px;min-width:60px;text-align:center;letter-spacing:.06em}
.lb-hint{position:absolute;bottom:78px;left:50%;transform:translateX(-50%);color:rgba(244,238,223,.6);font-size:11px;letter-spacing:.07em;text-transform:uppercase;font-weight:850;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-align:center;pointer-events:none;transition:opacity .25s ease;padding:0 16px}
.lightbox.lb-zoomed .lb-hint{opacity:0}
.lb-loading .lb-img{opacity:.35}
.lb-loading .lb-stage:after{content:"";position:absolute;top:50%;left:50%;width:36px;height:36px;margin:-18px 0 0 -18px;border-radius:50%;border:3px solid rgba(244,238,223,.25);border-top-color:var(--lime);animation:lb-spin .8s linear infinite}
.lb-error .lb-img{display:none}
.lb-error .lb-stage:after{content:"Image indisponible";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--bone);font-weight:950;letter-spacing:.05em}
@keyframes lb-spin{to{transform:rotate(360deg)}}
@media(max-width:640px){
  .lb-btn{width:42px;height:42px;font-size:22px}
  .lb-prev{left:8px}.lb-next{right:8px}.lb-close{top:10px;right:10px}
  .lb-img{max-width:100vw;max-height:78vh}
  .lb-hint{bottom:74px;font-size:10px}
  .lb-toolbar{padding:10px;gap:8px}
}
@media(prefers-reduced-motion:reduce){
  .lightbox{transition:none}
  .image-carousel-main:hover img{transform:none}
  .lb-btn:hover,.lb-nav:hover{transform:none}
  .lb-nav{transform:translateY(-50%)}
}

/* Budget estimator */
.budget-settings{grid-template-columns:1fr 1fr 1fr;margin-top:0}.checkline{display:flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:16px;background:rgba(255,250,240,.58);padding:10px 12px;font-weight:950}.checkline input{width:20px;height:20px;accent-color:var(--lime)}.budget-panel{border:2px solid var(--ink);border-radius:20px;background:rgba(201,255,59,.2);box-shadow:2px 2px 0 var(--ink);padding:14px;margin:14px 0;display:grid;gap:10px}.budget-head{display:grid;gap:4px}.budget-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;color:var(--cobalt);font-weight:950;letter-spacing:.06em}.budget-head strong{font-size:28px;letter-spacing:-.04em}.budget-panel details{border-top:1px dashed var(--line);padding-top:8px}.budget-panel summary{cursor:pointer;font-weight:950}.budget-panel p{color:var(--muted);margin:8px 0 0;font-size:13px}@media(max-width:960px){.budget-settings{grid-template-columns:1fr}}

/* Nutrition estimator */
.nutrition-goals{border:2px solid var(--ink);border-radius:18px;background:rgba(255,250,240,.52);padding:10px 12px;margin:12px 0}.nutrition-goals summary{cursor:pointer;font-weight:950}.nutrition-settings{grid-template-columns:1fr 1fr 1fr;margin:12px 0 4px}.nutrition-panel{border:2px solid var(--ink);border-radius:20px;background:rgba(0,87,255,.09);box-shadow:2px 2px 0 var(--ink);padding:14px;margin:14px 0;display:grid;gap:10px}.nutrition-head{display:grid;gap:6px}.nutrition-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;color:var(--cobalt);font-weight:950;letter-spacing:.06em}.nutrition-head strong{font-size:28px;letter-spacing:-.04em}.nutrition-head div{display:flex;flex-wrap:wrap;gap:6px}.nutrition-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;list-style:none;padding:0;margin:0}.nutrition-grid li{border:1px solid var(--ink);border-radius:14px;background:var(--paper);padding:9px 10px;display:grid;gap:2px}.nutrition-grid b{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.nutrition-grid span{font-size:17px;font-weight:900;letter-spacing:-.02em}.nutrition-grid small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;font-weight:900;color:var(--muted)}.nutrition-panel details{border-top:1px dashed var(--line);padding-top:8px}.nutrition-panel summary{cursor:pointer;font-weight:950}.nutrition-panel p{color:var(--muted);margin:8px 0 0}.nutrition-warnings{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.nutrition-warnings em{font-style:normal;border:1px dashed var(--red);border-radius:999px;color:var(--red);padding:4px 7px;font-size:12px;font-weight:900}@media(max-width:960px){.nutrition-settings,.nutrition-grid{grid-template-columns:1fr}}


/* Classic shopping list */
.recipe-actions{grid-template-columns:repeat(4,minmax(0,1fr))}.secondary.shopping{background:var(--bone);color:var(--ink)}.shopping-card{width:min(760px,calc(100vw - 24px))}.shopping-option{margin:0 0 12px}.shopping-list{display:grid;gap:12px}.shopping-group{border:2px solid var(--ink);border-radius:18px;background:rgba(235,226,207,.42);padding:12px;box-shadow:2px 2px 0 var(--ink)}.shopping-group h3{margin:0 0 10px;font-size:26px;line-height:.95}.shopping-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:9px 0;border-top:1px dashed var(--line);font-weight:850;letter-spacing:0}.shopping-row:first-of-type{border-top:0}.shopping-row input{width:20px;height:20px;accent-color:var(--lime)}.shopping-row span{line-height:1.25}.shopping-row.got span{text-decoration:line-through;text-decoration-thickness:2px;opacity:.5}.shopping-row.got em{opacity:.45}.shopping-row em{font-style:normal;color:var(--muted);font-size:11px;text-transform:uppercase;font-weight:950}.shopping-fallback{margin-top:12px;min-height:220px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}@media(max-width:960px){.recipe-actions{grid-template-columns:1fr 1fr}.shopping-row{grid-template-columns:auto minmax(0,1fr)}.shopping-row em{grid-column:2}}

.shopping-actions{margin:10px 0 6px}.shopping-actions .primary{margin-top:0}
.shopping-find-nearby{display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:transform .18s cubic-bezier(.16,1,.3,1),box-shadow .18s cubic-bezier(.16,1,.3,1)}
.shopping-find-nearby svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;flex:0 0 auto}
.shopping-find-nearby:active{transform:translateY(1px);box-shadow:1px 1px 0 var(--ink)}
.shopping-more{border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:6px 0 12px;padding:8px 0}.shopping-more summary{cursor:pointer;font-size:12px;font-weight:900;color:var(--muted);list-style-position:inside}.shopping-more:not([open]) .shopping-more-body{display:none}.shopping-more-body{display:grid;gap:8px;padding-top:10px}.shopping-more-body .shopping-option{margin:0}
@media(max-width:560px){.shopping-find-nearby{width:100%!important}.shopping-actions .secondary,.shopping-actions .btn-ghost{flex:1 1 auto}}


/* Clean recipe action bar — final override */
/* Boutons d'action groupes : compacts, calmes, texte qui peut passer a la ligne. */
.recipe-actions .secondary{
  width:100%!important;
  margin:0!important;
  min-height:44px;
  padding:10px 8px!important;
  border-radius:13px!important;
  box-shadow:none!important;
  display:flex;
  align-items:center;
  justify-content:center;
  text-align:center;
  white-space:normal;
  font-size:13px;
  line-height:1.15;
  letter-spacing:0;
  transform:none!important;
}
.recipe-actions .secondary:hover{filter:brightness(.97);transform:none!important}
.recipe-actions .secondary.bone,.recipe-actions .secondary.shopping{background:var(--paper);color:var(--ink)}
.recipe-actions .secondary.frichti{background:var(--paper);color:var(--ink)}
.recipe-actions .secondary.beverage{background:var(--paper);color:var(--ink)}
/* les deux boutons qui criaient a tort (Remix ink, Exporter cobalt) reviennent au calme. */
#remixBtn.remix-recipe,#exportRecipe.secondary{background:var(--paper);color:var(--ink)}

/* ============================================================
   User-facing redesign pass
   Recipe-first IA, engine details demoted, compact masthead.
   ============================================================ */

/* Compact masthead replaces the giant ML hero */
.masthead{padding:20px 0 6px;margin-bottom:var(--gap)}
.masthead .mark{margin-bottom:18px;border-color:var(--ink);box-shadow:3px 3px 0 var(--ink)}
.masthead h1{font-size:clamp(40px,7vw,78px);line-height:.86;max-width:15ch;margin:0;color:var(--ink)}
.masthead p{max-width:640px;margin:18px 0 0;font-size:clamp(16px,2vw,20px);line-height:1.42;color:var(--muted);font-weight:600}

/* Focused single-column composer */
.composer{display:block;max-width:920px;margin:0 auto var(--gap)}
.composer .panel.inputs{padding:24px}
.simple-settings{grid-template-columns:1fr 1fr;margin:18px 0}

/* Foldable advanced settings + engine details — same brutalist box language */
.advanced,.engine-details{border:2px solid var(--ink);border-radius:18px;background:rgba(255,250,240,.55);box-shadow:2px 2px 0 var(--ink);margin:16px 0;overflow:hidden}
.engine-details{margin-top:24px;background:rgba(235,226,207,.4)}
.advanced>summary,.engine-details>summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;font-weight:950;text-transform:uppercase;letter-spacing:.05em;font-size:13px;color:var(--ink)}
.advanced>summary::-webkit-details-marker,.engine-details>summary::-webkit-details-marker{display:none}
.advanced>summary::after,.engine-details>summary::after{content:"+";display:grid;place-items:center;min-width:26px;height:26px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);box-shadow:2px 2px 0 var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:16px}
.advanced[open]>summary::after,.engine-details[open]>summary::after{content:"\2013"}
.advanced[open]>summary,.engine-details[open]>summary{border-bottom:2px solid var(--ink)}
.advanced-body{padding:16px;display:grid;gap:18px}
/* groupes thematiques des reglages avances (Nutrition / Budget & temps / Creativite & style) */
.adv-group{display:grid;gap:12px}
.adv-title{font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);border-bottom:2px dashed var(--line);padding-bottom:6px}
/* 3 colonnes FIXES: toutes les cellules ont la meme largeur d'un groupe a l'autre (auto-fit donnait
   des cadres 1/2 vs 1/3 selon la rangee); les inputs se calent en bas de cellule (labels sur 1-2 lignes) */
.adv-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.adv-grid>label{grid-template-rows:1fr auto}
@media(max-width:640px){.adv-grid{grid-template-columns:1fr}}
.advanced-body .settings{margin:0}
.advanced-body label>textarea,.advanced-body .nutrition-settings{margin:0}
.engine-body{padding:16px}
.engine-body 
.engine-body .modes-head{margin-top:18px}

/* Recipe stays the hero of the page; image compact and ratio-capped */
.recipe-card{grid-template-columns:minmax(0,1fr) 300px}
.image-slot{min-height:300px}
.image-carousel-main{min-height:0;aspect-ratio:4/5}
.photo-style-block{padding:0;border:2px solid var(--ink);border-radius:18px;background:rgba(235,226,207,.45);box-shadow:2px 2px 0 var(--ink);overflow:hidden;margin-top:12px}
.photo-style-block>summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;font-weight:950;text-transform:uppercase;letter-spacing:.04em;font-size:12px}
.photo-style-block>summary::-webkit-details-marker{display:none}
.photo-style-block>summary::after{content:"+";display:grid;place-items:center;min-width:24px;height:24px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);box-shadow:2px 2px 0 var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.photo-style-block[open]>summary::after{content:"\2013"}
.photo-style-block[open]>summary{border-bottom:2px solid var(--ink)}
.photo-style-body{padding:14px;display:grid;gap:10px;min-width:0}
.photo-style-body .secondary{margin-top:4px}
.photo-style-body small{color:var(--muted);line-height:1.35}

@media(max-width:960px){
  .composer .panel.inputs{padding:18px}
  .recipe-card{grid-template-columns:1fr}
  .image-panel{order:-1;position:static;margin-bottom:4px}
  .image-slot{min-height:240px}
  .image-carousel-main{aspect-ratio:16/11}
}
@media(max-width:520px){
  .simple-settings{grid-template-columns:1fr}
}

/* ============================================================
   Collections partageables: selection + barre + page publique
   ============================================================ */

/* Mode selection dans l'historique */
#selectHistory.active{background:var(--ink);color:var(--bone)}
.history.select-mode .history-item{cursor:pointer}
.history-item.selected{outline:3px solid var(--lime);outline-offset:2px}
.history-item.selected .history-thumb{box-shadow:2px 2px 0 var(--ink),inset 0 0 0 2px var(--lime)}
.history-item.selected .history-thumb::after{content:"\2713";position:absolute;top:6px;left:6px;width:28px;height:28px;display:grid;place-items:center;border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:950;font-size:16px;box-shadow:2px 2px 0 var(--ink);z-index:2}

/* Barre flottante de partage */
.share-bar{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:50;display:flex;flex-wrap:wrap;align-items:center;gap:10px;width:min(720px,calc(100vw - 24px));border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:var(--shadow);padding:12px 14px}
.share-bar-count{font-weight:950;text-transform:uppercase;letter-spacing:.04em;font-size:13px;white-space:nowrap}
.share-bar-title{flex:1;min-width:160px;margin:0}
.share-bar .primary,.share-bar .secondary{width:auto;margin:0;flex:0 0 auto}
.share-bar .status{flex-basis:100%;margin:0}
.share-bar .status a{color:var(--cobalt);font-weight:950}
@media(max-width:560px){
  .share-bar{bottom:0;left:0;transform:none;width:100%;border-radius:18px 18px 0 0;border-bottom:0}
  .share-bar-title{min-width:100%;order:3}
  .share-bar .primary,.share-bar .secondary{flex:1}
}

/* Page publique collection */
.collection-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap);margin-top:var(--gap)}
.collection-card{border:2px solid var(--ink);border-radius:var(--r);box-shadow:var(--shadow);background:var(--paper);overflow:hidden;display:flex;flex-direction:column}
.cc-photo{display:block;width:100%;aspect-ratio:4/3;border:0;padding:0;margin:0;background:var(--ink);cursor:zoom-in;overflow:hidden}
.cc-photo img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .25s ease}
.cc-photo:hover img{transform:scale(1.03)}
.cc-photo-empty{display:grid;place-items:center;background:linear-gradient(135deg,var(--bone),var(--soft) 65%,rgba(201,255,59,.35));cursor:default}
.cc-photo-empty span{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:88px;color:rgba(21,19,15,.3);line-height:1}
.cc-body{padding:18px;display:flex;flex-direction:column}
.cc-body h2{font-size:clamp(24px,3.2vw,38px);line-height:.92;margin:6px 0 0}
.cc-desc{color:rgba(21,19,15,.72);line-height:1.4;margin:10px 0 0;font-size:15px}
.cc-chips{margin:14px 0 0}
.cc-details{margin-top:16px;border-top:2px solid var(--ink);padding-top:12px}
.cc-details>summary{cursor:pointer;list-style:none;font-weight:950;text-transform:uppercase;letter-spacing:.04em;font-size:13px;display:flex;align-items:center;gap:8px}
.cc-details>summary::-webkit-details-marker{display:none}
.cc-details>summary::after{content:"+";margin-left:auto;display:grid;place-items:center;min-width:26px;height:26px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);box-shadow:2px 2px 0 var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:16px}
.cc-details[open]>summary::after{content:"\2013"}
.cc-full h3{margin:18px 0 8px;font-size:20px}
@media(max-width:760px){
  .collection-grid{grid-template-columns:1fr}
}

/* ============================================================
   Combobox ingredients + dropdowns custom (grammaire du site)
   ============================================================ */

/* Combobox panier d'ingredients */
.combo{position:relative}
.combo-list{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:30;max-height:300px;overflow-y:auto;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:var(--shadow)}
.combo-list.hidden{display:none}
.combo-opt{padding:11px 14px;cursor:pointer;font-weight:750;letter-spacing:-.01em;border-bottom:1px dashed var(--line)}
.combo-opt:last-child{border-bottom:0}
.combo-opt.active,.combo-opt:hover{background:var(--lime);color:var(--ink)}

/* Dropdowns custom: la vraie <select> est cachee, l'UI prend le relais */
.select-native-hidden{display:none}
.select-ui{position:relative;min-width:0}
.select-trigger{width:100%;min-width:0;display:flex;align-items:center;justify-content:space-between;gap:10px;border:2px solid var(--ink);background:var(--paper);color:var(--ink);border-radius:16px;padding:13px 14px;cursor:pointer;font:inherit;font-weight:750;text-align:left;letter-spacing:-.01em}
.select-trigger:focus-visible{outline:none;box-shadow:0 0 0 4px rgba(201,255,59,.42)}
.select-ui.open .select-trigger{box-shadow:0 0 0 4px rgba(201,255,59,.42)}
.select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.select-caret{font-style:normal;font-size:11px;flex:0 0 auto;transition:transform .15s ease}
.select-ui.open .select-caret{transform:rotate(180deg)}
.select-list{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:30;max-height:280px;overflow-y:auto;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:var(--shadow)}
.select-ui.up .select-list{top:auto;bottom:calc(100% + 6px)}
.select-list.hidden{display:none}
.select-opt{padding:11px 14px;cursor:pointer;font-weight:750;letter-spacing:-.01em;border-bottom:1px dashed var(--line)}
.select-opt:last-child{border-bottom:0}
.select-opt:hover{background:var(--lime);color:var(--ink)}
.select-opt.sel{background:var(--lime);color:var(--ink)}
.select-opt.sel:hover{background:var(--lime);color:var(--ink)}
/* switcher de langue: aligné sur la taille des boutons du header, liste étroite */
.language-switcher .select-trigger{border-radius:999px;padding:8px 14px;font-size:13px;font-weight:950;gap:8px;box-shadow:2px 2px 0 var(--ink)}
.language-switcher .select-list{min-width:78px}
.select-search{position:sticky;top:0;z-index:1;width:100%;box-sizing:border-box;border:0;border-bottom:2px solid var(--ink);background:var(--paper);color:var(--ink);padding:12px 14px;font:inherit;font-weight:750;letter-spacing:-.01em;outline:none}
.select-search::placeholder{color:var(--ink);opacity:.45}

/* ============================================================
   Portions stepper + switch unités + hover biblio (kcal/budget)
   ============================================================ */
.recipe-controls{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:14px 0 4px}
.portion-stepper{display:inline-flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);padding:5px 10px;box-shadow:2px 2px 0 var(--ink);font-weight:950}
.portion-stepper button{width:30px;height:30px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-weight:950;font-size:18px;line-height:1;cursor:pointer;display:grid;place-items:center;padding:0}
.portion-stepper button:hover{transform:translateY(-1px)}
.portion-stepper span{font-size:13px;letter-spacing:-.01em}
.portion-stepper b{font-size:16px}
.unit-toggle{display:inline-flex;border:2px solid var(--ink);border-radius:999px;overflow:hidden;box-shadow:2px 2px 0 var(--ink)}
.unit-toggle button{border:0;background:var(--paper);color:var(--ink);font-weight:900;font-size:12px;padding:9px 14px;cursor:pointer;letter-spacing:.02em}
.unit-toggle button+button{border-left:2px solid var(--ink)}
.unit-toggle button.active{background:var(--lime);color:var(--ink)}

.history-stats{position:absolute;left:0;right:0;bottom:0;display:flex;flex-wrap:wrap;gap:6px;padding:8px;background:linear-gradient(to top,rgba(21,19,15,.92),rgba(21,19,15,.5) 70%,transparent);opacity:0;transform:translateY(6px);transition:opacity .18s ease,transform .18s ease;pointer-events:none}
.history-thumb:hover .history-stats{opacity:1;transform:translateY(0)}
.history-stats span{border:1px solid rgba(244,238,223,.5);border-radius:999px;background:rgba(21,19,15,.5);color:var(--bone);font-size:11px;font-weight:850;letter-spacing:.02em;padding:3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
@media(hover:none){.history-stats{opacity:1;transform:none;position:static;background:none;padding:6px 0 0}.history-stats span{background:var(--soft);color:var(--ink);border-color:var(--ink)}}

/* ============================================================
   Assistant recette (chat + actions rapides) + retrait ingrédient
   ============================================================ */
.ing-row{position:relative;padding-right:30px}
.ing-remove{position:absolute;right:0;top:50%;transform:translateY(-50%);width:24px;height:24px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:950;font-size:15px;line-height:1;cursor:pointer;display:grid;place-items:center;padding:0;opacity:0;transition:opacity .15s ease,background .15s ease}
.ing-row:hover .ing-remove,.ing-remove:focus-visible{opacity:1}
.ing-remove:hover{background:var(--red);color:#fff}
.ing-remove:disabled{cursor:progress;opacity:.4}
@media(hover:none){.ing-remove{opacity:1}}

.assistant{margin-top:24px;border:2px solid var(--ink);border-radius:var(--r);background:rgba(235,226,207,.4);box-shadow:2px 2px 0 var(--ink);padding:16px;display:grid;gap:12px}
.assistant-head{display:flex;justify-content:space-between;align-items:center;gap:10px}
.assistant-head span{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;letter-spacing:0.01em;font-size:24px}
.assist-undo{border:2px solid var(--ink);border-radius:999px;background:var(--bone);color:var(--ink);font-weight:950;font-size:12px;padding:7px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.assist-undo:hover{transform:translateY(-1px)}
.assist-quick{display:flex;flex-wrap:wrap;gap:8px}
.assist-chip{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;font-size:13px;padding:8px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.assist-chip:hover{background:var(--lime);transform:translateY(-1px)}
.assist-chip:disabled,.assist-add button:disabled,.assist-input button:disabled,.assist-add input:disabled,.assist-input input:disabled{opacity:.5;cursor:progress}
.assist-add,.assist-input{display:grid;grid-template-columns:1fr auto;gap:8px}
.assist-add input,.assist-input input{margin:0}
.assist-add button,.assist-input button{width:auto!important;margin:0!important}
.assist-thread{display:grid;gap:8px;max-height:300px;overflow-y:auto}
.assist-thread:empty{display:none}
.assist-msg{border:2px solid var(--ink);border-radius:14px;padding:9px 12px;font-weight:600;line-height:1.42;max-width:90%;white-space:pre-wrap}
.assist-msg.user{justify-self:end;background:var(--ink);color:var(--bone)}
.assist-msg.bot{justify-self:start;background:var(--paper)}
.assist-msg.proposal{max-width:min(100%,520px)}
.assist-proposal-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.assist-proposal-actions button{margin:0;border:2px solid var(--ink);border-radius:999px;padding:8px 12px;color:var(--ink);font-weight:900;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.assist-proposal-apply{background:var(--lime)}
.assist-proposal-keep{background:var(--paper)}
.assist-proposal-actions button:active{transform:translate(1px,1px);box-shadow:none}

/* ============================================================
   Espace invité SPA: nav, hero, bibliothèque, compte/login
   ============================================================ */
.guest-nav{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;width:min(1400px,calc(100% - 32px));margin:0 auto;padding:16px 0}
.guest-nav .mark{text-decoration:none;margin:0}
.guest-nav-links{display:flex;gap:8px;flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;scrollbar-width:none;padding:6px 2px;margin:-6px 0 -6px 10px}
.guest-nav-links::-webkit-scrollbar{display:none}
.guest-nav-links a{text-decoration:none;display:inline-flex;align-items:center;gap:6px;border:2px solid var(--ink);border-radius:999px;padding:8px 11px;font-weight:900;font-size:12.5px;color:var(--ink);background:rgba(255,250,240,.72);transition:transform .16s ease,background .16s ease,box-shadow .16s ease;white-space:nowrap}
.guest-nav-links a svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:color .16s ease;flex:0 0 auto}
.guest-nav-links a:hover{transform:translateY(-2px);background:var(--paper);box-shadow:2px 2px 0 var(--ink)}
.guest-nav-links a:hover svg{color:var(--cobalt)}
.guest-nav-links a.active{background:var(--lime);color:var(--ink);box-shadow:3px 3px 0 var(--ink);transform:rotate(-1deg);animation:navwiggle .28s ease}
.guest-nav-links a.active svg{color:var(--ink)}
@keyframes navwiggle{0%{transform:rotate(0) scale(1)}55%{transform:rotate(-2.6deg) scale(1.07)}100%{transform:rotate(-1deg) scale(1)}}
@media(prefers-reduced-motion:reduce){.guest-nav-links a.active{animation:none;transform:none}}
.guest-account{display:flex;flex-wrap:nowrap;justify-content:flex-end;align-items:center;gap:8px;flex:0 0 auto}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.language-switcher select{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font:inherit;font-size:13px;font-weight:950;padding:8px 24px 8px 14px;box-shadow:2px 2px 0 var(--ink);cursor:pointer}
.language-switcher select:focus-visible{outline:3px solid var(--cobalt);outline-offset:2px}
.language-switcher-mobile{display:none;padding:8px 12px}
.language-switcher-mobile select{width:100%}
@media(max-width:960px){.language-switcher-desktop{display:none}.language-switcher-mobile{display:block}body.is-anonymous .language-switcher-desktop{display:block}}
@media(max-width:1280px){.account-email{display:none}}
.account-email{font-weight:850;font-size:13px;color:var(--muted)}
.account-btn{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-weight:950;font-size:13px;padding:8px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.account-btn:hover{transform:translateY(-1px)}

/* Accueil communautaire — le fil remplace les anciennes suggestions Frigo sans changer le reste de l'accueil. */
.home-community{display:grid;gap:clamp(34px,5vw,58px);margin-top:var(--sp-3)}
.home-feed-section{display:grid;gap:16px}
.home-section-head{display:flex;align-items:end;justify-content:space-between;gap:24px;border-top:2px solid var(--ink);padding-top:14px}
.home-section-head small{display:block;margin-bottom:4px;color:var(--cobalt);font:900 10px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.09em;text-transform:uppercase}
.home-section-head h2{margin:0;font-size:var(--fs-page);line-height:.88}
.home-section-head p{max-width:42ch;margin:0;color:var(--muted);font-size:13px;font-weight:750;line-height:1.4;text-align:right;text-wrap:pretty}
.home-community-lead{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(260px,.65fr);min-height:360px;border:2px solid var(--ink);border-radius:var(--r-lg);overflow:hidden;background:var(--paper);box-shadow:var(--sh-card);color:var(--ink);text-decoration:none;transition:transform .16s ease}
.home-community-lead:hover{transform:translateY(-3px)}
.home-lead-media{display:grid;place-items:center;min-height:360px;background:var(--soft);overflow:hidden}
.home-lead-media img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease}
.home-community-lead:hover .home-lead-media img{transform:scale(1.025)}
.home-lead-copy{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;padding:clamp(22px,4vw,38px)}
.home-lead-copy>small{color:var(--cobalt);font:900 10px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.09em;text-transform:uppercase}
.home-lead-copy h3{margin:11px 0 14px;font-size:clamp(30px,4vw,50px);line-height:.9;text-wrap:balance}
.home-lead-copy p{margin:0;color:var(--muted);font-size:13px;font-weight:800;line-height:1.35}
.home-lead-copy em{margin-top:12px;border:1.5px solid var(--ink);border-radius:var(--r-pill);background:var(--lime-soft);padding:5px 9px;font:900 10px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;font-style:normal;text-transform:uppercase}
.home-lead-copy>span{margin-top:26px;font-weight:950;font-size:13px}
.home-community-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.home-approved-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}
.home-community-card{display:flex;flex-direction:column;min-width:0;border:2px solid var(--ink);border-radius:var(--r-md);overflow:hidden;background:var(--paper);box-shadow:var(--sh-card);color:var(--ink);text-decoration:none;transition:transform .16s ease}
.home-community-card:hover{transform:translateY(-3px)}
.home-community-card.is-approved{box-shadow:var(--sh-int)}
.home-community-thumb{position:relative;display:grid;place-items:center;aspect-ratio:4/3;overflow:hidden;background:var(--soft)}
.home-community-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .25s ease}
.home-community-card:hover img{transform:scale(1.035)}
.home-community-thumb em{position:absolute;left:9px;bottom:9px;border:1.5px solid var(--ink);border-radius:var(--r-pill);background:var(--lime-soft);padding:5px 8px;font:900 10px/1 ui-monospace,SFMono-Regular,Menlo,monospace;font-style:normal;text-transform:uppercase}
.home-community-body{display:flex;flex:1;flex-direction:column;gap:7px;padding:12px 13px 15px}
.home-community-body small{color:var(--muted);font:800 10.5px/1.3 ui-monospace,SFMono-Regular,Menlo,monospace}
.home-community-body b{font-size:15px;line-height:1.18;text-wrap:pretty}
.home-community-empty{display:grid;justify-items:start;gap:10px;margin:0;padding:var(--sp-3)}
.home-community-empty p{max-width:56ch;margin:0;color:var(--muted);line-height:1.45}
.home-community-empty .primary,.home-community-empty .btn-ghost{width:auto;margin:4px 0 0}
.home-community-skeleton{display:block;min-height:220px;border-radius:var(--r-md);background:var(--soft);animation:home-skeleton 1.2s ease-in-out infinite alternate}
.home-community-skeleton-hero{min-height:380px;border:2px solid var(--line);border-radius:var(--r-lg)}
.home-community-skeletons{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
@keyframes home-skeleton{to{opacity:.52}}
@media(max-width:900px){.home-community-lead{grid-template-columns:1fr;min-height:0}.home-lead-media{min-height:0;aspect-ratio:16/10}.home-community-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.home-community-skeletons{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){.home-section-head{align-items:flex-start;flex-direction:column;gap:7px}.home-section-head p{text-align:left}.home-community-grid,.home-approved-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.home-community-body{padding:10px}.home-community-body b{font-size:13px}.home-community-body small{font-size:9px}.home-lead-copy{padding:22px}.home-lead-copy h3{font-size:34px}.home-community-skeletons{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}}
@media(prefers-reduced-motion:reduce){.home-community-skeleton{animation:none}.home-community-lead,.home-community-card,.home-community-thumb img,.home-lead-media img{transition:none}}

.hero{position:relative;border:2px solid var(--ink);border-radius:var(--r);box-shadow:var(--shadow);overflow:hidden;background-size:cover;background-position:right bottom;min-height:min(58vh,480px);display:flex;align-items:flex-end}
.hero-inner{position:relative;z-index:1;padding:clamp(20px,4vw,40px);background:linear-gradient(to top,rgba(21,19,15,.84),rgba(21,19,15,.25) 68%,transparent);width:100%}
.hero h1{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(40px,7vw,84px);line-height:.86;letter-spacing:0em;text-transform:uppercase;color:var(--bone);margin:0;max-width:16ch}
.hero p{color:rgba(244,238,223,.88);max-width:580px;margin:14px 0 0;font-size:clamp(15px,2vw,19px);line-height:1.4;font-weight:600}
.hero-cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:22px}
.hero-cta a{text-decoration:none;width:auto!important;margin:0!important;display:inline-flex;align-items:center;justify-content:center;padding:14px 22px;font-size:15px}
.hero-slide{position:absolute;inset:0;display:flex;align-items:flex-end;background-size:cover;background-position:right bottom;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .8s ease,visibility 0s .8s}
.hero-slide.on{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .8s ease}
.hero-dots{position:absolute;z-index:4;right:16px;bottom:14px;display:flex;gap:8px}
.hero-dots button{width:10px;height:10px;padding:0;border:2px solid var(--bone);border-radius:999px;background:transparent;box-shadow:none;cursor:pointer;transition:background .2s ease}
.hero-dots button[aria-current]{background:var(--bone)}
.hero-arrow{position:absolute;z-index:4;top:50%;transform:translateY(-50%);width:40px;height:40px;padding:0;display:grid;place-items:center;border:2px solid var(--ink);border-radius:999px;background:var(--bone);color:var(--ink);box-shadow:3px 3px 0 var(--ink);cursor:pointer;transition:transform .18s ease,box-shadow .18s ease}
.hero-arrow:hover{transform:translateY(-50%) translateY(-2px);box-shadow:4px 5px 0 var(--ink)}
.hero-arrow:active{transform:translateY(-50%) translateY(1px);box-shadow:2px 2px 0 var(--ink)}
.hero-arrow.prev{left:14px}.hero-arrow.next{right:14px}
/* Le contenu se decale des flèches: sans ça la prev mordait sur le kicker et le titre. */
.hero-carousel .hero-inner{padding-left:clamp(58px,5vw,74px);padding-right:clamp(58px,5vw,74px)}
@media(max-width:640px){.hero-arrow{width:34px;height:34px}.hero-arrow.prev{left:8px}.hero-arrow.next{right:8px}.hero-carousel .hero-inner{padding-left:50px;padding-right:50px}}
.hero-slide.hero-ocean{background:linear-gradient(155deg,#082a52 0%,#031532 72%)}
.hero-ocean:before{content:"";position:absolute;inset:0;background:url('heroes/hero-ocean-caustics.webp') center/cover;opacity:.14;mix-blend-mode:screen;pointer-events:none}
.hero-ocean .hero-inner{z-index:2;background:linear-gradient(to top,rgba(3,21,50,.86),rgba(3,21,50,.22) 68%,transparent)}
.hero-ocean-fish{position:absolute;z-index:1;pointer-events:none;filter:drop-shadow(0 8px 14px rgba(1,10,24,.45))}
.hero-ocean-dauphin{right:clamp(10px,5vw,64px);bottom:14%;width:clamp(120px,22%,250px);animation:hero-fish-drift-a 9s ease-in-out infinite alternate}
.hero-ocean-thon{right:clamp(120px,24%,330px);top:9%;width:clamp(80px,13%,150px);opacity:.92;animation:hero-fish-drift-b 11.5s ease-in-out -3s infinite alternate}
.hero-ocean-sardine{left:clamp(180px,32%,420px);top:16%;width:clamp(54px,8%,92px);opacity:.8;animation:hero-fish-drift-a 8s ease-in-out -5.5s infinite alternate-reverse}
.hero-ocean-pieuvre{right:clamp(4px,2vw,26px);bottom:5%;width:clamp(64px,9%,110px);opacity:.9;animation:hero-fish-drift-b 10s ease-in-out -1.8s infinite alternate}
/* Derive lente, transform uniquement: compositee, pas de repaint. Deux phrases pour ne pas
   faire nager tout le monde en cadence. */
@keyframes hero-fish-drift-a{from{transform:translate3d(0,-6px,0) rotate(4.5deg)}to{transform:translate3d(-14px,8px,0) rotate(7.5deg)}}
@keyframes hero-fish-drift-b{from{transform:translate3d(0,7px,0) rotate(-2deg)}to{transform:translate3d(12px,-7px,0) rotate(2.5deg)}}
@media(max-width:640px){.hero-ocean-dauphin{width:110px;right:6px;bottom:auto;top:11%}.hero-ocean-thon{width:64px;top:6%;right:32%}.hero-ocean-sardine{display:none}.hero-ocean-pieuvre{width:58px;bottom:3%}}
.hero-ocean-badge{position:absolute;z-index:3;top:18px;right:20px;background:var(--lime);color:var(--ink);border:2px solid var(--ink);border-radius:999px;padding:8px 14px;font-weight:950;font-size:12px;letter-spacing:.12em;text-transform:uppercase;transform:rotate(6deg);box-shadow:3px 3px 0 var(--ink)}
.hero-kicker{display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900;letter-spacing:.14em;text-transform:uppercase;color:var(--lime);margin-bottom:12px}
@media(prefers-reduced-motion:reduce){.hero-slide,.hero-slide.on{transition:none}.hero-ocean-fish{animation:none}}
/* --- Porte /ocean : bulle one-shot « On vous emmene sous l'eau ? » (option 3) ---
   Montree une seule fois par compte (prefs.ocean_bubble_seen), apres le premier rendu de
   l'accueil. Pas d'animation en prefers-reduced-motion (regle en bas du bloc). */
.ocean-scrim{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:20px;background:rgba(21,19,15,.52);backdrop-filter:blur(5px)}
.ocean-bubble{position:relative;width:min(400px,100%);border:2px solid var(--ink);border-radius:24px;background:var(--bone);box-shadow:var(--shadow);padding:22px 22px 18px;text-align:center;animation:ocean-pop .45s cubic-bezier(.16,1,.3,1) both}
@keyframes ocean-pop{from{opacity:0;transform:translateY(14px) scale(.94)}to{opacity:1;transform:translateY(0) scale(1)}}
.ocean-bubble::after{content:"";position:absolute;left:50%;bottom:-14px;width:24px;height:24px;background:var(--bone);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);transform:translateX(-50%) rotate(45deg)}
.ocean-bubble-fish{width:120px;margin:-64px auto 6px;filter:drop-shadow(4px 4px 0 rgba(21,19,15,.85));rotate:-4deg}
.ocean-bubble-kick{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;font-weight:900;letter-spacing:.14em;text-transform:uppercase;color:var(--cobalt)}
.ocean-bubble h4{margin:6px 0;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(24px,3vw,30px);line-height:.95;text-transform:uppercase;letter-spacing:.02em}
.ocean-bubble p{margin:0 0 16px;font-size:13.5px;font-weight:750;color:var(--muted);line-height:1.4}
.ocean-bubble-acts{display:grid;gap:8px}
.ocean-bubble-go{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);box-shadow:3px 3px 0 var(--ink);font-weight:950;font-size:15px;padding:11px 16px;text-decoration:none;display:block;transition:transform .16s ease}
.ocean-bubble-go:hover{transform:translateY(-2px)}
.ocean-bubble-later{border:0;background:none;font-weight:850;font-size:12.5px;color:var(--muted);text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:4px}
@media(prefers-reduced-motion:reduce){.ocean-bubble{animation:none}}
.home-start{margin:2px 0 var(--gap)}
.hs-head{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;letter-spacing:0.01em;font-size:clamp(20px,3vw,28px);margin:0 2px 12px;color:var(--ink)}
.hs-track{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x proximity;padding:4px 2px 12px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.hs-track::-webkit-scrollbar{display:none}
.hs-card{scroll-snap-align:start;flex:0 0 min(230px,72vw);border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:14px 15px;text-decoration:none;color:var(--ink);transition:transform .16s ease}
.hs-card:hover{transform:translateY(-3px)}
.hs-card small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:900;letter-spacing:.08em;color:var(--cobalt);text-transform:uppercase}
.hs-card b{display:block;margin:8px 0 3px;font-size:17px;letter-spacing:-.02em;line-height:1.1}
.hs-card i{font-style:normal;color:var(--muted);font-size:13px;font-weight:750;line-height:1.3}

.library-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;margin-top:14px}
#view-library.library-gen-empty .section-head:has(#menusToggle),#view-library.library-gen-empty #menusList,#view-library.library-gen-empty .section-head:has(#mineToggle),#view-library.library-gen-empty #mineGrid,#view-library.library-gen-empty #mineEmpty,#view-library.library-gen-empty #importPanel{display:none}
.library-grid.sectioned{display:block}
.lib-skel{border:2px solid var(--ink);border-radius:18px;aspect-ratio:4/5;background:linear-gradient(100deg,var(--paper) 40%,rgba(0,0,0,.06) 50%,var(--paper) 60%) var(--paper);background-size:220% 100%;opacity:.55}
.lib-window-sentinel{width:100%;height:1px;pointer-events:none}
@media(prefers-reduced-motion:no-preference){.lib-skel{animation:libSkel 1.2s linear infinite}@keyframes libSkel{from{background-position:130% 0}to{background-position:-30% 0}}}
.coll-sec{margin-top:26px}
.coll-sec:first-child{margin-top:8px}
.coll-sec-h{display:flex;align-items:baseline;gap:10px;margin:0 0 12px;padding-bottom:8px;border-bottom:2px solid var(--ink);font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;letter-spacing:0.01em;font-weight:400;font-size:26px}
.coll-sec-h span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:900;color:var(--muted);letter-spacing:.05em}
.coll-sec .library-grid{margin-top:0}
.lib-card{text-decoration:none;color:var(--ink);border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);overflow:hidden;display:flex;flex-direction:column;transition:transform .15s ease}
.lib-card:hover{transform:translateY(-3px)}
.lib-card:focus-visible{outline:3px solid var(--cobalt);outline-offset:3px}
.lib-gen-card{background:var(--lime);min-height:320px;justify-content:center}
.lib-gen-inner{display:flex;min-height:100%;padding:24px 18px;flex-direction:column;align-items:center;justify-content:center;gap:12px;text-align:center}
.lib-gen-inner small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:950;letter-spacing:.09em;text-transform:uppercase;color:var(--ink)}
.lib-gen-inner b{max-width:15ch;font-size:21px;line-height:1.02;letter-spacing:-.035em}
.lib-gen-inner>span:last-child{font-size:11px;font-weight:900;color:var(--ink)}
.lib-gen-plus{display:grid;place-items:center;width:48px;height:48px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);transition:transform .15s ease,box-shadow .15s ease}
.lib-gen-plus svg{width:26px;height:26px}
.lib-gen-card:hover .lib-gen-plus{transform:rotate(5deg) translateY(-1px);box-shadow:4px 4px 0 var(--ink)}
.lib-gen-card:active .lib-gen-plus{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--ink)}
.lib-thumb{position:relative;width:100%;flex:0 0 auto;aspect-ratio:4/5;background:var(--ink);overflow:hidden;display:grid;place-items:center}
.lib-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.library-grid:not(.lv-list) .lib-thumb>img{position:absolute;inset:0}
.lib-thumb.no-image{background:linear-gradient(135deg,var(--bone),var(--soft) 65%,rgba(201,255,59,.35))}
.lib-fallback{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:56px;color:rgba(21,19,15,.3)}
.lib-stats{position:absolute;left:0;right:0;bottom:0;display:flex;flex-wrap:wrap;gap:6px;padding:8px;background:linear-gradient(to top,rgba(21,19,15,.9),transparent)}
.lib-stats span{border:1px solid rgba(244,238,223,.5);border-radius:999px;background:rgba(21,19,15,.5);color:var(--bone);font-size:11px;font-weight:850;padding:3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.lib-body{padding:12px}
.lib-body b{display:block;letter-spacing:-.02em;line-height:1.05}
.guest-card{cursor:pointer}
.guest-card .guest-email{color:var(--cobalt)}
.guest-card .promote-btn{margin:0 12px 12px;width:calc(100% - 24px);font-size:13px;padding:9px 10px}
.ing-row span:nth-child(2),.ing-row span:nth-child(3){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.login-card{width:min(420px,calc(100vw - 24px))}
.login-card .assist-add{margin-top:6px}
.login-card .status a{color:var(--cobalt);font-weight:950}
.gbtn-google{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;margin:6px 0 12px;padding:12px 16px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:950;font-size:15px;box-shadow:3px 3px 0 var(--ink);cursor:pointer;transition:transform .08s ease,box-shadow .08s ease}
.gbtn-google:hover{transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--ink)}
.gbtn-google:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--ink)}
.gbtn-google .g-logo{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:999px;background:#fff}

/* Fix: laisser le dropdown custom déborder de son conteneur <details> quand il est ouvert */
.advanced:has(.select-ui.open),
.engine-details:has(.select-ui.open),
.photo-style-block:has(.select-ui.open){overflow:visible}


/* Suivi : journal alimentaire (tracker M1) */
.suivi-tabs{margin-bottom:16px}
.goal-projection{font-weight:850}
.checkin-box{margin:12px 0 18px;border:2px solid var(--ink);border-radius:16px;background:rgba(201,255,59,.18);box-shadow:2px 2px 0 var(--ink);padding:14px 18px;display:grid;gap:7px;line-height:1.4}
.checkin-box:empty{display:none}
.checkin-box b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;font-size:16px;letter-spacing:0.02em}
.checkin-box span{color:rgba(21,19,15,.78);font-weight:750;font-size:13px;line-height:1.35}
.micros-details{margin-top:10px;border:1px solid var(--line);border-radius:14px;background:rgba(255,250,240,.55);padding:10px 12px}
.micros-details summary{cursor:pointer;font-weight:950}
.micros-table{width:100%;border-collapse:collapse;margin-top:8px}
.micros-table td{padding:6px 4px;border-bottom:1px dashed var(--line);font-size:13px}
.micros-table td:nth-child(2){font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:900;text-align:right;white-space:nowrap}
.micros-table td:nth-child(3){color:var(--muted);font-size:11px;text-transform:uppercase;font-weight:900;text-align:right;white-space:nowrap}
.micros-table tr:last-child td{border-bottom:0}
.micros-table .micros-group th{padding:14px 4px 4px;border-bottom:2px solid var(--ink);font-size:11px;text-transform:uppercase;letter-spacing:.06em;font-weight:900;text-align:left}
.micros-table .micros-group:first-child th{padding-top:2px}
.micros-note{margin:8px 0 0;color:var(--muted);font-size:12px;font-weight:750}
/* PR C -- jauges micros a zones (VNR -> reperes Anses). Vue Jour = neutre; couleur + triangle 14 j
   uniquement sur la vue Tendance. Le rouge n'existe pas: la zone « au-dela » est jaune hachuree. */
.mg-seg{display:inline-flex;border:2px solid var(--ink);border-radius:999px;background:var(--paper);box-shadow:var(--sh-int);overflow:hidden;margin:8px 0 12px}
.mg-seg-btn{border:0;background:transparent;padding:7px 15px;font-size:12.5px;font-weight:900;color:var(--muted);cursor:pointer;font-family:inherit}
.mg-seg-btn.on{background:var(--lime);color:var(--ink)}
.mg-seg-btn:disabled{opacity:.5;cursor:not-allowed}
.mg-legend{display:flex;gap:12px;flex-wrap:wrap;font-size:11px;font-weight:800;color:var(--muted);margin:0 0 14px}
.mg-legend i{font-style:normal;display:inline-flex;align-items:center;gap:5px}
.mg-k{flex:0 0 auto;width:14px;height:10px;border:1.5px solid var(--ink);border-radius:3px;display:inline-block}
.mg-k.under{background:repeating-linear-gradient(135deg,var(--paper) 0 4px,rgba(21,19,15,.09) 4px 6px)}
.mg-k.green{background:var(--lime)}
.mg-k.over{background:repeating-linear-gradient(135deg,var(--frichti) 0 5px,rgba(255,226,61,.4) 5px 8px)}
.mg-k.dot{width:10px;height:10px;border-radius:50%;background:var(--paper);border:2px solid var(--ink)}
.mg-k.tri{width:0;height:0;border:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:7px solid var(--cobalt);border-radius:0}
.mg-row{padding:10px 2px 11px;border-bottom:1px dashed var(--line)}
.mg-row:last-child{border-bottom:0}
.mg-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 10px;margin-bottom:7px}
.mg-head b{font-weight:900;font-size:14px;letter-spacing:-.01em;min-width:0}
.mg-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;color:var(--muted);font-weight:800;white-space:nowrap;text-align:right}
.mg-head small ins{text-decoration:none;color:var(--ink)}
.mg-wrap{position:relative;padding-top:9px}
.mg-bar{position:relative;height:18px;border:2px solid var(--ink);border-radius:999px;background:var(--soft);overflow:hidden}
.mg-bar>div{position:absolute;top:0;bottom:0}
.mg-under{background:repeating-linear-gradient(135deg,transparent 0 5px,rgba(21,19,15,.08) 5px 8px)}
.mg-green{background:var(--lime)}
.mg-green.mg-soft{opacity:.42}
.mg-over{background:repeating-linear-gradient(135deg,var(--frichti) 0 6px,rgba(255,226,61,.45) 6px 12px);border-left:2px solid var(--ink)}
.mg-dot{position:absolute;top:18px;width:11px;height:11px;border-radius:50%;background:var(--paper);border:2.5px solid var(--ink);transform:translate(-50%,-50%);z-index:3}
.mg-tri{position:absolute;top:1px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:8px solid var(--cobalt);transform:translateX(-50%);z-index:3}
.mg-badge{display:inline-block;border:2px solid var(--ink);border-radius:999px;padding:0 7px;font-size:10px;font-weight:900;background:var(--paper);vertical-align:1px;margin-left:5px;white-space:nowrap}
.mg-badge.warn{background:var(--frichti)}
.mg-note{margin:6px 0 0;font-size:12px;color:var(--muted);font-weight:650;line-height:1.35}
.mg-note a,.micro-iron-choose,.micro-b12-hint{color:var(--cobalt);font-weight:800;text-decoration:underline;background:none;border:0;padding:0;cursor:pointer;font-size:inherit;font-family:inherit}
.mg-plain .mg-head{margin-bottom:0}
.mg-lock{margin:2px 0 0;font-size:11px;color:var(--muted);font-weight:800}
.mg-disc{margin-top:12px;border:2px dashed rgba(21,19,15,.32);border-radius:14px;padding:0 12px;font-size:12px;color:var(--muted);line-height:1.45;font-weight:650}
.mg-disc summary{cursor:pointer;font-weight:900;color:var(--ink);padding:10px 0;list-style:none}
.mg-disc summary::-webkit-details-marker{display:none}
.mg-disc summary:after{content:"+";float:right;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.mg-disc[open] summary:after{content:"-"}
.mg-disc p{margin:0 0 10px}
.mg-gauges.view-day .mg-green{background:var(--soft)}
.mg-gauges.view-day .mg-green.mg-soft{opacity:.55}
.mg-gauges.view-day .mg-over{background:repeating-linear-gradient(135deg,rgba(21,19,15,.06) 0 6px,transparent 6px 12px)}
.mg-gauges.view-day .mg-tri{display:none}
.mg-gauges.view-day .mg-note-trend{display:none}
.mg-omega-toggle{width:100%;margin-top:6px;border:2px dashed var(--line);border-radius:10px;background:transparent;color:var(--muted);font:inherit;font-weight:800;font-size:11.5px;padding:6px 8px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px}
.mg-omega-toggle svg{width:13px;height:13px;transition:transform .18s}
.mg-omega-toggle.open svg{transform:rotate(180deg)}
.mg-omega-detail{margin-top:8px}
.mg-omega-detail .mg-row{padding:8px 2px 9px}
.mg-omega-detail .mg-row:first-of-type{padding-top:2px}
@media(prefers-reduced-motion:reduce){.mg-omega-toggle svg{transition:none}}
.day-micros{margin:12px 0}
/* Détail nutrition: section repliable (indice santé + micros), fermée par défaut */
.day-detail{margin:12px 0}
.day-detail .dd-head{display:flex;align-items:center;gap:10px;width:100%;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:12px 14px;cursor:pointer;text-align:left;color:var(--ink);font:inherit}
.day-detail .dd-head b{flex:1;min-width:0;font-size:14px;font-weight:900;letter-spacing:-.01em}
.day-detail .dd-chev{flex:0 0 20px;width:20px;height:20px;color:var(--muted);transition:transform .18s ease}
.day-detail.closed .dd-chev{transform:rotate(-90deg)}
.day-detail.closed .dd-body{display:none}
/* sous-blocs cohérents dans le détail: plus de cartes imbriquées, tout à plat */
.day-detail .dd-body{padding:12px 2px 2px}
.day-detail .day-health{border:0;background:none;box-shadow:none;padding:0;margin:0 0 12px;border-radius:0}
.dd-subhead{margin:0 0 8px;font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:900;color:var(--muted)}
/* Fiabilité des données du jour: pastille colorée + phrase d'aide (aucun jugement santé) */
.day-completeness{margin:0 0 12px}
.day-completeness .dc-row{display:flex;align-items:center;gap:8px}
.day-completeness .dc-row b{font-size:13px;font-weight:900;letter-spacing:-.01em;color:var(--ink)}
.day-completeness .dc-dot{flex:0 0 12px;width:12px;height:12px;border-radius:999px;border:2px solid var(--ink)}
.day-completeness .dc-ok{background:var(--lime)}
.day-completeness .dc-mid{background:var(--frichti)}
.day-completeness .dc-low{background:var(--love)}
.day-completeness .dc-hint{display:block;margin-top:3px;font-size:11px;line-height:1.4;color:var(--muted)}
.day-detail .micros-flat{border-top:2px solid var(--line);padding-top:12px}
.fav-btn{position:absolute;bottom:6px;right:6px;z-index:3;width:30px;height:30px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-size:15px;line-height:1;cursor:pointer;box-shadow:2px 2px 0 var(--ink);display:grid;place-items:center;padding:0;color:var(--ink)}
.fav-btn.on{background:var(--lime);color:#c62828}
.fav-btn:hover{transform:scale(1.1)}
.recipe-actions .secondary.lazy{background:var(--paper);color:var(--ink)}
.lazy-panel{border:2px solid var(--ink);border-radius:20px;background:rgba(235,226,207,.5);box-shadow:2px 2px 0 var(--ink);padding:14px;margin:12px 0;display:grid;gap:10px}
.lazy-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;color:var(--cobalt);font-weight:950;letter-spacing:.06em;display:block}
.lazy-head strong{font-size:20px;letter-spacing:-.03em}
.lazy-list{display:grid;gap:8px}
.lazy-row{display:grid;gap:2px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);padding:10px 12px;text-decoration:none;color:var(--ink)}
.lazy-row:hover{background:var(--lime)}
.lazy-row b{font-size:15px}
.lazy-row span{color:var(--muted);font-size:12px;font-weight:800}
.lazy-delivery{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.lazy-delivery.solo{grid-template-columns:1fr}
.lazy-go{display:grid;place-items:center;border:2px solid var(--ink);border-radius:999px;padding:11px 10px;font-weight:950;text-decoration:none;box-shadow:2px 2px 0 var(--ink);font-size:13px}
.lazy-go.ue{background:#06c167;color:#0b0b0b}
.lazy-go.dl{background:#00ccbc;color:#0b0b0b}
.lazy-addr{display:flex;gap:8px}
.lazy-addr input{flex:1;border:2px solid var(--ink);border-radius:12px;padding:9px 10px;background:var(--paper)}
.lazy-addr button{border:2px solid var(--ink);border-radius:12px;background:var(--lime);font-weight:950;padding:0 14px;cursor:pointer}
@media(max-width:480px){.lazy-delivery{grid-template-columns:1fr}}
.recipe-actions .secondary{min-width:0;white-space:normal;line-height:1.15}
@media(max-width:480px){.recipe-actions .secondary{font-size:12.5px;padding:10px 6px!important}}
.stat-fold>summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:12px}
.stat-fold>summary::-webkit-details-marker{display:none}
.stat-fold>summary::after{content:"+";display:grid;place-items:center;min-width:26px;height:26px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);box-shadow:2px 2px 0 var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:16px;flex:0 0 auto}
.stat-fold[open]>summary::after{content:"\2013"}
.stat-fold-body{display:grid;gap:10px;margin-top:12px}
.lib-cocktails{border:2px solid var(--ink);border-radius:999px;background:#17171d;color:#f2f2f2;padding:7px 12px;font-size:12px;font-weight:900;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.lib-cocktails.active{background:var(--lime);color:var(--ink)}
.svgi{display:inline-block;vertical-align:-2px}
.recipe-actions .svgi{vertical-align:-3.5px;margin-right:3px}
.coll-thumb em .svgi{display:block}
.frigo-cook{margin:14px 0}
.fc-head{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;font-size:22px;letter-spacing:0.02em;margin-bottom:10px}
.fc-rail{display:flex;gap:10px;overflow-x:auto;padding-bottom:6px;-webkit-overflow-scrolling:touch}
.fc-card{flex:0 0 150px;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:8px;cursor:pointer;text-align:left}
.fc-thumb{position:relative;display:block;border-radius:10px;overflow:hidden;border:2px solid var(--ink)}
.fc-thumb img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}
.fc-badge{position:absolute;left:5px;bottom:5px;font-style:normal;border:2px solid var(--ink);border-radius:999px;padding:2px 7px;font-size:10px;font-weight:950;text-transform:uppercase}
.fc-badge.ok{background:var(--lime)}
.fc-badge.miss{background:var(--paper)}
.fc-card b{display:block;margin-top:7px;font-size:12.5px;line-height:1.2;max-height:2.4em;overflow:hidden}
.fc-empty{width:100%;border:2px dashed var(--ink);border-radius:18px;background:rgba(201,255,59,.14);padding:20px;text-align:center;cursor:pointer;display:grid;gap:8px}
.fc-empty b{font-size:19px}
.fc-empty span{color:var(--muted);font-weight:800;font-size:13.5px;max-width:420px;margin:0 auto}
.fc-empty em{font-style:normal;justify-self:center;border:2px solid var(--ink);border-radius:999px;background:var(--lime);box-shadow:2px 2px 0 var(--ink);padding:9px 16px;font-weight:950}
/* sous le formulaire depuis la passe composer (22/07): il comble le vide avant la CTA fixe au lieu de parasiter le haut */
.cook-hero{display:flex;align-items:center;gap:14px;flex-wrap:wrap;border:2px solid var(--ink);border-radius:18px;background:rgba(235,226,207,.5);box-shadow:2px 2px 0 var(--ink);padding:10px 14px;margin-top:16px}
/* photo->recette: la grande porte d'entree, au-dessus du composer */
.ch-line{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;font-size:21px;letter-spacing:0.02em}
.ch-thumbs{display:flex;gap:8px;margin-left:auto}
.ch-thumb{position:relative;width:64px;height:64px;border:2px solid var(--ink);border-radius:12px;overflow:hidden;padding:0;cursor:pointer;box-shadow:2px 2px 0 var(--ink);background:var(--paper)}
.ch-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.ch-thumb em{position:absolute;left:0;right:0;bottom:0;font-style:normal;background:rgba(21,19,15,.82);color:var(--bone);font-size:8.5px;font-weight:900;text-transform:uppercase;padding:2px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:600px){.ch-thumbs{margin-left:0}.ch-line{font-size:18px}}
.import-panel{display:flex;gap:8px;flex-wrap:wrap;border:2px dashed var(--ink);border-radius:16px;background:rgba(201,255,59,.12);padding:10px;margin:10px 0}
.import-panel input{flex:1;min-width:220px;border:2px solid var(--ink);border-radius:12px;padding:10px 12px;background:var(--paper)}
.import-panel .primary{width:auto;margin:0;padding:10px 18px}
.import-panel .status{width:100%;margin:2px 0 0}
.recipe-byline a{color:var(--cobalt)}
.ing-sub{position:relative;overflow:hidden;aspect-ratio:1;padding:0!important;display:block!important}
.is-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.ing-sub .is-emoji{position:absolute;inset:0;display:grid;place-items:center;font-size:26px;z-index:0}
.ing-sub .is-label{position:absolute;left:0;right:0;bottom:0;z-index:2;background:var(--paper);border-top:2px solid var(--ink);padding:4px 6px;font-size:10.5px;font-weight:950;line-height:1.1;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ing-sub.picked{outline:3px solid var(--lime);outline-offset:-3px}
.ing-sub.picked .is-label{background:var(--lime)}
.advanced-body .settings{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;align-items:start}
.advanced-body .budget-settings{grid-template-columns:minmax(0,1fr) minmax(0,2fr);align-items:end}
.advanced-body .checkline{align-self:end;min-height:52px;box-sizing:border-box}
.advanced-body .field-help{margin-top:6px}
@media(max-width:700px){.advanced-body .settings,.advanced-body .budget-settings{grid-template-columns:1fr}}
.lib-nophoto{display:none}
.field-help{font-weight:750;color:var(--muted);font-size:12px;line-height:1.35;letter-spacing:0}
.assist-sub{margin:2px 0 10px;color:var(--muted);font-weight:800;font-size:13px}
.img-cta{width:100%;height:100%;min-height:240px;display:grid;place-content:center;gap:8px;background:transparent;border:3px dashed rgba(244,238,223,.4);border-radius:20px;margin:8px;width:calc(100% - 16px);height:calc(100% - 16px);color:var(--bone);font-size:30px;cursor:pointer;text-align:center}
.img-cta b{font-size:17px;color:#c9ff3b}
.img-cta span{font-size:12px;color:rgba(244,238,223,.62);font-weight:800}
.img-cta:hover{border-color:#c9ff3b}
.img-wait{position:relative;height:100%;min-height:240px;display:grid;place-content:center;gap:8px;text-align:center;color:var(--bone);padding:20px;overflow:hidden}
.img-wait b{color:#c9ff3b;font-size:17px}
.img-wait span:last-child{font-size:12.5px;color:rgba(244,238,223,.6);font-weight:800;max-width:240px;margin:0 auto}
.iw-dot{width:14px;height:14px;border-radius:50%;background:#c9ff3b;box-shadow:0 0 12px #c9ff3b;margin:0 auto;animation:blinkiw 1.4s ease-in-out infinite}
@keyframes blinkiw{50%{opacity:.25;transform:scale(.8)}}
.img-wait::after{content:"";position:absolute;inset:0;background:linear-gradient(105deg,transparent 40%,rgba(201,255,59,.07) 50%,transparent 60%);animation:iwsweep 2.2s linear infinite}
@keyframes iwsweep{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
.recipe-tips{display:flex;flex-wrap:wrap;gap:8px;align-items:center;border:2px dashed var(--ink);border-radius:16px;background:rgba(201,255,59,.18);padding:10px 12px;margin:0 0 12px}
.recipe-tips b{white-space:nowrap}
.recipe-tips span{flex:1;min-width:200px;font-size:13px;font-weight:800;color:rgba(21,19,15,.78);line-height:1.35}
.recipe-tips button{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-weight:950;padding:5px 12px;cursor:pointer}
.ninja-guide{display:flex;flex-direction:column;gap:6px;border:2px dashed var(--ink);border-radius:16px;background:var(--lime-soft);padding:10px 12px;margin:12px 0}
.ninja-guide h4{margin:0;font-size:13px;font-weight:950;text-transform:uppercase;letter-spacing:.05em}
.ninja-guide-row{display:flex;gap:8px;font-size:13px;font-weight:800;color:rgba(21,19,15,.78);line-height:1.35}
.ninja-guide-row span:first-child{flex:0 0 auto;min-width:110px;color:var(--muted)}
.recipe-byline{margin:2px 0 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:900;color:var(--cobalt);text-transform:uppercase;letter-spacing:.06em}
.community-panel{border:2px dashed var(--ink);border-radius:16px;background:rgba(255,250,240,.6);padding:10px;margin:10px 0;display:grid;gap:6px;max-height:420px;overflow:auto}
.comm-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px;align-items:center;border-bottom:1px dashed var(--line);padding:6px 2px}
.comm-open{background:none;border:0;text-align:left;font-weight:900;cursor:pointer;color:var(--ink);padding:0;text-decoration:underline}
.comm-row span{color:var(--muted);font-size:11px;font-weight:850;white-space:nowrap}
.comm-promote{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-weight:900;font-size:11px;padding:5px 9px;cursor:pointer}
.comm-promote.done{background:var(--paper);opacity:.7}
@media(max-width:600px){.comm-row{grid-template-columns:1fr auto}.comm-row span{display:none}}
body.is-admin .lib-nophoto{display:inline-block;border:2px solid var(--ink);border-radius:999px;background:var(--paper);padding:7px 12px;font-size:12px;font-weight:900;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
body.is-admin .lib-nophoto.active{background:var(--lime)}
.lib-genimgs{border:2px solid var(--ink);border-radius:999px;background:#17171d;color:#c9ff3b;padding:7px 12px;font-size:12px;font-weight:900;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.lib-genimgs:disabled{opacity:.5}
.add-week-btn{position:absolute;bottom:42px;right:6px;z-index:3;width:30px;height:30px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-size:14px;line-height:1;cursor:pointer;box-shadow:2px 2px 0 var(--ink);display:grid;place-items:center;padding:0}
.add-week-btn:hover{transform:scale(1.1)}
.lv-list .lib-card{position:relative}
.lv-list .lib-thumb{position:static}
.lv-list .add-week-btn{position:absolute;right:48px;top:50%;bottom:auto;transform:translateY(-50%);margin:0}
.awc-ico{display:block;margin:auto}
.recipe-actions .remix-recipe .rmx-ico-svg{display:inline-block;vertical-align:-2px;margin:0 4px 0 0}
.recipe-actions .secondary.remix-recipe{background:#17171d;color:#c9ff3b;border-color:var(--ink)}
.remix-modal{position:fixed;inset:0;z-index:80;background:rgba(10,10,14,.72);display:flex;align-items:center;justify-content:center;padding:12px}
.remix-modal.hidden{display:none}
.remix-box{display:flex;align-items:stretch;width:min(880px,100%);max-height:92vh;overflow:hidden;border:3px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:6px 6px 0 var(--ink);position:relative}
.remix-left{flex:1 1 44%;padding:22px;min-width:0;min-height:0;overflow-y:auto}
.remix-left h3{margin:4px 0 10px}
.remix-right{flex:1 1 56%;padding:22px 22px 24px;background:#17171d;color:#f2f2f2;min-width:0;min-height:0;overflow-y:auto}
.rmx-close{position:absolute;top:8px;right:12px;z-index:2;background:#17171d;border:2px solid #3a3a44;border-radius:999px;width:30px;height:30px;font-size:14px;cursor:pointer;color:#f2f2f2;display:grid;place-items:center}
.rmx-head{font-weight:900;letter-spacing:.14em;font-size:12px;display:flex;align-items:center;gap:8px;color:#c9ff3b}
.rmx-led{width:9px;height:9px;border-radius:50%;background:#c9ff3b;box-shadow:0 0 8px #c9ff3b;animation:rmxblink 1.6s infinite}
@keyframes rmxblink{50%{opacity:.3}}
.rmx-presets-hint{font-size:11px;font-weight:800;opacity:.65;margin:6px 0 10px;text-transform:uppercase;letter-spacing:.06em;color:#9aa0ab}
.rmx-presets{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 6px}
.rmx-preset{border:2px solid #3a3a44;border-radius:999px;background:transparent;color:#f2f2f2;padding:8px 13px;font-size:12px;font-weight:800;cursor:pointer;line-height:1.15}
.rmx-preset:hover{border-color:#c9ff3b}
.rmx-preset.on{background:#c9ff3b;color:#111;border-color:#c9ff3b}
.rmx-preset.rmx-toggle{display:inline-flex;flex-direction:column;align-items:flex-start;gap:1px}
.rmx-preset.rmx-toggle small{font-size:9px;font-weight:700;opacity:.7;letter-spacing:.02em}
.rmx-faders{display:block;margin:22px 0 10px}
.rmx-fader{display:grid;grid-template-columns:22px 1fr auto;grid-template-areas:"ico meta out" "rail rail rail";column-gap:8px;row-gap:9px;align-items:center;margin:0 0 20px;text-align:left}
.rmx-ico{grid-area:ico;font-size:16px}
.rmx-fader-meta{grid-area:meta;display:flex;flex-direction:column;min-width:0}
.rmx-fader-label{font-size:12px;font-weight:900;letter-spacing:.04em;color:#f2f2f2;text-transform:uppercase}
.rmx-fader-sub{font-size:10px;font-weight:600;color:#8b919c;line-height:1.35;margin-top:2px}
.rmx-fader output{grid-area:out;font-size:11px;font-weight:900;color:#c9ff3b;letter-spacing:.03em;white-space:nowrap}
.rmx-rail{grid-area:rail;position:relative;display:block;width:100%;height:26px}
.rmx-rail input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px;margin:9px 0;background:linear-gradient(to right,#c9ff3b 50%,#2c2c35 50%);border-radius:999px;outline:none}
.rmx-rail input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;border-radius:50%;background:#c9ff3b;border:3px solid #111;box-shadow:0 0 6px rgba(201,255,59,.55);cursor:pointer}
.rmx-rail input[type=range]::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:#c9ff3b;border:3px solid #111}
.rmx-hint{font-size:11px;font-weight:800;opacity:.65;margin:20px 0 6px;text-transform:uppercase;letter-spacing:.06em}
.rmx-thumb img{width:100%;height:150px;object-fit:cover;border:2px solid var(--ink);border-radius:12px}
.rmx-chips{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 4px}
.rmx-chip{border:2px solid #3a3a44;border-radius:999px;background:transparent;padding:5px 10px;font-size:12px;font-weight:700;cursor:pointer;color:inherit}
.remix-left .rmx-chip{color:var(--ink);border-color:var(--ink);background:var(--paper)}
.rmx-chip.cut{text-decoration:line-through;opacity:.5;border-style:dashed}
.rmx-chip.on{background:#c9ff3b;color:#111;border-color:#c9ff3b}
.remix-right input[type=text]{width:100%;margin:10px 0 0;background:#22222a;border:2px solid #3a3a44;color:#f2f2f2;border-radius:10px;padding:11px 12px;font-size:13px;box-sizing:border-box}
.rmx-go{width:100%;margin-top:20px;padding:14px;background:#c9ff3b;color:#111;font-weight:900;letter-spacing:.06em;border-color:#c9ff3b}
@media (max-width:760px){.remix-box{flex-direction:column;overflow:auto}.remix-left,.remix-right{flex:none;overflow:visible}.rmx-thumb img{height:110px}.rmx-close{position:fixed;top:calc(4vh + 6px);right:24px;z-index:90}}
.lv-list .fav-btn{position:absolute;right:10px;top:50%;bottom:auto;transform:translateY(-50%);margin:0}
.recipe-actions .secondary.fav-recipe{background:var(--paper);color:var(--ink)}
.recipe-actions .secondary.fav-recipe.on{background:var(--lime)}
.tag-edit-btn{cursor:pointer;background:var(--paper);border-style:dashed}
.tag-edit-btn:hover{background-size:100% 100%}
.tag-editor{margin:10px 0;border:2px dashed var(--ink);border-radius:14px;background:rgba(201,255,59,.1);padding:10px}
.tag-editor-grid{display:flex;flex-wrap:wrap;gap:6px}
.te-chip{border:2px solid var(--ink);border-radius:999px;background:var(--paper);padding:6px 10px;font-size:12px;font-weight:900;cursor:pointer}
.te-chip.on{background:var(--lime)}
.te-chip:disabled{opacity:.5}
.te-label{font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:950;color:var(--muted);margin:8px 0 4px}
.te-label:first-child{margin-top:0}
.te-chip.te-dt.on{background:var(--lime);color:var(--ink)}
.basket-matches{margin:12px 0 4px;border:2px dashed var(--ink);border-radius:16px;background:rgba(36,87,255,.06);padding:10px 12px}
.bm-head{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:950;color:var(--cobalt);margin-bottom:8px}
.bm-rail{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;-webkit-overflow-scrolling:touch}
.bm-card{flex:0 0 230px;display:flex;align-items:center;gap:9px;border:2px solid var(--ink);border-radius:12px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:7px;text-decoration:none;color:inherit;transition:transform .12s ease}
.bm-card:hover{transform:translateY(-2px);background:var(--lime)}
.bm-card img,.bm-fallback{width:46px;height:46px;min-width:46px;border-radius:9px;object-fit:cover;object-position:50% 60%;border:1px solid var(--line)}
.bm-fallback{display:grid;place-items:center;background:var(--ink);color:rgba(244,238,223,.5);font-size:20px}
.bm-body{min-width:0}
.bm-body b{display:block;font-size:12.5px;line-height:1.15;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bm-body em{font-style:normal;font-size:10.5px;color:var(--muted);font-weight:900;text-transform:uppercase;letter-spacing:.04em}
.dish-match-card{flex-direction:column;align-items:stretch;width:100%;margin-top:10px;cursor:default}
.dish-match-card:hover{transform:none;background:var(--paper)}
.dish-match-card .bm-body b{white-space:normal}
.dish-match-actions{display:flex;gap:8px;margin-top:8px}
.dish-match-actions button{width:auto;flex:1;margin:0;padding:9px 12px;font-size:13px}
.lib-toolbar{display:flex;gap:10px;align-items:center}
/* Hauteur UNIQUE pour tous les controles de la barre. Ils venaient de trois familles de classes
   (.segctl, .pl-tool-pill, .lib-nophoto, .library-search) et faisaient 52, 30, 33 et 49 px:
   les silhouettes ne s'alignaient sur rien. 44 px tient la cible tactile du canon (>= 42) sans
   la lourdeur des 52. Le respiro du bas manquait aussi, surtout quand la barre passe sur deux
   rangees: row-gap plus genereux que le gap horizontal, et une marge sous la barre. */
.lib-toolbar{--tb-h:44px;row-gap:12px;margin-bottom:14px}
.lib-toolbar>*{min-height:var(--tb-h)}
.lib-toolbar .library-search{height:var(--tb-h);padding-block:0}
.lib-toolbar .pl-tool-pill,.lib-toolbar .lib-cocktails,.lib-toolbar .lib-genimgs,body.is-admin .lib-toolbar .lib-nophoto{display:inline-flex;align-items:center;justify-content:center;min-height:var(--tb-h);padding-block:0}
/* le segctl porte 3 px de padding et 2 px de bordure de chaque cote: son bouton interne doit
   donc faire 44 - 10 = 34 pour que l'ensemble tombe pile a 44. */
.lib-toolbar .segctl-btn{min-height:34px}

.lib-toolbar .library-search{flex:1;min-width:0}
/* Les bascules d'affichage (Monde carte/liste, tri et affichage de la bibliotheque, Evenements)
   sont des .segctl depuis qu'on a soldé .view-toggle: c'etait le meme composant que le segctl,
   avec un autre profil (radius 12, segments colles), repete dans quatre vues. */
/* Scope: ces segctl vivent dans des conteneurs flex, sans quoi ils se font ecraser. Pas de regle
   globale sur .segctl, elle casserait les seg-wide qui doivent prendre toute la largeur. */
.lib-toolbar .segctl,.monde-view-toggle,.ev-vt{flex:0 0 auto}
.lib-sort-toggle .segctl-btn{font-size:12px;font-weight:950;padding-inline:12px}
.lib-sort-toggle .segctl-btn:disabled{cursor:progress;opacity:.55}
.library-grid.lv-large{grid-template-columns:repeat(auto-fill,minmax(min(400px,100%),1fr));gap:20px}.lv-large .lib-thumb{aspect-ratio:3/2}.lv-large .lib-thumb img{object-position:50% 50%}
.lv-large .lib-body b{font-size:20px;letter-spacing:-.03em}
.library-grid.lv-list{display:flex;flex-direction:column;gap:8px}
.lv-list .lib-card{flex-direction:row;align-items:center;gap:12px;padding:8px;border-radius:14px}
.lv-list .lib-thumb{width:66px;min-width:66px;aspect-ratio:1/1;border-radius:10px}
.lv-list .lib-stats{display:none}
.lv-list .lib-nutri{display:none}
.lv-list .lib-body{padding:0 124px 0 0;min-width:0}
.lv-list .lib-body b{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.lv-list .lib-tags{display:none}
.lv-list .lib-del{position:absolute;right:88px;left:auto;top:50%;transform:translateY(-50%);opacity:1;display:flex;align-items:center;justify-content:center;margin:0}
.lv-list .lib-body{flex:1;min-width:0}
.lv-list .lib-gen-card{min-height:78px;padding:0}
.lv-list .lib-gen-inner{width:100%;min-height:0;padding:10px 14px;display:grid;grid-template-columns:44px minmax(0,1fr) auto;grid-template-areas:"plus title meta";gap:4px 12px;text-align:left;align-items:center}
.lv-list .lib-gen-inner small{display:none}
.lv-list .lib-gen-plus{grid-area:plus;width:42px;height:42px;box-shadow:2px 2px 0 var(--ink)}
.lv-list .lib-gen-inner b{grid-area:title;max-width:none;font-size:16px}
.lv-list .lib-gen-inner>span:last-child{grid-area:meta;white-space:nowrap}
@media(max-width:700px){.lib-toolbar{flex-wrap:wrap}.lib-toolbar .library-search{flex:1 1 100%;order:-1}.lib-toolbar .lib-nophoto,.lib-toolbar .lib-cocktails{padding:7px 10px;font-size:11.5px}.library-grid.lv-large{grid-template-columns:1fr}}
.home-collections{margin-top:26px}
.coll-rail{display:flex;gap:10px;overflow-x:auto;padding:4px 2px 10px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
.coll-card{flex:0 0 150px;width:150px;min-width:0;max-width:150px;scroll-snap-align:start;display:flex;flex-direction:column;gap:6px;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:8px;cursor:pointer;text-align:left;transition:transform .12s ease}
.coll-card:hover{transform:translateY(-2px);background:var(--lime)}
.coll-thumb{position:relative;width:100%;aspect-ratio:3/4;border-radius:10px;overflow:hidden;background:var(--soft);border:1px solid var(--line);display:block}
.coll-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 60%}
.coll-thumb em{position:absolute;bottom:4px;left:4px;font-style:normal;font-size:20px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.4))}
.coll-title{font-weight:950;font-size:13px;line-height:1.15;overflow-wrap:break-word;hyphens:auto}
.coll-count{color:var(--muted);font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.05em}
.coll-rail-compact{margin-bottom:12px}
.coll-rail-compact .coll-card{flex-basis:126px;width:126px;max-width:126px}
.coll-rail-compact .coll-thumb{aspect-ratio:3/4}
.coll-see-all{justify-content:center;text-align:center;min-height:148px}
.coll-see-all .coll-title{font-size:15px}
#view-collections h2{margin:12px 0 6px}
#view-collections .ch-back{margin-bottom:4px}
.coll-hub-sec{margin-bottom:22px}
.coll-hub-sec .coll-sec-h{margin-top:0}
.coll-hub-grid{display:flex;flex-wrap:wrap;gap:10px}
.collection-banner{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;border:2px solid var(--ink);border-radius:14px;background:var(--lime);box-shadow:2px 2px 0 var(--ink);padding:10px 130px 10px 14px;margin-bottom:12px;position:relative}
.cb-share{position:absolute;top:50%;right:48px;transform:translateY(-50%);border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;font-size:11px;text-transform:uppercase;letter-spacing:.04em;padding:6px 13px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);z-index:2}
.cb-share:disabled{opacity:.6;cursor:wait}
#cbCount{white-space:nowrap}
#cbClear{position:absolute;top:50%;right:10px;transform:translateY(-50%);width:30px;height:30px;border:2px solid var(--ink);border-radius:50%;background:var(--paper);color:var(--ink);font-weight:950;font-size:16px;line-height:1;cursor:pointer;padding:0;box-shadow:2px 2px 0 var(--ink);z-index:2}
.collection-banner b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;font-size:18px;letter-spacing:0.02em}
.collection-banner span{color:rgba(21,19,15,.7);font-size:12px;font-weight:900;text-transform:uppercase}
.collection-banner #cbClear{margin-left:auto;border:2px solid var(--ink);border-radius:999px;background:var(--paper);width:28px;height:28px;font-weight:950;cursor:pointer;line-height:1}
.gsb-list-title{max-width:200px;padding:8px 10px;border-radius:12px}
body:not(.is-admin) .admin-only{display:none}
.home-scan-empty{border:2px dashed var(--ink);border-radius:18px;background:rgba(201,255,59,.14);padding:20px;display:grid;gap:12px;justify-items:start}
.home-scan-empty p{margin:0;font-weight:800;line-height:1.4;color:rgba(21,19,15,.8)}
.home-scan-btn{width:auto;margin-top:0;display:inline-block;text-align:center}
.ing-tiles{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
/* 10 familles: 5 colonnes x 2 rangees desktop (zero orpheline), chips horizontales 2 col en mobile */
#ingTiles{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
#ingTiles .ing-subs{grid-column:1/-1}
.ing-cat{position:relative;display:block;aspect-ratio:4/3;padding:0;overflow:hidden;border:2px solid var(--ink);border-radius:16px;background:var(--bone);box-shadow:2px 2px 0 var(--ink);cursor:pointer;font-weight:950;transition:transform .12s ease}
.ic-thumb{position:absolute;inset:0;display:block}
.ic-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.ing-cat .ic-emoji{position:absolute;inset:0;display:grid;place-items:center;font-size:34px;z-index:0}
.ing-cat .ic-label{position:absolute;left:0;right:0;bottom:0;z-index:2;background:var(--paper);border-top:2px solid var(--ink);padding:6px 8px;font-size:12.5px;font-weight:950;text-align:left;line-height:1.15}
.ing-cat.open .ic-label{background:var(--lime)}
.ing-cat.open{outline:3px solid var(--lime);outline-offset:-3px}
.ing-cat:hover{transform:translateY(-2px)}
.ing-cat.open{background:var(--lime)}
.ic-emoji{font-size:22px;line-height:1}
.ing-subs{flex-basis:100%;display:grid;grid-template-columns:repeat(auto-fill,minmax(108px,1fr));gap:8px;border:2px dashed var(--ink);border-radius:16px;background:rgba(201,255,59,.12);padding:10px}
.ing-sub{display:flex;flex-direction:column;align-items:center;gap:5px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:10px 6px;cursor:pointer;font-weight:900;font-size:12px;transition:transform .12s ease}
.ing-sub:hover{transform:translateY(-2px);background:var(--lime)}
.ing-sub.picked{background:var(--lime);outline:3px solid var(--cobalt)}
.is-emoji{font-size:30px;line-height:1}
@media(max-width:700px){
  .ing-subs{grid-template-columns:repeat(3,1fr)}
  /* chips horizontales photo+label: 2 col x 5 rangees, ~2x moins haut que les cartes 3 col + orpheline */
  #ingTiles{grid-template-columns:repeat(2,1fr);gap:8px}
  .ing-cat{display:flex;align-items:center;aspect-ratio:auto;height:50px}
  .ic-thumb{position:relative;inset:auto;width:50px;height:100%;flex:none;border-right:2px solid var(--ink);overflow:hidden}
  .ing-cat .ic-emoji{font-size:22px}
  .ing-cat .ic-label{position:static;border-top:0;flex:1;min-width:0;padding:0 8px;font-size:11.5px;line-height:1.1;white-space:normal}
}
.tag-pill.classic{background:var(--ink);color:var(--bone);border-color:var(--ink)}
.tag-pill.dtype{background:var(--soft);color:var(--ink);border-color:var(--ink)}
.tag-pill.upgraded{background:rgba(36,87,255,.14);color:var(--cobalt);border-color:var(--cobalt)}
.tag-pill.creation{background:var(--cobalt);color:#fff;border-color:var(--ink)}
.recipe-actions .secondary.upgrade{background:var(--cobalt);color:#fff}
.upgrade-config{border:2px solid var(--ink);border-radius:18px;background:rgba(36,87,255,.08);box-shadow:2px 2px 0 var(--ink);padding:14px;margin:0 0 14px}
.upgrade-config .primary{margin-top:10px}
.upgrade-settings{grid-template-columns:1fr 1.4fr;margin:10px 0 0}
@media(max-width:700px){.upgrade-settings{grid-template-columns:1fr}}
.autofill-settings{grid-template-columns:1fr 1fr;margin:12px 0}
@media(max-width:700px){.autofill-settings{grid-template-columns:1fr}}
.monde-panel{overflow:hidden}
/* --- Porte /ocean : rail « Atlas vivants » au-dessus de la carte du monde (option 4A) ---
   UNE rangee horizontale compacte, meme pattern que le rail « Par ou commencer ? » (hs-track):
   scroll-x sans scrollbar, carte live large en tete, deux « Bientôt » etroites (span, jamais
   des liens). Aucun titre de section: le rail se suffit. */
.atlas-strip{display:flex;gap:12px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding:4px 2px 12px;margin-bottom:4px}
.atlas-strip::-webkit-scrollbar{display:none}
.atlas-card{position:relative;flex:0 0 230px;min-height:112px;display:grid;grid-template-columns:56px minmax(0,1fr);grid-template-rows:auto auto;align-items:center;align-content:center;gap:3px 12px;border:2px solid var(--ink);border-radius:16px;background:var(--bone);box-shadow:3px 3px 0 var(--ink);padding:10px 12px;text-decoration:none;color:var(--ink);overflow:hidden}
.atlas-vis{width:56px;height:56px;grid-row:1/3;border:2px solid var(--ink);border-radius:12px;display:grid;place-items:center;overflow:hidden;background:var(--paper)}
.atlas-vis img{width:50px;height:50px;object-fit:contain}
.atlas-txt{min-width:0}
.atlas-txt small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:900;letter-spacing:.1em;text-transform:uppercase;color:var(--cobalt)}
.atlas-txt b{display:block;font-size:15.5px;line-height:1.05;margin:3px 0 2px;letter-spacing:-.01em}
.atlas-txt i{font-style:normal;display:block;font-size:11.5px;font-weight:750;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.atlas-badge{grid-column:2;justify-self:start;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;border:2px solid var(--ink);border-radius:999px;padding:5px 10px;box-shadow:2px 2px 0 var(--ink)}
.atlas-card.live{flex-basis:320px;grid-template-columns:64px minmax(0,1fr) auto;grid-template-rows:none;background:linear-gradient(120deg,#2e8fd8 0%,#175dde 35%,#052b72 100%);color:var(--bone);transition:transform .16s ease}
.atlas-card.live::before{content:"";position:absolute;inset:0;background:url('heroes/hero-ocean-caustics.webp') center/cover;opacity:.14;mix-blend-mode:screen;pointer-events:none}
.atlas-card.live:hover{transform:translateY(-2px)}
.atlas-card.live .atlas-vis{width:64px;height:64px;grid-row:auto;background:rgba(255,250,240,.14)}
.atlas-card.live .atlas-vis img{width:56px;height:56px;filter:drop-shadow(2px 2px 0 rgba(3,27,68,.55))}
.atlas-card.live .atlas-txt small{color:var(--lime)}
.atlas-card.live .atlas-txt i{color:rgba(244,238,223,.75)}
.atlas-card.live .atlas-badge{grid-column:auto;justify-self:auto;background:var(--lime);color:var(--ink)}
.atlas-card.soon{opacity:.72}
.atlas-card.soon .atlas-vis img{filter:grayscale(1) contrast(.92);opacity:.85}
.atlas-card.soon .atlas-badge{background:var(--paper);color:var(--muted)}
@media(max-width:640px){
  .atlas-card,.atlas-card.live{flex:0 0 78%;grid-template-columns:56px minmax(0,1fr);grid-template-rows:auto auto}
  .atlas-card.live .atlas-vis{width:56px;height:56px;grid-row:1/3}
  .atlas-card.live .atlas-vis img{width:50px;height:50px}
  .atlas-card .atlas-badge,.atlas-card.live .atlas-badge{grid-column:2;justify-self:start}
}
.monde-intro{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:24px;align-items:start;margin-bottom:20px}
.monde-lead{font-size:17px;font-weight:780;color:var(--muted);line-height:1.45;max-width:52ch;margin:0 0 14px;text-wrap:pretty}
.monde-view-toggle{margin:0}
.monde-progress{display:grid;grid-template-columns:minmax(180px,auto) minmax(120px,1fr) auto;align-items:center;gap:14px;max-width:820px}
.monde-progress-copy{display:grid;gap:3px}
.monde-progress-copy b{font-size:15px;letter-spacing:-.01em}
.monde-progress-copy small{font-size:12px;color:var(--muted);font-weight:780}
.monde-progress-track{height:10px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);overflow:hidden;min-width:120px}
.monde-progress-track i{display:block;height:100%;background:var(--lime);transition:width .3s cubic-bezier(.22,1,.36,1)}
.monde-next{display:grid;gap:1px;border:0;border-left:1px solid var(--line);background:transparent;color:var(--ink);padding:3px 0 3px 14px;text-align:left;font:inherit;cursor:pointer;min-height:44px}
.monde-next span{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:900}
.monde-next b{font-size:14px}
.monde-next:hover b{text-decoration:underline;text-underline-offset:3px}
.monde-tools{display:grid;gap:12px;margin-bottom:12px}
.monde-search{position:relative;display:flex;align-items:center;max-width:560px}
.monde-search svg{position:absolute;left:15px;width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2.2;pointer-events:none}
.monde-search input{width:100%;height:48px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);color:var(--ink);font:inherit;font-size:15px;font-weight:780;padding:0 16px 0 46px;box-shadow:2px 2px 0 var(--ink)}
.monde-search input::placeholder{color:var(--muted)}
.monde-regions{display:flex;gap:8px;overflow-x:auto;padding:2px 3px 5px;scrollbar-width:thin}
.monde-regions button{flex:0 0 auto;min-height:42px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);padding:8px 15px;font:inherit;font-size:13px;font-weight:900;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.monde-regions button.active{background:var(--lime);transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.monde-status{min-height:18px;margin:0 0 8px;font-size:12px;font-weight:850;color:var(--muted)}
.monde-map{position:relative;height:clamp(460px,58vw,650px);border:2px solid var(--ink);border-radius:20px;background:var(--paper);box-shadow:var(--shadow);overflow:hidden;padding:10px;touch-action:none}
.monde-map svg{width:100%;height:100%;display:block}
.monde-map svg path{fill:var(--soft);stroke:rgba(21,19,15,.3);stroke-width:.5;transition:fill .15s ease,opacity .15s ease}
.monde-map svg .has-food,.monde-map svg .has-food path{fill:var(--lime);cursor:pointer}
.monde-map svg .needs-food,.monde-map svg .needs-food path{fill:var(--paper);cursor:pointer}
.monde-map svg .has-food:hover,.monde-map svg .has-food:hover path,.monde-map svg .needs-food:hover,.monde-map svg .needs-food:hover path{fill:var(--cobalt)}
.monde-map svg .monde-filtered-out,.monde-map svg .monde-filtered-out path{fill:var(--soft);opacity:.35;cursor:default}
.monde-pin,.monde-cluster{position:absolute;transform:translate(-50%,-50%);border:2px solid var(--ink);background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:0;cursor:pointer;transition:transform .14s ease;z-index:2}
.monde-pin{width:48px;height:48px;border-radius:999px}
.monde-pin:hover,.monde-cluster:hover{transform:translate(-50%,-50%) scale(1.08)}
.monde-pin:active,.monde-cluster:active{transform:translate(-50%,-50%) translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.monde-pin img{width:100%;height:100%;object-fit:cover;border-radius:999px;display:block}
.monde-pin.explored{outline:4px solid var(--cobalt);outline-offset:1px}
.monde-pin.explored::after{content:'✓';position:absolute;left:-7px;bottom:-7px;width:20px;height:20px;display:grid;place-items:center;border:2px solid var(--ink);border-radius:50%;background:var(--cobalt);color:#fff;font-size:11px;font-weight:950}
.mp-dot{display:block;width:100%;height:100%;border-radius:999px;background:var(--lime)}
.mp-add{display:grid;place-items:center;width:100%;height:100%;font-size:24px;font-weight:950;color:var(--cobalt)}
.monde-pin.needs-food{width:36px;height:36px;border-style:dashed;box-shadow:none}
.monde-pin em{position:absolute;top:-8px;right:-8px;font-style:normal;background:var(--lime);border:2px solid var(--ink);border-radius:999px;min-width:20px;height:20px;font-size:10px;font-weight:950;display:grid;place-items:center;padding:0 3px}
.monde-cluster{width:56px;height:56px;border-radius:18px;background:var(--cobalt);color:#fff;display:grid;place-items:center;align-content:center;line-height:1}
.monde-cluster b{font-size:19px}
.monde-cluster small{font-size:8px;text-transform:uppercase;letter-spacing:.04em;font-weight:900}
.monde-credit{color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.06em;margin:8px 0 0;font-weight:900}
.monde-list-mode .monde-credit{display:none}
.monde-ctrl{position:absolute;top:10px;left:10px;display:flex;flex-direction:column;gap:6px;z-index:3}
.monde-ctrl button{width:40px;height:40px;border:2px solid var(--ink);border-radius:11px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);font-weight:950;font-size:16px;cursor:pointer;line-height:1}
.monde-ctrl button:hover{background-size:100% 100%}
.monde-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:26px 32px;padding:8px 0}
.monde-list-region h3{display:flex;align-items:center;justify-content:space-between;margin:0;padding:0 0 9px;border-bottom:2px solid var(--ink);font-size:18px}
.monde-list-region h3 span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--muted)}
.monde-country-row{width:100%;min-height:64px;display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:12px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--ink);padding:9px 4px;text-align:left;font:inherit;cursor:pointer}
.monde-country-row:hover{background:rgba(201,255,59,.18)}
.monde-country-row:active{transform:translateY(1px)}
.monde-country-row-flag{font-size:25px;line-height:1}
.monde-country-row-copy{display:grid;gap:3px;min-width:0}
.monde-country-row-copy b{font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.monde-country-row-copy small{font-size:11px;color:var(--muted);font-weight:800}
.monde-explored{font-size:11px;font-weight:900;color:var(--cobalt);white-space:nowrap}
.monde-country-arrow{font-size:18px;font-weight:900}
.monde-empty{grid-column:1/-1;margin:18px 0;color:var(--muted);font-weight:850}
.monde-country{margin-top:28px;padding-top:18px;border-top:2px solid var(--ink);scroll-margin-top:90px}
.monde-country-open .monde-intro,.monde-country-open .monde-tools,.monde-country-open .monde-status,.monde-country-open .monde-map,.monde-country-open .monde-list,.monde-country-open .monde-credit,.monde-country-open .atlas-strip{display:none}
.monde-country-open .monde-country{margin-top:0;padding-top:0;border-top:0}
.monde-country-back{min-height:40px;border:0;background:transparent;color:var(--muted);padding:0;font:inherit;font-size:13px;font-weight:900;cursor:pointer}
.monde-country-back:hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.monde-country-head{display:flex;align-items:center;gap:14px;margin:5px 0 13px}
.monde-country-flag{font-size:46px;line-height:1}
.monde-panel-title{font-size:clamp(30px,4vw,46px);line-height:.95;letter-spacing:-.03em;margin:0}
.monde-country-meta{margin:6px 0 0;color:var(--muted);font-size:13px;font-weight:850}
.monde-type-counts{display:flex;gap:7px;overflow-x:auto;padding:2px 2px 9px}
.monde-type-counts span{flex:0 0 auto;border:1px solid var(--line);border-radius:999px;padding:6px 10px;font-size:11px;font-weight:850;color:var(--muted)}
.monde-type-counts b{color:var(--ink);font-variant-numeric:tabular-nums}
.monde-country-sections{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:22px 16px;margin-top:10px}
.monde-country-section h4{display:flex;align-items:baseline;gap:8px;margin:0 0 9px;font-size:20px}
.monde-country-section h4 span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:var(--muted)}
.monde-country-grid{grid-template-columns:1fr}
.monde-country-grid .lib-thumb{aspect-ratio:16/10}
.monde-country-empty{max-width:54ch;padding:12px 0 2px}
.monde-country-empty b{font-size:20px}
.monde-country-empty p{color:var(--muted);font-weight:780;line-height:1.5}
.monde-see-all{width:auto;margin:24px 0 2px}
@media(max-width:820px){
  .monde-intro{grid-template-columns:1fr;gap:12px}.monde-view-toggle{justify-self:start}
  .monde-progress{grid-template-columns:1fr auto}.monde-progress-track{grid-column:1/-1;grid-row:2}.monde-next{grid-column:2;grid-row:1}
  .monde-list{grid-template-columns:1fr;gap:24px}.monde-country-sections{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:640px){
  .monde-map{height:min(62svh,420px);min-height:300px;max-height:none;aspect-ratio:auto;border-radius:16px;padding:6px}
  .monde-search{max-width:none}.monde-regions{margin-inline:-2px}
  .monde-progress{grid-template-columns:1fr}.monde-progress-track{grid-column:1;grid-row:2}.monde-next{grid-column:1;grid-row:3;border-left:0;border-top:1px solid var(--line);padding:9px 0 0}
  .monde-pin{width:44px;height:44px}.monde-pin.needs-food{width:38px;height:38px}.monde-pin em{min-width:18px;height:18px;font-size:9px}.monde-cluster{width:52px;height:52px;border-radius:16px}
  .monde-country-sections{display:flex;overflow-x:auto;scroll-snap-type:x proximity;padding:2px 3px 10px}.monde-country-section{flex:0 0 min(78vw,280px);scroll-snap-align:start}.monde-country-grid{display:grid;padding:0}
  .monde-country-head{align-items:flex-start}.monde-country-flag{font-size:38px}
}
.carte-more{margin:10px 0 14px;border:1px solid var(--line);border-radius:var(--r-sm);background:rgba(255,250,240,.58)}
.carte-more summary{min-height:42px;display:flex;align-items:center;padding:0 13px;cursor:pointer;font-size:13px;font-weight:900;color:var(--muted)}
.carte-more[open] summary{color:var(--ink);border-bottom:1px solid var(--line)}
.carte-more .carte-ing{margin:0;padding:10px}
.kcal-slider{display:inline-flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:8px 14px}
.kcal-slider span{font-size:12px;font-weight:900;white-space:nowrap}
.kcal-slider b{color:var(--cobalt)}
.kcal-slider-input{width:130px;accent-color:var(--lime);margin:0;border:none;background:none;box-shadow:none;padding:0}
@media(max-width:700px){.kcal-slider{width:100%;justify-content:space-between}.kcal-slider-input{flex:1;max-width:180px}}
.day-suggest{margin:12px 0;display:grid;gap:8px}
.ds-head{display:grid;gap:3px;margin:0 0 12px}
.ds-title{display:flex;align-items:center;gap:8px}
.ds-title b{font-size:16px;font-weight:900;letter-spacing:-.02em;color:var(--ink)}
.ds-title svg{width:18px;height:18px;stroke:var(--ink);fill:none;stroke-width:2.2;flex:0 0 auto}
.ds-head small{display:flex;align-items:center;flex-wrap:wrap;gap:7px;font-size:12.5px;color:var(--muted);font-weight:800}
.ds-head .ds-why{border:2px solid var(--ink);border-radius:999px;background:var(--frichti);color:var(--ink);padding:1px 9px;font-size:11px;font-weight:900;text-transform:lowercase}
.ds-head .ds-budget{color:var(--ink);font-weight:900}
.ds-row{display:flex;justify-content:space-between;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:16px;background:rgba(255,250,240,.72);box-shadow:2px 2px 0 var(--ink);padding:10px 12px;text-decoration:none;color:var(--ink)}
.ds-row:hover{background:var(--lime)}
.ds-title{font-weight:900;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ds-meta{flex:0 0 auto;display:flex;align-items:center;gap:6px;color:var(--muted);font-size:12px;font-weight:850;white-space:nowrap}
.ds-meta em{font-style:normal;border:1px solid var(--ink);border-radius:999px;background:rgba(201,255,59,.35);color:var(--ink);padding:3px 7px;font-size:10px;text-transform:uppercase;letter-spacing:.04em}
@media(max-width:700px){.ds-row{flex-direction:column;align-items:flex-start}.ds-title{white-space:normal}}
/* Les onglets du Suivi sont un .segctl (composant canonique) depuis l'arrivee du 4e cran « Bilan »:
   en pills flex-wrap, 4 crans passaient sur deux lignes a 390px. */
.suivi-tab{font-weight:950}
.suivi-pane{margin-top:0}
.journal-datebar{position:relative;display:flex;align-items:center;justify-content:center;gap:14px;margin-bottom:18px}
.journal-datebar b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;letter-spacing:0.01em;font-size:26px;min-width:220px;text-align:center}
.day-nav{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:950;width:40px;height:40px;font-size:22px;line-height:1;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.day-nav:hover{transform:translateY(-2px)}
/* Sauter à une date : libellé cliquable (chevron discret) + sélecteur natif borné */
.day-jump{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;background:none;padding:0;cursor:pointer;color:var(--ink);font:inherit}
.journal-datebar .day-jump b{min-width:200px}
.day-jump .day-jump-chev{flex:0 0 16px;width:16px;height:16px;color:var(--muted);transition:color .15s ease}
.day-jump:hover .day-jump-chev{color:var(--ink)}
.day-jump:hover b{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.day-picker{position:absolute;left:50%;bottom:-8px;transform:translateX(-50%);width:1px;height:1px;opacity:0;pointer-events:none;border:0;padding:0;margin:0}
.day-picker.show{width:auto;height:auto;opacity:1;pointer-events:auto;border:2px solid var(--ink);border-radius:12px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);font:inherit;font-weight:850;padding:6px 10px;z-index:5}
.day-summary{display:grid;grid-template-columns:auto minmax(0,1fr);gap:18px;align-items:center;border:2px solid var(--ink);border-radius:20px;background:rgba(235,226,207,.42);padding:16px;margin-bottom:20px}
.kcal-ring{--pct:0;width:134px;height:134px;border-radius:50%;background:conic-gradient(var(--red) calc(var(--pct)*1%),var(--soft) 0);border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);display:grid;place-items:center;flex:0 0 auto}
.kcal-ring.no-target{background:var(--soft)}
.kcal-ring-in{width:104px;height:104px;box-sizing:border-box;padding:0 8px;overflow:hidden;border-radius:50%;background:var(--paper);border:2px solid var(--ink);display:grid;place-items:center;text-align:center}
.kcal-ring-in b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:28px;line-height:.85}
.kcal-ring-in small{display:block;margin-top:2px;white-space:nowrap;color:var(--muted);font-size:9px;font-weight:900;text-transform:uppercase;letter-spacing:.03em}
.macro-bars{display:grid;gap:11px;min-width:0;margin-top:12px}  /* degage l'ombre 4px du cockpit (le label Proteines passait dessous) */
.macro-bar-top{display:flex;justify-content:space-between;gap:8px;font-size:12px;font-weight:900}
.macro-bar-top span{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.macro-bar i{display:block;margin-top:5px;height:11px;border-radius:99px;border:2px solid var(--ink);background:linear-gradient(90deg,var(--fill) var(--w),var(--paper) var(--w))}
.macro-bar.p{--fill:var(--cobalt)}.macro-bar.g{--fill:var(--lime)}.macro-bar.l{--fill:var(--red)}
.summary-note{grid-column:1/-1;margin:4px 0 0;color:var(--muted);font-weight:800;font-size:12px;line-height:1.35}
/* Cockpit Suivi (PR1 refonte): roue + satellites + detail 3 anneaux, dans #daySummary */
.day-summary.cockpit-host{display:block;border:0;background:none;padding:0;box-shadow:none;margin-bottom:20px}
.cockpit{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:8px;align-items:center;border:2px solid var(--ink);border-radius:20px;background:var(--paper);box-shadow:var(--sh-card);padding:14px 10px}
.ck-side{display:flex;flex-direction:column;gap:8px;min-width:0}
.ck-center{display:flex;flex-direction:column;align-items:center;gap:8px}
/* coach compact: bandeau pleine largeur sous la grille (ne squeeze plus les colonnes) */
.ck-coach{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:5px;margin:10px 0 0;font-size:12px;font-weight:850;color:var(--muted)}
.ck-coach .ck-coach-lbl{text-transform:uppercase;letter-spacing:.04em;font-size:10px;font-weight:900}
.ck-coach b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:17px;color:var(--ink);letter-spacing:0.03em}
.ck-coach .ck-coach-u{font-size:10px;font-weight:900;text-transform:uppercase}
.ck-conf{border:2px solid var(--ink);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:900;color:var(--ink);background:var(--soft)}
.ck-conf-high{background:var(--lime)}.ck-conf-mid{background:var(--frichti)}.ck-conf-low,.ck-conf-est{background:var(--paper)}
.ck-water{text-align:center}
.ck-water .ck-wrow{display:flex;align-items:center;justify-content:center;gap:6px;margin:1px 0}
.ck-water .ck-wrow b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:19px;color:var(--cobalt);min-width:16px}
.ck-wbtn{border:2px solid var(--ink);border-radius:8px;background:var(--paper);width:22px;height:22px;line-height:1;font-size:16px;font-weight:900;cursor:pointer;padding:0;display:grid;place-items:center;color:var(--ink)}
.ck-wbtn:active{transform:translate(1px,1px)}
.ck-water>i{display:block;text-align:center}
.ck-sat{border:2px solid var(--ink);border-radius:12px;background:var(--paper);box-shadow:var(--sh-int);padding:7px 9px;text-align:left;cursor:pointer;line-height:1.1;font:inherit;transition:transform .08s;min-width:0;overflow:hidden}
.ck-sat:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.ck-sat small{display:block;font-size:9px;font-weight:900;text-transform:uppercase;letter-spacing:0;color:var(--muted);white-space:nowrap}
.ck-sat i{white-space:nowrap}
.ck-sat b{display:block;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:19px;letter-spacing:0.03em}
.ck-sat i{font-size:9.5px;font-style:normal;font-weight:800;color:var(--muted)}
.ck-sat.ck-water b{color:var(--cobalt)}
.ck-detail-toggle{width:100%;margin-top:12px;border:2px dashed var(--line);border-radius:12px;background:transparent;color:var(--muted);font:inherit;font-weight:900;font-size:12.5px;padding:9px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px}
.ck-detail-toggle svg{width:16px;height:16px;transition:transform .18s}
.ck-detail-toggle.open svg{transform:rotate(180deg)}
.ck-tri{display:flex;gap:8px;margin-top:10px;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:var(--sh-int);padding:14px 8px}
.ck-tri.hidden{display:none}
.qty-time{display:grid;gap:8px;margin-top:12px}
.qty-time label{font-size:11px;font-weight:900;text-transform:uppercase;color:var(--muted)}
.qty-time input[type=time]{border:2px solid var(--ink);border-radius:11px;background:var(--paper);font:inherit;font-weight:850;font-size:15px;padding:9px 12px;width:100%}
.qty-moments{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.qty-moment{border:2px solid var(--ink);border-radius:10px;background:var(--paper);color:var(--ink);font:inherit;font-weight:850;font-size:11px;padding:7px 2px;cursor:pointer;box-shadow:1px 1px 0 var(--ink)}
.qty-moment:active{transform:translate(1px,1px);box-shadow:none}
.ck-tri-coach{width:100%}
.ck-tri-coach.hidden{display:none}
.kick-fast{display:inline-flex;align-items:center;gap:7px;margin-top:10px;border:2px dashed var(--ink);border-radius:999px;background:transparent;color:var(--ink);font:inherit;font-weight:850;font-size:12.5px;padding:8px 14px;cursor:pointer}
.kick-fast svg{width:16px;height:16px;color:var(--cobalt)}
.kick-fast:active{transform:translate(1px,1px)}
/* Jeûne intermittent: satellite cockpit + historique 7 jours + bandeau timeline + carte config */
.ck-fast b{color:var(--cobalt)}
.ck-fast.done{background:var(--lime)}
.ck-fast.done b{color:var(--ink)}
.ck-fast-hist{display:grid;width:100%;gap:7px;margin-top:10px;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:var(--sh-int);padding:12px 14px}
.ck-fast-hist.hidden{display:none}
.fh-row{display:flex;align-items:center;gap:10px}
.fh-row small{width:34px;font-size:10px;font-weight:900;text-transform:uppercase;color:var(--muted)}
.fh-row b{width:44px;text-align:right;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:14px;letter-spacing:0.03em}
.fh-bar{flex:1;height:10px;border:2px solid var(--ink);border-radius:6px;overflow:hidden;background:var(--soft)}
.fh-bar i{display:block;height:100%;background:var(--cobalt)}
.fh-bar i.ok{background:var(--lime)}
.log-fast{display:flex;align-items:center;gap:8px;margin:0 2px 4px;border:2px dashed var(--ink);border-radius:12px;padding:8px 12px;background:var(--paper)}
.log-fast svg{width:16px;height:16px;flex:none;color:var(--cobalt)}
.log-fast small{font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.log-fast b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:16px;letter-spacing:0.03em}
.log-fast span{margin-left:auto;font-size:12px;font-weight:800;color:var(--muted)}
.fasting-card{margin-top:12px}
.fast-enable{border:2px solid var(--ink);border-radius:11px;background:var(--paper);color:var(--ink);font:inherit;font-weight:850;font-size:12.5px;padding:9px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);flex:none}
.fast-enable.on{background:var(--lime)}
.fast-enable:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.fast-targets{display:flex;gap:8px;padding:0 14px 14px;flex-wrap:wrap}
.fast-targets.hidden{display:none}
.fast-chip{flex:1;min-width:52px;border:2px solid var(--ink);border-radius:11px;background:var(--paper);color:var(--ink);font:inherit;font-weight:850;font-size:12.5px;padding:9px 4px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.fast-chip.on{background:var(--lime)}
.fast-chip:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.ck3-item{flex:1;text-align:center;min-width:0}
.ck3-ring{width:84px;height:84px;margin:0 auto 6px;border-radius:50%;border:2px solid var(--ink);display:grid;place-items:center}
.ck3-in{width:58px;height:58px;border-radius:50%;background:var(--paper);border:2px solid var(--ink);display:grid;place-items:center;text-align:center;line-height:.95}
.ck3-in b{display:block;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:17px}
.ck3-in small{font-size:8px;font-weight:900;text-transform:uppercase;color:var(--muted)}
.ck3-item label{font-size:10.5px;font-weight:900;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.ck3-sub{display:block;font-style:normal;font-size:9.5px;font-weight:800;color:var(--love);margin-top:1px}
#view-suivi .cockpit .ck-sat b{font-size:19px}
#view-suivi .cockpit .ck3-in b{font-size:17px}
@media(max-width:400px){.cockpit{gap:6px;padding:12px 6px}.ck-sat{padding:6px 7px}.cockpit .kcal-ring{width:112px;height:112px}.cockpit .kcal-ring-in{width:86px;height:86px}}
.add-modes{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.add-mode{border:2px solid var(--ink);border-radius:14px;background:var(--paper);color:var(--ink);font-weight:900;padding:8px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.add-mode.active{background:var(--lime);color:var(--ink)}
/* Ruban de méthodes du Suivi (search-first, icône + libellé, scroll horizontal) facon MacroFactor. */
.add-modes.add-ribbon{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;gap:8px;margin-bottom:12px;padding-bottom:2px;scrollbar-width:none}
.add-modes.add-ribbon::-webkit-scrollbar{display:none}
.add-ribbon .add-mode{flex:0 0 auto;display:inline-flex;flex-direction:column;align-items:center;gap:4px;min-width:62px;font-size:11px;padding:9px 12px}
.add-ribbon .add-mode svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.add-pane{border:2px solid var(--ink);border-radius:18px;background:rgba(255,250,240,.7);padding:16px;box-shadow:3px 3px 0 var(--ink)}
.product-capture{display:grid;gap:14px}
.pc-head{display:grid;gap:3px}
.pc-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:950;letter-spacing:.08em;text-transform:uppercase;color:var(--cobalt)}
.pc-head strong{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:26px;font-weight:400;line-height:.9;letter-spacing:.01em;text-transform:uppercase}
.pc-head p{margin:4px 0 0;color:var(--muted);font-size:13px;font-weight:750;line-height:1.35}
.pc-shots{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}
.pc-shot{position:relative;min-height:132px;align-content:end;gap:2px;overflow:hidden;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:12px;cursor:pointer;isolation:isolate}
.pc-shot:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.pc-shot:focus-within,.pc-shot:focus-visible{outline:3px solid var(--lime);outline-offset:2px}
.pc-shot img{position:absolute;inset:0;z-index:-1;width:100%;height:100%;object-fit:cover;opacity:.26}
.pc-shot.ready{background:var(--lime-soft)}
.pc-shot.ready .pc-shot-mark{background:var(--lime)}
.pc-shot b{font-size:13px;line-height:1.1}
.pc-shot small{color:var(--muted);font-size:10.5px;font-weight:750;line-height:1.25}
.pc-shot-mark{display:grid;place-items:center;width:29px;height:29px;margin-bottom:auto;border:2px solid var(--ink);border-radius:999px;background:var(--paper);box-shadow:1px 1px 0 var(--ink);font-size:20px;font-weight:900;line-height:1}
.product-capture>.primary,.pc-review>.primary{margin-top:0}
.pc-review{display:grid;gap:14px;padding-top:14px;border-top:2px dashed var(--line)}
.pc-review-head{display:grid;gap:2px}
.pc-review-head b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:21px;font-weight:400;letter-spacing:.01em;text-transform:uppercase}
.pc-review-head small{color:var(--muted);font-size:11px;font-weight:750;line-height:1.3}
.pc-fields{display:grid;gap:10px}
.pc-fields.identity{grid-template-columns:repeat(2,minmax(0,1fr))}
.pc-fields.nutrition{grid-template-columns:repeat(4,minmax(0,1fr))}
.pc-fields.extra{grid-template-columns:minmax(120px,.55fr) minmax(0,1.45fr);margin-top:10px}
.pc-fields label,.pc-log-row label{gap:5px;font-size:11px;text-transform:uppercase;letter-spacing:.05em}
.pc-fields input,.pc-fields textarea,.pc-log-row input,.pc-log-row select,.pc-basis-row select{border-radius:11px;padding:9px 10px;font-weight:800}
.pc-basis-row{display:flex;align-items:center;justify-content:space-between;gap:10px}
.pc-basis-row b{font-size:12px}
.pc-basis-row select{width:auto;min-width:130px}
.pc-more{border:1px dashed var(--line);border-radius:12px;padding:9px 10px}
.pc-more summary{cursor:pointer;color:var(--cobalt);font-size:12px;font-weight:900}
.pc-ingredients-field{grid-column:auto}
.pc-log-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pc-off-share{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:start;border:1px dashed var(--line);border-radius:12px;padding:10px;cursor:pointer}
.pc-off-share input{width:20px;height:20px;margin:1px 0 0;accent-color:var(--lime)}
.pc-off-share span{display:grid;gap:2px}
.pc-off-share b{font-size:12px}
.pc-off-share small{color:var(--muted);font-size:10.5px;font-weight:750;line-height:1.3}
.pc-off-share.disabled{opacity:.55}
.pc-invalid{box-shadow:0 0 0 3px var(--red-soft)}
.product-missing-actions{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:8px}
.product-missing-actions button{margin:0;min-height:42px}
.product-missing-actions .off-estimate{border:2px dashed var(--line);border-radius:999px;background:transparent;color:var(--muted);font:inherit;font-size:12.5px;font-weight:850;padding:9px 12px;cursor:pointer}
@media(max-width:520px){.pc-shots{grid-template-columns:repeat(2,minmax(0,1fr))}.pc-shot.optional{grid-column:1/-1;min-height:90px}.pc-fields.identity,.pc-fields.extra{grid-template-columns:1fr}.pc-fields.nutrition{grid-template-columns:repeat(2,minmax(0,1fr))}.product-missing-actions{grid-template-columns:1fr}.product-missing-actions .off-estimate{min-height:40px}}
.alcohol-calc{margin-top:10px}
.alcohol-open{width:100%;border:2px dashed var(--line);border-radius:999px;background:transparent;color:var(--muted);font:inherit;font-size:12.5px;font-weight:850;padding:9px 12px;min-height:42px;cursor:pointer}
.alcohol-fields{display:grid;gap:8px;margin-top:10px}
.alcohol-hint{margin:0;color:var(--muted);font-size:12.5px;font-weight:700;line-height:1.4}
.alcohol-fields label{display:grid;gap:4px;font-size:12.5px;font-weight:850;color:var(--muted)}
.alcohol-fields input{margin:0}
.alcohol-msg:empty{display:none}
.describe-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.describe-mic{display:inline-flex;align-items:center;gap:8px}
.describe-mic svg{width:20px;height:20px;flex:0 0 auto;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.describe-mic-label:empty{display:none}
.describe-mic.recording{background:#e4483a;color:#fff;border-color:var(--ink)}
.describe-mic.recording svg{stroke:#fff}
.describe-mic.recording::before{content:"";width:9px;height:9px;border-radius:50%;background:#fff;flex:0 0 auto;animation:describeMicPulse 1s ease-in-out infinite}
@keyframes describeMicPulse{0%,100%{opacity:1}50%{opacity:.25}}
@media(prefers-reduced-motion:reduce){.describe-mic.recording::before{animation:none}}
/* --- Logger unifié (Suivi): barre recherche + icônes, segments, listes, secondaire --- */
.lg-search{display:flex;align-items:center;gap:8px;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:0 8px 0 12px;margin-bottom:12px}
.lg-search .lg-sic{width:19px;height:19px;flex:0 0 auto;stroke:var(--muted);fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.lg-search input{flex:1;min-width:0;border:0;background:transparent;font-size:15px;font-weight:650;padding:13px 2px;outline:none;color:var(--ink);border-radius:0}
.lg-search input:focus{box-shadow:none}
.lg-ic{flex:0 0 auto;width:38px;height:38px;border:2px solid var(--ink);border-radius:11px;background:var(--lime);display:grid;place-items:center;cursor:pointer;padding:0;box-shadow:2px 2px 0 var(--ink)}
.lg-ic svg{width:19px;height:19px;stroke:var(--ink);fill:none;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
.lg-ic.ghost{background:var(--paper)}
.lg-ic:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.lg-segs{display:flex;gap:6px;margin:0 0 4px}
.lg-seg{flex:1;border:2px solid var(--ink);border-radius:11px;background:var(--paper);color:var(--ink);font-weight:850;font-size:12.5px;padding:9px 4px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.lg-more{width:100%;border:2px dashed var(--ink);border-radius:11px;background:transparent;color:var(--muted);font:inherit;font-weight:850;font-size:12.5px;padding:8px 4px;cursor:pointer}
.lg-more:active{transform:translate(1px,1px)}
.off-actions{display:flex;gap:8px;align-items:stretch;margin-left:auto}
.off-plate{border:2px solid var(--ink);border-radius:11px;background:var(--paper);cursor:pointer;box-shadow:2px 2px 0 var(--ink);padding:0 10px;display:grid;place-items:center}
.off-plate svg{width:18px;height:18px;color:var(--ink)}
.off-plate:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.ck-steps-edit{display:flex;align-items:center;gap:5px;margin:2px 0}
.ck-steps-edit input{width:74px;border:2px solid var(--ink);border-radius:8px;background:var(--paper);font:inherit;font-weight:850;font-size:14px;padding:4px 6px;min-width:0}
.ck-steps-edit .ck-ok{border:2px solid var(--ink);border-radius:8px;background:var(--lime);font:inherit;font-weight:900;font-size:11px;padding:5px 8px;cursor:pointer;box-shadow:1px 1px 0 var(--ink)}
.da-close{border:2px solid var(--ink);border-radius:999px;background:var(--paper);width:30px;height:30px;font-size:16px;font-weight:900;line-height:1;cursor:pointer;box-shadow:2px 2px 0 var(--ink);flex:none}
.lg-seg.on{background:var(--lime)}
.lg-seg:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.lg-list{display:grid;gap:8px;margin-top:12px}
.lg-list.hidden{display:none}
.lg-row{display:flex;align-items:stretch;gap:8px}
.lg-relog{flex:1;min-width:0;display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:11px;align-items:center;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:9px 11px;cursor:pointer;text-align:left;font:inherit;color:var(--ink)}
.lg-relog:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.lg-name{min-width:0}
.lg-name b{display:block;font-size:14.5px;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lg-name span{display:block;font-size:11.5px;color:var(--muted);font-weight:700;margin-top:1px}
.lg-kcal{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:20px;line-height:.9;text-align:right}
.lg-kcal small{display:block;font-family:ui-sans-serif,-apple-system,sans-serif;font-size:8px;color:var(--muted);font-weight:900;text-transform:uppercase}
.lg-add{width:30px;height:30px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-size:20px;font-weight:800;line-height:1;display:grid;place-items:center}
.lg-fav{flex:0 0 auto;width:42px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);display:grid;place-items:center;cursor:pointer;padding:0;color:var(--love)}
.lg-fav svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2}
.lg-fav.on svg{fill:var(--love)}
.lg-fav:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.lg-fav:disabled{opacity:.55;cursor:progress}
.lg-empty{color:var(--muted);font-weight:800;text-align:center;padding:16px 0;margin:0}
.lg-alt{display:flex;gap:8px;margin-top:13px}
.lg-alt button{flex:1;border:2px dashed var(--line);border-radius:12px;background:transparent;color:var(--muted);font-weight:800;font-size:12.5px;padding:10px 6px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px}
.lg-alt svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
.journal-add.lg-searching .lg-segs,.journal-add.lg-searching #frequentStrip,.journal-add.lg-searching #addRecette,.journal-add.lg-searching .lg-alt,.journal-add.lg-searching #yesterdayRow{display:none}
/* Rangée « Hier » : un chip par moment d'hier (recopie le repas vers le jour affiché) */
.lg-yesterday{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px}
.lg-yesterday.hidden{display:none}
.lg-yesterday .lgy-lbl{font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.lg-yesterday .lgy-chip{display:inline-flex;align-items:center;gap:5px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);color:var(--ink);font:inherit;font-weight:850;font-size:12px;padding:5px 11px;cursor:pointer}
.lg-yesterday .lgy-chip b{font-weight:900}
.lg-yesterday .lgy-chip small{color:var(--muted);font-weight:800}
.lg-yesterday .lgy-chip:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.lg-yesterday .lgy-chip:disabled{opacity:.55;cursor:progress}
/* « + » contextuel de la tabbar (mobile uniquement, montré par showView sur la vue Suivi).
   Il ouvre la bottom-sheet logger; sheet ouverte = croix (rotation). */
.gooey{display:none}
.gooey .fab-hit{position:absolute;right:0;bottom:0;width:64px;height:64px;display:grid;place-items:center;cursor:pointer;z-index:4;background:var(--lime);border:2.5px solid var(--ink);border-radius:50%;box-shadow:2px 2px 0 var(--ink);padding:0}
.gooey .fab-hit:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.gooey .fab-hit svg{width:30px;height:30px;stroke:var(--ink);fill:none;stroke-width:3;stroke-linecap:round;transition:transform .4s cubic-bezier(.86,0,.07,1)}
.gooey.open .fab-hit svg{transform:rotate(135deg)}
/* Bottom-sheet logger: tout le logging vit ici; la page garde cockpit + journal. */
.sheet-back{position:fixed;inset:0;background:rgba(20,18,12,.38);z-index:69}
.sheet-back.hidden{display:none}
.logger-sheet{position:fixed;left:0;right:0;bottom:0;z-index:70;margin:0 auto;max-width:680px;min-height:min(560px,84dvh);max-height:84dvh;overflow-y:auto;overscroll-behavior:contain;background:var(--paper);border:2px solid var(--ink);border-bottom:0;border-radius:22px 22px 0 0;box-shadow:0 -3px 0 var(--ink);padding:8px 14px calc(14px + env(safe-area-inset-bottom));transform:translateY(105%);transition:transform .32s cubic-bezier(.32,.72,.28,1)}
.logger-sheet.open{transform:translateY(0)}
.ls-grip{width:44px;height:5px;border-radius:3px;background:var(--ink);opacity:.25;margin:4px auto 10px}
.ls-capture{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:12px}
.ls-capture button{display:grid;justify-items:center;gap:4px;border:2px solid var(--ink);border-radius:12px;background:var(--paper);color:var(--ink);font:inherit;font-weight:850;font-size:11px;padding:9px 4px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.ls-capture button:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.ls-capture svg{width:22px;height:22px;stroke:var(--ink);fill:none;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
/* déclencheur desktop (le « + » flottant est mobile-only) */
.open-logger{display:block;width:100%;margin:0 0 14px;border:2px solid var(--ink);border-radius:14px;background:var(--lime);color:var(--ink);font:inherit;font-weight:900;font-size:14px;padding:12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.open-logger:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
@media(max-width:960px){.open-logger{display:none}}
.add-grid{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;gap:12px}
.add-grid.three{grid-template-columns:repeat(3,1fr)}
.add-macros{margin:14px 0}
.add-macros summary{cursor:pointer;font-weight:900;color:var(--cobalt);font-size:13px}
.off-results{display:grid;gap:8px;margin-top:12px}
.off-result{border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);overflow:hidden}
.off-pick{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:12px 14px;cursor:pointer}
.off-pick:hover{background:rgba(201,255,59,.16)}
.off-pick span{display:grid;gap:2px;min-width:0}
.off-pick b{letter-spacing:-.02em}
.off-pick small{color:var(--muted);font-weight:800;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.off-add{display:grid;grid-template-columns:1fr 1fr auto;gap:10px;padding:12px 14px;border-top:2px dashed var(--line);align-items:center}
.off-add .primary,.off-add select,.off-add input{margin:0;width:auto}
.off-confirm{width:auto!important;margin:0!important}
.rec-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px}
.rec-head span{display:grid;gap:2px;min-width:0}
.rec-head b{letter-spacing:-.02em}
.rec-head small{color:var(--muted);font-weight:800;font-size:12px;white-space:nowrap}
.rec-add{display:grid;grid-template-columns:1fr auto;gap:10px;padding:12px 14px;border-top:2px dashed var(--line);align-items:center}
.rec-add .primary,.rec-add input{margin:0;width:auto}
.rec-confirm{width:auto!important;margin:0!important}
.nutri{font-style:normal;width:26px;height:26px;border-radius:8px;display:grid;place-items:center;border:2px solid var(--ink);font-weight:950;color:#fff;font-size:13px;flex:0 0 auto;box-shadow:2px 2px 0 var(--ink)}
.nutri-a{background:#038141}.nutri-b{background:#85bb2f;color:var(--ink)}.nutri-c{background:#fecb02;color:var(--ink)}.nutri-d{background:#ee8100}.nutri-e{background:#e63e11}
.scan-stage{position:relative;margin-top:14px;border:2px solid var(--ink);border-radius:18px;overflow:hidden;background:var(--ink);box-shadow:3px 3px 0 var(--ink);max-width:420px}
.scan-stage video{display:block;width:100%;height:auto;max-height:60vh;object-fit:cover}
.scan-close{position:absolute;top:10px;right:10px;width:38px;height:38px;font-size:22px}
.day-list{display:grid;gap:8px;margin-top:22px}
.log-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;gap:12px;align-items:center;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:12px 14px}
.log-moment{display:flex;align-items:center;gap:8px;margin:6px 2px 0}
.log-moment:first-child{margin-top:0}
.log-moment small{font-family:ui-sans-serif,-apple-system,sans-serif;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.log-moment::after{content:"";flex:1;height:2px;background:var(--line,rgba(0,0,0,.08));border-radius:2px}
.log-time{display:inline-block;margin-right:6px;padding:1px 5px;border-radius:6px;background:var(--wash,rgba(0,0,0,.05));color:var(--muted);font-variant-numeric:tabular-nums}
.log-main{min-width:0}
.qty-edit{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:6px 0 4px}
.qty-edit input{flex:1;min-width:90px;border:2px solid var(--ink);border-radius:12px;padding:10px 12px;font-size:16px;font-weight:800;font-family:inherit}
.qty-units{display:flex;gap:6px}
.qty-unit{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-weight:900;font-size:13px;padding:8px 12px;cursor:pointer;font-family:inherit}
.qty-unit.on{background:var(--lime)}
.log-edit{cursor:pointer;border-radius:8px}
.log-edit:hover span,.log-edit:focus-visible span{text-decoration:underline;text-underline-offset:2px}
.log-edit:focus-visible{outline:2px solid var(--cobalt);outline-offset:2px}
.log-main b{display:block;letter-spacing:-.02em}
.log-main span{display:block;margin-top:3px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:750}
.log-kcal{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:24px;line-height:.9;text-align:right}
.log-kcal small{display:block;font-family:ui-sans-serif,-apple-system,sans-serif;font-size:9px;color:var(--muted);font-weight:900;text-transform:uppercase;letter-spacing:.05em}
.log-del{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:950;font-size:18px;line-height:1;width:32px;height:32px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);padding:0}
.log-del:hover{background:var(--red);color:#fff}
.log-del:disabled{cursor:progress;opacity:.55}
.log-fav{border:none;background:none;cursor:pointer;width:30px;height:30px;padding:4px;display:grid;place-items:center;color:var(--ink)}
.log-fav svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:2}
.log-fav:hover svg{stroke:var(--love)}
.log-fav.on svg{fill:var(--love);stroke:var(--love)}
.log-fav:disabled{cursor:progress;opacity:.55}
/* Panier de saisie (staging) : barre collante en bas de la zone d'ajout */
.platebar{position:sticky;bottom:10px;z-index:20;display:flex;align-items:center;gap:10px;margin:12px 0;border:2px solid var(--ink);border-radius:18px;background:var(--ink);color:var(--paper);box-shadow:4px 4px 0 rgba(0,0,0,.25);padding:11px 11px 11px 15px}
.platebar .pb-body{flex:1;min-width:0}
.platebar .pb-body b{display:block;font-size:14px}
.platebar .pb-body span{display:block;font-size:11.5px;color:#c7bfae;font-weight:700;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.platebar .pb-clear{flex:0 0 auto;width:30px;height:30px;border:2px solid var(--paper);border-radius:999px;background:transparent;color:var(--paper);font-weight:800;font-size:16px;line-height:1;cursor:pointer;padding:0}
.platebar .pb-go{flex:0 0 auto;border:2px solid var(--lime);border-radius:12px;background:var(--lime);color:var(--ink);font-weight:900;font-size:13.5px;padding:10px 14px;cursor:pointer;white-space:nowrap}
.platebar .pb-go:disabled{opacity:.6;cursor:progress}
.secondary.track{background:var(--paper);color:var(--ink)}
@media(max-width:960px){.day-summary{grid-template-columns:1fr;justify-items:center;text-align:center}.macro-bars{width:100%}.macro-bar-top{text-align:left}.add-grid,.add-grid.three{grid-template-columns:1fr}.off-add{grid-template-columns:1fr 1fr;grid-auto-rows:auto}.off-confirm{grid-column:1/-1}}

/* Suivi : poids + objectif (tracker M1) */
.weight-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:end;margin-bottom:18px}
.weight-form .primary{margin:0;width:auto}
.weight-form .status{grid-column:1/-1;margin:0}
.weight-trend{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:16px}
.wt-now{display:grid;gap:2px}
.wt-now small{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em;font-weight:900;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.wt-now b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:30px;line-height:.85}
.wt-delta{border:2px solid var(--ink);border-radius:999px;background:var(--lime);padding:7px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:950;font-size:13px;box-shadow:2px 2px 0 var(--ink)}
.weight-chart{border:2px solid var(--ink);border-radius:20px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:16px;min-height:120px}
.weight-chart .status{margin:0}
.wc-svg{width:100%;height:auto;display:block;overflow:visible}
.wc-dot{fill:var(--ink)}
.wc-trend{fill:none;stroke:var(--red);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.goal-form{margin-bottom:14px}
.goal-card-body{padding:0 14px 16px}
.frigo-surprise{margin:0 0 14px}
.frigo-surprise-body{padding:0 14px 14px}
.surprise-new{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:9px 12px;margin:2px 0}
.surprise-new svg{width:18px;height:18px;flex:none}
/* Bascules « Ajouter au remplissage » en chips. .opt-chip = meme look que .fast-chip mais SANS son
   binding global (initSuivi lie saveFasting a tout .fast-chip). « Extras de la semaine » en dessous. */
.opt-chip{border:2px solid var(--ink);border-radius:11px;background:var(--paper);color:var(--ink);font:inherit;font-weight:850;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.opt-chip.on{background:var(--lime)}
.opt-chip:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.chip-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:2px 0 4px}
.chip-grid .opt-chip{display:flex;align-items:center;gap:9px;justify-content:flex-start;text-align:left;padding:11px 12px;min-width:0}
.chip-grid .opt-chip svg{width:20px;height:20px;flex:none;stroke:currentColor;fill:none;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
.chip-grid .opt-chip b{font-weight:900;font-size:12.5px;line-height:1.1;min-width:0;overflow-wrap:anywhere}
.plan-extras{margin:14px 0 4px;border:2px solid var(--ink);border-radius:var(--r-md);background:var(--paper);box-shadow:var(--sh-card);overflow:hidden}
.plan-extras-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;padding:12px 14px 8px}
.plan-extras-head b{font-size:14px;font-weight:900;letter-spacing:-.01em}
.plan-extras-head small{color:var(--muted);font-weight:800;font-size:11px}
.plan-extras-list{display:flex;flex-direction:column}
.courses-share{--share-kicker:"Liste de courses"}
.frigo-share{--share-kicker:"Frigo partagé"}
.frigo-claim{display:grid;justify-items:center;gap:8px;margin:22px 0 4px;text-align:center}.frigo-claim .share-cta{order:0}.frigo-claim small{color:var(--muted);font-weight:850;max-width:46ch;line-height:1.35}
.week-courses-head{margin:30px 0 12px;font-size:clamp(26px,4vw,34px);line-height:.95}
.week-courses-head small{display:block;margin-top:5px}
.plan-qty-toggle{margin:0 0 16px}
.plan-portions{border:2px solid var(--ink);border-radius:16px;background:rgba(255,250,240,.55);box-shadow:2px 2px 0 var(--ink);margin-bottom:16px;padding:2px 14px}
.plan-portions summary{cursor:pointer;font-weight:950;padding:11px 0}
.plan-portions .pp-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;border-top:1px dashed var(--line)}
.plan-portions .pp-global{border-top:0;padding-top:0}
.plan-portions .pp-list .pp-row:first-child{border-top:2px solid var(--ink)}
.plan-portions .pp-name{font-weight:850;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.plan-portions .pf-step{flex:none}
.pex-item{display:flex;align-items:center;gap:11px;padding:9px 14px;border-top:1px solid var(--line)}
.pex-check{flex:none;display:grid;place-items:center}
.pex-check input{width:20px;height:20px;accent-color:var(--lime);cursor:pointer}
.pex-recipe{display:flex;align-items:center;gap:10px;min-width:0;text-decoration:none;color:var(--ink)}
.pex-thumb{flex:none;width:38px;height:38px;border:2px solid var(--ink);border-radius:10px;overflow:hidden;display:grid;place-items:center;background:var(--soft)}
.pex-thumb img{width:100%;height:100%;object-fit:cover}
.pex-recipe b{font-size:13px;font-weight:850;overflow-wrap:anywhere}
.pex-tag{display:inline-block;margin-left:7px;font-style:normal;font-size:9.5px;font-weight:950;text-transform:uppercase;letter-spacing:.05em;border:2px solid var(--ink);border-radius:999px;background:var(--lime);padding:2px 6px;vertical-align:middle}
.goal-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.goal-form .primary{margin-top:16px}
.goal-form .status{margin-top:10px}
.goal-warn{color:var(--red)}
/* Depliant « Comment ta cible est calculee » : waterfall 2 barres alignees, tokens data-viz. */
.calc-explain{margin:12px 0}
.calc-explain .ce-head{display:flex;align-items:center;gap:12px;width:100%;border:0;background:none;padding:12px 14px;cursor:pointer;text-align:left;color:var(--ink);font:inherit}
.calc-explain .ce-chev{flex:0 0 20px;width:20px;height:20px;color:var(--muted);transition:transform .18s ease}
.calc-explain.closed .ce-chev{transform:rotate(-90deg)}
.calc-explain.closed .ce-body{display:none}
.ce-body{padding:2px 14px 16px}
.ce-row{margin-top:14px}
.ce-lbl{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:7px}
.ce-lbl small{font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.ce-lbl b{font-size:22px;font-weight:900;letter-spacing:-.02em}
.ce-lbl b i{font-size:12px;font-weight:800;color:var(--muted);font-style:normal;margin-left:3px}
.ce-bar{display:flex;height:34px;border:2px solid var(--ink);border-radius:var(--r-sm);overflow:hidden;box-shadow:var(--sh-int);background:var(--paper)}
.ce-seg{display:flex;align-items:center;justify-content:center;font-weight:900;font-size:12.5px;color:var(--ink);border-right:2px solid var(--ink);min-width:0;overflow:hidden;white-space:nowrap}
.ce-seg:last-child{border-right:0}
.ce-seg.s-intake{background:var(--dv-c)}
.ce-seg.s-trend{background:var(--dv-a);color:#fff}
.ce-seg.s-target{background:var(--dv-b);color:var(--paper)}
.ce-seg.s-deficit{background:repeating-linear-gradient(135deg,var(--red-soft) 0 7px,transparent 7px 12px);color:var(--red)}
.ce-seg.s-surplus{background:repeating-linear-gradient(135deg,var(--cobalt-soft) 0 7px,transparent 7px 12px);color:var(--cobalt)}
.ce-key{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:8px}
.ce-key span{display:inline-flex;align-items:center;font-size:11.5px;font-weight:800;color:var(--muted)}
.ce-key i{width:11px;height:11px;border:1.5px solid var(--ink);border-radius:3px;margin-right:5px;flex:none}
.ce-key .k-intake{background:var(--dv-c)}
.ce-key .k-trend{background:var(--dv-a)}
.ce-key .k-target{background:var(--dv-b)}
.ce-key .k-deficit{background:repeating-linear-gradient(135deg,var(--red-soft) 0 5px,transparent 5px 9px)}
.ce-key .k-surplus{background:repeating-linear-gradient(135deg,var(--cobalt-soft) 0 5px,transparent 5px 9px)}
.ce-flag{margin:12px 0 0;font-size:12.5px;font-weight:800;line-height:1.4;color:var(--ink);background:var(--cobalt-soft);border:2px solid var(--ink);border-radius:var(--r-sm);padding:9px 11px}
.ce-note{margin:12px 0 0;font-size:12px;font-weight:750;line-height:1.4;color:var(--muted);border-top:1px dashed var(--line);padding-top:11px}
.ce-meta{margin:9px 0 0;font-size:12px;font-weight:850;line-height:1.6;color:var(--ink)}
.ce-meta .apropos-btn{vertical-align:middle;margin-left:5px}
/* Progression poids (onglet Objectif) : carte info (filet, sans ombre) + barre depart->cible. */
.goal-projection:empty{display:none}
.gp-card{border:2px solid var(--ink);border-radius:var(--r-md);background:var(--paper);padding:14px 15px;margin:12px 0}
.gp-top{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:10px}
.gp-goal{font-size:15px;font-weight:900;letter-spacing:-.01em;display:flex;align-items:center;gap:8px}
.gp-goal svg{width:18px;height:18px;flex:none;stroke:var(--ink);fill:none;stroke-width:2.2}
.gp-remain{font-size:13px;font-weight:900;color:var(--cobalt);white-space:nowrap}
.gp-track{position:relative;height:16px;border:2px solid var(--ink);border-radius:var(--r-pill);background:var(--soft);overflow:hidden}
.gp-fill{height:100%;background:var(--dv-a);border-right:2px solid var(--ink)}
.gp-ends{display:flex;justify-content:space-between;margin-top:6px;font-size:11.5px;font-weight:800;color:var(--muted)}
.gp-ends b{color:var(--ink)}
.gp-eta{display:inline-flex;align-items:center;gap:7px;margin-top:11px;font-size:12px;font-weight:850;background:var(--cobalt-soft);border:1.5px solid var(--ink);border-radius:var(--r-pill);padding:5px 11px}
.gp-eta svg{width:14px;height:14px;flex:none;stroke:var(--ink);fill:none;stroke-width:2.2}
.gp-done{display:flex;align-items:center;gap:9px;font-size:14px;font-weight:900;line-height:1.3}
.gp-done .ok{width:26px;height:26px;flex:none;display:grid;place-items:center;background:var(--lime);border:2px solid var(--ink);border-radius:50%}
.gp-done .ok svg{width:15px;height:15px;stroke:var(--ink);fill:none;stroke-width:3}
/* Recalibrage: action distincte du form, jamais un 2e CTA pleine largeur (cf design system). */
.recal-card{margin-bottom:14px}
.recal-card .btn-ghost{flex:none;align-self:center}
.recal-card .btn-ghost:disabled{opacity:.45;cursor:not-allowed;box-shadow:none;transform:none}
.goal-menstruation{grid-column:1/-1;display:flex;flex-direction:column;gap:8px}
.goal-menstruation.hidden{display:none}
.goal-menstruation .gm-q{font-weight:900;font-size:13px}
.goal-menstruation .gm-pills{display:flex;gap:8px;flex-wrap:wrap}
.goal-menstruation .gm-pills .fast-chip{flex:1 1 auto}
.goal-menstruation .gm-wide{flex:1 1 100%}
.goal-menstruation .gm-hint{margin:0}
.gm-flash{animation:gmflash 1.4s ease}
@keyframes gmflash{0%,100%{box-shadow:none}30%{box-shadow:0 0 0 3px var(--lime)}}
.micro-iron-choose,.micro-b12-hint{color:var(--ink);font-weight:800;text-decoration:underline;text-underline-offset:2px;cursor:pointer;background:none;border:0;font:inherit;padding:0}
.goal-targets{display:grid;gap:12px}
.goal-kcal{border:2px solid var(--ink);border-radius:20px;background:rgba(0,87,255,.09);box-shadow:2px 2px 0 var(--ink);padding:14px;display:grid;gap:4px}
.goal-kcal small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;color:var(--cobalt);font-weight:950;letter-spacing:.06em;font-size:11px}
.goal-kcal strong{font-size:30px;letter-spacing:-.04em;line-height:.9}
.goal-chips{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.goal-chip{border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:12px;display:grid;gap:4px;text-align:center}
.goal-chip small{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.05em;font-weight:900}
.goal-chip b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:26px;line-height:.85}
.goal-chip em{font-style:normal;font-size:13px;color:var(--muted);margin-left:2px;font-family:ui-sans-serif,-apple-system,sans-serif}
.goal-note{margin:16px 0 0;color:var(--muted);font-weight:800;font-size:12px;line-height:1.4}
@media(max-width:960px){.weight-form{grid-template-columns:1fr}.weight-form .primary{width:100%}.goal-grid{grid-template-columns:1fr}.goal-chips{grid-template-columns:1fr}}
.nutrition-cats{margin-top:8px}
.nutrition-cats .cat-table{width:100%;border-collapse:collapse;font-size:12px;margin-top:8px}
.nutrition-cats th,.nutrition-cats td{text-align:left;padding:4px 6px;border-bottom:1px solid var(--line)}
.nutrition-cats th{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:900;font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.nutrition-cats td:nth-child(4),.nutrition-cats th:nth-child(3),.nutrition-cats th:nth-child(4){text-align:right;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.nutrition-cats td:nth-child(2){font-weight:800}
.nutrition-cats tr.conf-low td:nth-child(2){color:var(--red)}
.nutrition-cats tr.conf-low td:nth-child(2)::after{content:" ⚠"}


/* --- Progression / gamification --- */
.progress-box{display:grid;gap:16px}
.streak-hero{display:flex;align-items:center;gap:16px;border:2px solid var(--ink);border-radius:20px;background:rgba(255,59,48,.1);box-shadow:3px 3px 0 var(--ink);padding:18px}
.streak-hero .flame-ideo{flex:0 0 52px;width:52px;height:52px;display:grid;place-items:center;background:var(--lime);border:2px solid var(--ink);border-radius:14px;box-shadow:2px 2px 0 var(--ink);font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:32px;line-height:1}
.streak-hero b{display:block;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;letter-spacing:0.01em;font-size:30px;line-height:.95}
.streak-hero small{display:block;margin-top:4px;color:var(--muted);font-weight:900;text-transform:uppercase;letter-spacing:.06em;font-size:12px}
.streak-hero.streak-zero{background:rgba(201,255,59,.18)}
.badge-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:12px}
.badge-card{display:grid;gap:6px;justify-items:center;text-align:center;border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:14px 10px}
.badge-card .badge-emoji{font-size:34px;line-height:1}
.badge-card b{font-size:13px;letter-spacing:-.02em}
.badge-card small{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900}
.badge-ic img{width:66px;height:66px;object-fit:contain;display:block}
.badge-card.locked{opacity:.5;filter:grayscale(1)}
.badge-card.earned{background:var(--lime-soft)}
/* Reste de la reserve admin (is-admin pose au boot, 09-panels). « Fini / utilise » et « J'ai jete »
   en sont sortis: leurs waste_events alimentent le compteur d'euros du profil et le bilan de
   L'addition, qui afficheraient zero a vie pour tout le monde tant que personne ne peut ecrire. */
body:not(.is-admin) #frigoReceiptBtn,
body:not(.is-admin) #leftoverToPantryBtn,
body:not(.is-admin) #shoppingToFridge,
body:not(.is-admin) .sp-tofridge{display:none!important}
.badge-card.earned{background:rgba(201,255,59,.22)}
.badge-card.locked{opacity:.42;filter:grayscale(1);box-shadow:none}

/* --- Classification badges (régime / difficulté / tags / allergènes) --- */
.tag-pill{font-style:normal;display:inline-flex;align-items:center;border:2px solid var(--ink);border-radius:999px;background:var(--soft);color:var(--ink);padding:5px 10px;font-size:12px;font-weight:900;letter-spacing:-.01em;line-height:1.15}
.tag-pill.diff{background:var(--paper)}
.tag-pill.regime{background:var(--lime)}
.tag-pill.tag{background:var(--paper)}
.tag-pill.equip{background:var(--paper);color:var(--muted)}
.lib-nutri{position:absolute;top:8px;right:8px;z-index:1}
.lib-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
/* recipe page classification block */
.classif{margin:14px 0 4px;display:grid;gap:8px}
.classif-pills{display:flex;flex-wrap:wrap;gap:7px;align-items:center}
.classif-nutri{display:inline-flex;align-items:center;gap:7px}
.classif-nutri small{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.05em}
.classif-health{display:inline-flex;align-items:center;gap:7px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);padding:4px 9px;color:var(--ink)}
.classif-health small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.classif-health strong{font-size:14px;line-height:1}
.classif-health i{font-size:10px;font-style:normal;color:var(--muted);margin-left:1px}
.classif-tags{max-width:100%}
.classif-tags>summary{position:relative;list-style:none;display:inline-flex;align-items:center;gap:6px;min-height:34px;border:2px dashed var(--ink);border-radius:999px;background:var(--paper);padding:5px 10px;color:var(--ink);font-size:12px;font-weight:900;cursor:pointer}
.classif-tags>summary::-webkit-details-marker{display:none}
.classif-tags>summary::before{content:"";position:absolute;inset:-5px;border-radius:inherit}
.classif-tags>summary svg{display:block;width:15px;height:15px;flex:0 0 15px}
.classif-tags>summary small{font:inherit;color:var(--muted)}
.classif-tags[open]{width:100%}
.classif-tags[open]>summary{background:var(--ink);color:var(--bone);border-style:solid}
.classif-tags[open]>summary small{color:var(--bone)}
.classif-tags-body{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding-top:8px}
.classif-contains{margin:0;color:var(--muted);font-size:12px;font-weight:850}
/* library filter bar */
.lib-filters{display:flex;flex-wrap:wrap;gap:12px 16px;align-items:center;border:2px solid var(--ink);border-radius:20px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:14px 16px;margin-bottom:18px}
.lib-filter-group{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.lib-filter-label{font-size:11px;text-transform:uppercase;letter-spacing:.075em;color:var(--muted);font-weight:900;margin-right:2px}
.lib-filter{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;font-size:12px;padding:7px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);transition:transform .12s ease}
.lib-filter:hover{transform:translateY(-1px)}
.lib-filter.active{background:var(--lime);color:var(--ink)}
.lib-filter-actions{display:flex;align-items:center;gap:10px;margin-left:auto}
.lib-filter-reset{background:var(--lime)}
.lib-filter-count{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:900}
@media(max-width:960px){.lib-filters{gap:10px;padding:12px}.lib-filter-actions{margin-left:0;width:100%}.lib-filter{font-size:11px;padding:6px 10px}}
/* Rythme vertical du profil: UN seul espacement, tenu par la grille du groupe. Avant, les <p
   class="prefs-hint"> n'avaient aucune regle et gardaient les marges par defaut du navigateur
   (~16px haut ET bas), qui s'ajoutaient au gap: un groupe avec aide etait espace de 40px, un groupe
   sans de 8px. Deux `style=` en dur dans le HTML rattrapaient le coup au cas par cas. */
.prefs-group{display:grid;gap:var(--sp-1);margin-bottom:var(--sp-3)}
.prefs-group>*{margin-top:0;margin-bottom:0}
.prefs-label{font-family:inherit;font-size:11px;text-transform:uppercase;letter-spacing:.075em;color:var(--muted);font-weight:900}
.prefs-hint{font-size:12.5px;line-height:1.4;font-weight:750;color:var(--muted);margin:0}
/* Un sous-bloc dans un groupe (ex: le mode de blocage sous le regime) respire d'un cran, pas plus. */
.prefs-group>.prefs-sub{display:grid;gap:var(--sp-1);margin-top:6px}
.prefs-choices{display:flex;flex-wrap:wrap;gap:8px}
/* Meme hauteur pour les deux controles qui cohabitent dans une meme rangee (.pref-pick et les
   .checkline du groupe Restrictions), et la cible de 42px du design system, que .pref-pick
   n'atteignait pas. 44px et pas 42: c'est la hauteur imposee par la case a cocher (20px) plus ses
   marges, et aligner la pastille dessus evite deux hauteurs dans une meme rangee.
   Hover/active alignes sur la convention: -2px au survol, enfonce a l'appui. */
.pref-pick{display:inline-flex;align-items:center;min-height:44px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;font-size:13px;padding:8px 14px;cursor:pointer;box-shadow:var(--sh-int);transition:transform .16s ease}
.pref-pick:hover{transform:translateY(-2px)}
.pref-pick:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.pref-pick.active{background:var(--lime);color:var(--ink)}
.prefs-choices .checkline{min-height:44px;font-size:13px;padding:8px 12px;cursor:pointer}
#prefDislikeOther{width:100%;margin-top:8px}
/* Equipement: grille FIXE a deux colonnes, et les modeles regroupes dessous.
   L'ancienne version posait le champ modele a cote de sa case dans une rangee qui s'enroulait:
   chaque case faisait la largeur de son libelle, donc dents de scie, et cocher inserait un champ au
   milieu de la liste. Mesure: +54 px pour cinq des cases, +14 px pour deux autres, 0 pour le reste,
   selon le remplissage de la ligne. Un mouvement imprevisible est pire qu'un grand mouvement. */
/* flex:1 0 100% explicite: #prefsEquip porte .prefs-choices, donc un conteneur flex. Sans ca
   la largeur des trois blocs dependait de leur contenu et donc du hasard du remplissage. */
.eq-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;flex:1 0 100%}
.eq-grid .checkline{min-height:44px;font-size:12.5px;padding:8px 10px;margin:0;cursor:pointer}
/* deux libelles ne tiennent pas dans une demi-largeur a 390 px */
.eq-grid .checkline.eq-large{grid-column:1 / -1}
/* la liste des modeles grandit par le BAS: cocher n'a jamais repousse ce qu'on lit */
.eq-models{display:grid;gap:8px;flex:1 0 100%}
.eq-models:not(:empty){margin-top:14px;padding-top:12px;border-top:2px solid var(--line)}
.eq-models-title{margin:0}
.eq-model-line{display:grid;grid-template-columns:112px 1fr;gap:8px;align-items:center}
.eq-model-line b{font-size:12.5px;font-weight:900}
.eq-model-line .eq-model{min-height:44px;width:100%;font-size:12.5px;padding:8px 10px;margin:0}
.eq-extra{display:flex;flex-wrap:wrap;align-items:center;gap:8px;flex:1 0 100%;margin-top:14px;padding-top:12px;
  border-top:2px solid var(--line)}
.eq-extra b{font-size:12.5px;font-weight:900}
.eq-extra select,.eq-extra input{min-height:44px;font-size:12.5px;padding:8px 10px;margin:0}
.eq-extra input{flex:1 1 160px;min-width:0}
.prefs-choices>.prefs-hint{flex:1 0 100%;margin-top:2px}
.recipe-dislikes{margin:8px 0 4px;color:var(--red);font-size:13px;font-weight:850}
.recipe-dislikes.hidden{display:none}
@media(max-width:820px){.prefs-choices .checkline{font-size:12px;padding:7px 10px}.pref-pick{font-size:12px;padding:7px 12px}}

.nutri-explain{margin:6px 0 0;display:flex;flex-direction:column;gap:3px}
.nutri-explain p{margin:0;font-size:12px;font-weight:800;color:var(--muted);display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.nutri-explain .nutri-neg,.nutri-explain .nutri-pos{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:850}
.nutri-explain .nutri-neg{background:#fdecec;color:#b3261e}
.nutri-explain .nutri-neg small{opacity:.75;font-weight:700}
.nutri-explain .nutri-pos{background:#e7f5ec;color:#1a7f37}

.scan-pantry{margin-top:8px}
.scan-results{margin-top:8px;display:flex;flex-direction:column;gap:8px}
.scan-chips{display:flex;flex-wrap:wrap;gap:6px}
.scan-chip{border:1px solid var(--line,#ddd);background:#fff;border-radius:999px;padding:5px 12px;font-size:13px;font-weight:800;cursor:pointer}
.scan-chip span{color:var(--accent,#1a7f37);font-weight:900}
.scan-chip.added,.scan-chip[disabled]{opacity:.5;cursor:default}


.frigo-intro{display:grid;gap:12px;margin-bottom:16px}
.frigo-sub{max-width:68ch;color:var(--muted,#777);font-size:14px;line-height:1.4;margin:0}
.frigo-combo{margin-bottom:12px;position:relative}
.frigo-list{display:flex;flex-direction:column;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.frigo-empty{color:var(--muted,#777);font-size:13px}
/* Niveau du frigo: .segctl canonique, mais le cran actif garde SA couleur. Ici la couleur porte de
   l'information (rouge = il ne reste presque rien), pas de la decoration: un thumb lime uniforme
   ferait perdre l'avertissement, et le badge de la ligne fermee, lui, reste colore. */
.frigo-levels .segctl-btn{padding:5px 11px;font-size:11px;font-weight:900;color:var(--muted);min-height:34px}
.frigo-levels .segctl-btn.active{color:var(--ink);background:var(--lime);box-shadow:inset 0 0 0 2px var(--ink)}
.frigo-levels .segctl-btn.active.lvl-moyen{background:var(--lime-soft)}
.frigo-levels .segctl-btn.active.lvl-bas{background:var(--red-soft);box-shadow:inset 0 0 0 2px var(--red);color:var(--red)}
.frigo-levels .segctl-btn.active.lvl-epuise{background:var(--ink);color:var(--paper)}
.frigo-del{border:none;background:none;line-height:1;cursor:pointer;color:var(--muted,#999)}
.frigo-cook{margin-top:16px}
.frigo-cook-results{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.cook-card{display:flex;gap:10px;align-items:center;padding:10px;border:2px solid var(--ink,#111);border-radius:12px;text-decoration:none;color:inherit;background:#fff}
.cook-cov{min-width:46px;height:46px;display:grid;place-items:center;border-radius:10px;background:var(--ink,#111);color:#fff;font-weight:900;font-size:13px}
.cook-body{display:flex;flex-direction:column;gap:2px}
.cook-body b{font-size:14px}
.cook-have{color:#1a7f37;font-size:11.5px}
.cook-miss{color:#b3261e;font-size:11.5px}
.camera-card{max-width:520px}
#cameraVideo{width:100%;border-radius:12px;background:#000;max-height:50vh;object-fit:cover}
@media(max-width:600px){#cameraVideo{max-height:34vh}.camera-hint{font-size:12px;margin:6px 0}}
.camera-actions{position:sticky;bottom:0;background:var(--paper);padding:10px 0 2px;display:flex;gap:10px}
.camera-actions button{flex:1}
.camera-tray{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0}
.cam-thumb{position:relative;width:56px;height:56px}
.cam-thumb img{width:100%;height:100%;object-fit:cover;border-radius:8px}
.cam-thumb button{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;border:none;background:#b3261e;color:#fff;font-size:11px;line-height:1;cursor:pointer}
.camera-actions{display:flex;gap:8px}


.lib-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:14px}
.filter-dd{position:relative}
.filter-dd-btn{display:inline-flex;align-items:center;gap:5px;padding:7px 12px;border:2px solid var(--ink,#111);border-radius:999px;background:#fff;font-weight:850;font-size:13px;cursor:pointer}
.filter-dd.has-active .filter-dd-btn{background:var(--ink,#111);color:#fff}
.filter-dd-count{font-family:ui-monospace,Menlo,monospace;font-size:11px}
.filter-dd-caret{font-size:10px;opacity:.7}
.filter-dd-panel{position:absolute;z-index:30;top:calc(100% + 5px);left:0;min-width:190px;max-width:calc(100vw - 24px);max-height:320px;overflow:auto;background:#fff;border:2px solid var(--ink,#111);border-radius:12px;box-shadow:4px 4px 0 var(--ink,#111);padding:6px}
.filter-dd-opt{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;text-align:left;gap:9px;padding:6px 8px;border-radius:8px;font-size:13px;font-weight:800;cursor:pointer}
.filter-dd-opt input{width:18px;height:18px;flex:0 0 auto;margin:0;padding:0;border:2px solid var(--ink);border-radius:5px;accent-color:var(--lime)}
.filter-dd-opt:hover{background:#f2f2f2}
.filter-dd-reset{padding:7px 12px;border:none;background:none;font-weight:800;font-size:13px;color:var(--muted,#888);cursor:pointer;text-decoration:underline}
.lib-filter-count{font-size:12px;color:var(--muted,#888);font-weight:800}

.guest-nav .mark{background:#fef7e3;padding:5px 11px;border:2px solid var(--ink);border-radius:14px;box-shadow:3px 3px 0 var(--ink);align-items:center}
.guest-nav .mark img{height:26px;width:auto;display:block}

.tabbar{display:none}
@media(max-width:960px){
  .guest-nav-links{display:none!important}
  .shell{padding-bottom:calc(78px + env(safe-area-inset-bottom))!important}
  .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:60;background:var(--paper);border-top:2px solid var(--ink);justify-content:space-around;align-items:stretch;padding:6px max(14px,env(safe-area-inset-right)) calc(4px + env(safe-area-inset-bottom)) max(14px,env(safe-area-inset-left));box-shadow:0 -3px 0 rgba(21,19,15,.05)}
  .tabbar.hidden{display:none}
  .tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:5px 0;text-decoration:none;color:var(--muted);font-size:10px;font-weight:900;letter-spacing:.01em}
  .tabbar a svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
  .tabbar a:active{transform:scale(.92)}
  .gooey{display:block;position:fixed;z-index:61;right:max(18px,env(safe-area-inset-right));bottom:calc(70px + env(safe-area-inset-bottom));width:64px;height:64px}
  .gooey.hidden{display:none}
}

.install-banner{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:55;display:flex;align-items:center;gap:12px;width:min(560px,calc(100vw - 24px));border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:var(--shadow);padding:12px 14px}
.install-banner.hidden{display:none}
.install-txt{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
.install-txt b{font-size:15px}
.install-txt span{font-size:12px;color:var(--muted);font-weight:800}
.install-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.install-banner.ios-install .install-txt span{font-size:12.5px;line-height:1.55;color:var(--ink)}
.ios-share-ic{width:16px;height:16px;vertical-align:-3px;color:var(--cobalt);display:inline-block;margin:0 1px}
.install-banner .primary{width:auto;margin:0;padding:9px 16px}
@media(max-width:960px){.install-banner{bottom:calc(84px + env(safe-area-inset-bottom));left:12px;right:12px;transform:none;width:auto}}

.recipe-actions .cook{background:var(--lime);color:var(--ink)}
.cook-mode{position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;background:var(--bone);padding:calc(14px + env(safe-area-inset-top)) 16px calc(16px + env(safe-area-inset-bottom))}
.cook-mode.hidden{display:none}
.cook-head{display:flex;align-items:center;gap:12px}
.cook-head .cook-title{flex:1;font-weight:900;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cook-head .cook-counter{font-family:ui-monospace,Menlo,monospace;font-weight:950;font-size:13px;color:var(--cobalt)}
.cook-progress{height:8px;border:2px solid var(--ink);border-radius:999px;margin:14px 0 0;overflow:hidden;background:var(--paper)}
.cook-progress #cookBar{height:100%;background:var(--lime);width:0;transition:width .25s ease}
.cook-body{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;justify-content:center;gap:20px;padding:8px 0}
.cook-step{font-size:clamp(24px,5.5vw,38px);line-height:1.28;font-weight:850;margin:0}
/* Photo d'etape en Mode Cuisine. Hauteur en VH et JAMAIS en px ni en aspect-ratio fixe: elle se
   regle sur l'ecran reel au lieu de supposer un grand telephone (verifie 360x640 et 412x892). */
.cook-shot{flex:0 0 auto;margin:0;position:relative;border:2px solid var(--ink);border-radius:var(--r-md);overflow:hidden;background:var(--ink)}
.cook-shot img{display:block;width:100%;height:34vh;object-fit:cover}
.cook-shot figcaption{position:absolute;left:0;right:0;bottom:0;padding:8px 12px;background:linear-gradient(transparent,rgba(21,19,15,.88) 45%);color:var(--paper);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.04em;line-height:1.3}
/* L'image et la consigne doivent tenir ensemble: c'est le texte qui cede, pas la navigation. */
.cook-body.has-shot{justify-content:flex-start;gap:14px}
.cook-body.has-shot .cook-step{font-size:clamp(19px,4.4vw,27px);line-height:1.3}
@media(max-height:680px){.cook-shot img{height:28vh}}
.cook-timer{align-self:flex-start;font-family:ui-monospace,Menlo,monospace;font-size:44px;font-weight:950;border:2px solid var(--ink);border-radius:16px;background:var(--paper);padding:10px 20px;box-shadow:3px 3px 0 var(--ink)}
.cook-timer.done{background:var(--red);color:#fff}
.cook-nav{display:flex;gap:10px;align-items:center}
.cook-nav button{width:auto;margin:0;flex:1;padding:16px}
.cook-done{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(247,244,236,.92);backdrop-filter:blur(3px)}
.cook-done.hidden{display:none}
.cook-done-card{width:100%;max-width:420px;display:flex;flex-direction:column;gap:12px;text-align:center;border:2px solid var(--ink);border-radius:18px;background:rgba(201,255,59,.18);box-shadow:3px 3px 0 var(--ink);padding:22px 20px}
.cook-done-card b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;font-size:22px;letter-spacing:0.02em}
.cook-done-card span{color:rgba(21,19,15,.78);font-weight:750;font-size:14px}
.cook-done-card button{width:100%;margin:0}
.cook-done-skip{background:none;border:none;color:rgba(21,19,15,.6);font-weight:700;text-decoration:underline;padding:4px}

.frigo-stat{margin:0 0 10px;font-size:13px;font-weight:850;color:var(--muted)}
.frigo-stat.hidden{display:none}
.frigo-stat .frigo-urgent{color:#b3261e}
.frigo-name{display:inline-flex;align-items:center;gap:7px;flex-wrap:wrap}
.frigo-dlc{font-family:ui-monospace,Menlo,monospace;font-size:10px;font-weight:900;padding:2px 7px;border-radius:999px;background:#eee;color:#555}
.frigo-dlc.warn{background:#fff0dc;color:#9a5b00}
.frigo-dlc.bad{background:#fdecec;color:#b3261e}
.frigo-date{border:1.5px solid var(--muted);border-radius:8px;background:var(--paper);color:var(--muted);font-size:10px;font-family:ui-monospace,Menlo,monospace;padding:2px 4px;max-width:118px}
.frigo-date:focus{border-color:var(--ink);color:var(--ink);outline:none}

.account-btn.install{background:var(--lime);color:var(--ink);border-color:var(--ink)}

@media(max-width:960px){.account-email{display:none}.guest-nav{gap:8px}.account-btn{padding:7px 11px;font-size:12px}}
html{overflow-x:hidden}

/* rec-add flex fix */
.rec-add,.off-add{display:flex!important;flex-wrap:wrap;gap:10px;align-items:center;grid-template-columns:none}
.rec-add .rec-qty{flex:1 1 80px;min-width:0;width:auto}
.rec-add .rec-confirm{flex:0 0 auto}
.off-add .off-qty{flex:1 1 70px;min-width:0;width:auto}
.off-add .off-unit{flex:1 1 90px;min-width:0;width:auto}
.off-add .off-confirm{flex:0 0 auto}

.camera-hint{margin:0 0 8px;font-size:12px;font-weight:800;color:var(--muted);line-height:1.35}
.scan-status{position:fixed;top:12px;left:50%;transform:translateX(-50%);z-index:70;display:flex;align-items:center;gap:9px;background:var(--ink);color:var(--bone);font-weight:850;font-size:13px;padding:9px 16px;border-radius:999px;box-shadow:3px 3px 0 rgba(21,19,15,.25)}
.scan-status.hidden{display:none}
.scan-spin{width:14px;height:14px;border:2px solid rgba(244,238,223,.35);border-top-color:var(--lime);border-radius:50%;animation:scanspin .7s linear infinite}
@keyframes scanspin{to{transform:rotate(360deg)}}
.tabbar a{position:relative}
.tab-badge{position:absolute;top:2px;right:calc(50% - 20px);width:9px;height:9px;border-radius:50%;background:var(--red,#d72219);border:1.5px solid var(--paper)}

.frigo-head-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:flex-start}
.frigo-head-actions .primary,.frigo-head-actions .secondary,.frigo-head-actions .btn-ghost{display:inline-flex;align-items:center;justify-content:center;width:auto;min-height:42px;margin:0;padding:10px 14px;line-height:1.1}
#notifToggle{width:auto;margin:0}
.frigo-reminder{display:inline-flex;align-items:center;gap:8px}

/* Frigo: le rail automatique est l'unique porte « quoi cuisiner maintenant ». */
.frigo-now{margin:18px 0 22px;border-top:2px solid var(--ink);padding-top:14px}
.frigo-now-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:12px}
.frigo-now-head small{display:block;color:var(--cobalt);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;margin-bottom:3px}
.frigo-now-head h3{font-size:clamp(26px,4vw,36px);line-height:.9;margin:0}
.frigo-now-head p{color:var(--muted);font-size:12px;font-weight:850;margin:0;text-align:right}
.frigo-now-head p b{color:var(--red)}
.frigo-now.is-almost .frigo-now-head small{color:var(--muted)}
.frigo-now-grid{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(190px,240px);gap:12px;overflow-x:auto;padding:0 4px 7px 0;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
.frigo-now-card{display:flex;flex-direction:column;min-width:0;border:2px solid var(--ink);border-radius:var(--r-md);overflow:hidden;background:var(--paper);box-shadow:var(--sh-card);color:inherit;text-decoration:none;scroll-snap-align:start}
.frigo-now-card.almost{box-shadow:var(--sh-int)}
.frigo-now-card.anti-gaspi{border-color:var(--red);box-shadow:4px 4px 0 var(--red)}
.frigo-now-thumb{position:relative;display:grid;place-items:center;aspect-ratio:4/3;background:var(--ink);overflow:hidden}
.frigo-now-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 58%}
.frigo-now-thumb .lib-fallback{color:rgba(244,238,223,.55);font-size:40px}
.frigo-now-thumb em{position:absolute;top:8px;left:8px;border:2px solid var(--paper);border-radius:var(--r-pill);background:var(--ink);color:var(--paper);font:900 11px ui-monospace,SFMono-Regular,Menlo,monospace;padding:3px 7px}
.frigo-now-body{display:flex;flex:1;flex-direction:column;gap:4px;padding:10px 11px}
.frigo-now-body>b{font-size:13.5px;line-height:1.2}
.frigo-now-body small{font-size:11px;font-weight:800;line-height:1.25}
.frigo-now-exp{color:var(--red)}
.frigo-now-miss{color:var(--muted)}
.frigo-now-body>span{color:var(--muted);font:800 10.5px ui-monospace,SFMono-Regular,Menlo,monospace;margin-top:auto}

.shopping-row.have span{text-decoration:line-through;color:var(--muted)}
.shop-have{font-style:normal;color:#1a7f37;font-weight:850;font-size:11px}
.shop-decompose-btn,.shop-recompose-btn{grid-column:2/-1;justify-self:start;margin-top:2px;padding:2px 8px;border:1.5px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-size:11px;font-weight:850;cursor:pointer}
.shop-from-component{grid-column:2/-1;font-style:normal;color:var(--muted);font-size:11px;font-weight:850;margin-top:2px}

@property --pct{syntax:'<number>';inherits:false;initial-value:0}
@property --w{syntax:'<length-percentage>';inherits:false;initial-value:0%}
.kcal-ring{transition:--pct .8s cubic-bezier(.22,1,.36,1)}
.macro-bar i{transition:--w .8s cubic-bezier(.22,1,.36,1)}
.macro-bars .macro-bar:nth-child(2) i{transition-delay:.08s}
.macro-bars .macro-bar:nth-child(3) i{transition-delay:.16s}
.macro-bars .macro-bar:nth-child(4) i{transition-delay:.24s}
@media(prefers-reduced-motion:reduce){.kcal-ring,.macro-bar i{transition:none}}

/* --- /animate app-wide pass (compositor-safe, reduced-motion aware) --- */
@keyframes revealCard{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes overlayIn{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
@keyframes bannerIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:no-preference){
  .reveal{animation:revealCard .42s cubic-bezier(.22,1,.36,1) both;animation-delay:calc(var(--i,0) * 45ms)}
  .modal:not(.hidden) .modal-card{animation:overlayIn .3s cubic-bezier(.22,1,.36,1) both}
  .cook-mode:not(.hidden) .cook-body,.cook-mode:not(.hidden) .cook-head{animation:overlayIn .32s cubic-bezier(.22,1,.36,1) both}
  .install-banner:not(.hidden),.scan-status:not(.hidden){animation:bannerIn .3s cubic-bezier(.22,1,.36,1) both}
  .primary,.secondary,.account-btn,.picker button,.lib-filter,.filter-dd-btn,.tabbar a{transition:transform .15s ease}
  .primary:active,.secondary:active,.account-btn:active,.filter-dd-btn:active,.lib-filter:active{transform:scale(.96)}
  .lib-card:active,.cook-card:active{transform:scale(.985)}
}

.fridgepick-card{max-width:460px}
.fridgepick-list{display:flex;flex-direction:column;gap:2px;max-height:52vh;overflow:auto;margin:4px 0 8px}
.fridgepick-row{display:flex;align-items:center;gap:10px;padding:9px 8px;border-radius:12px;font-weight:800;font-size:14px}
.fridgepick-row:hover{background:rgba(201,255,59,.14)}
.fridgepick-row input{width:19px;height:19px;flex:0 0 auto;accent-color:var(--lime);margin:0}
.fridgepick-row span{flex:1}
.fridgepick-row span small{color:var(--muted);font-weight:700}
.fp-dlc{font-style:normal;font-family:ui-monospace,Menlo,monospace;font-size:10px;font-weight:900;padding:2px 7px;border-radius:999px;background:#eee;color:#555}
.fp-dlc.bad{background:#fdecec;color:#b3261e}

.cook-nav{flex:0 0 auto}
.cook-ing-btn{flex:0 0 auto;border:2px solid var(--ink);background:var(--paper);border-radius:999px;font-weight:900;font-size:12px;padding:6px 12px;cursor:pointer}
.cook-ingredients{flex:0 0 auto;max-height:34vh;overflow-y:auto;margin-top:10px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);padding:6px 10px}
.cook-portions{display:flex;justify-content:center;padding:8px 2px 10px;margin-bottom:2px;border-bottom:1px dashed var(--line);position:sticky;top:0;background:var(--paper)}
.cook-ingredients.hidden{display:none}
.cook-ing-row{display:flex;justify-content:space-between;gap:12px;padding:7px 2px;border-bottom:1px dashed var(--line);font-weight:800;font-size:14px}
.cook-ing-row:last-child{border-bottom:0}
.cook-ing-row em{font-style:normal;color:var(--muted);font-family:ui-monospace,Menlo,monospace;font-size:12px;white-space:nowrap}
.cook-ing-empty{color:var(--muted);margin:6px 2px}

.photo-meal{margin-top:10px;display:flex;flex-direction:column;gap:8px}
.photo-meal.hidden{display:none}
.photo-meal-name{width:100%;font-weight:900}
.photo-meal-items{display:flex;flex-direction:column;gap:2px}
.pm-row{display:flex;align-items:center;gap:8px;padding:7px 4px;border-bottom:1px dashed var(--line)}
.pm-item{flex:1;font-weight:800;font-size:14px;min-width:0}
.pm-grams-wrap{display:inline-flex;align-items:center;gap:3px;flex:0 0 auto}
.pm-grams{width:62px;padding:6px 8px;text-align:right}
.pm-grams-wrap em{font-style:normal;color:var(--muted);font-size:12px;font-weight:800}
.pm-kcal{flex:0 0 auto;font-family:ui-monospace,Menlo,monospace;font-size:12px;font-weight:900;color:var(--muted);min-width:56px;text-align:right}
.pm-del{flex:0 0 auto;border:none;background:none;font-size:18px;color:var(--muted);cursor:pointer;line-height:1}
.pm-dish{margin-bottom:6px}
.pm-dish-head{display:flex;align-items:center;gap:8px;padding:8px 4px 2px}
.pm-dish-name{flex:1;min-width:0;font-weight:900}
.pm-dish-qty{font-weight:700;color:var(--muted);white-space:nowrap}
.pm-dish-kcal{font-size:13px;color:var(--muted);white-space:nowrap}
.pm-dish-del{flex:0 0 auto;border:none;background:none;font-size:18px;color:var(--muted);cursor:pointer;line-height:1}
.photo-meal-total{display:flex;justify-content:space-between;align-items:center;padding:8px 4px;font-weight:950;border-top:2px solid var(--ink);margin-top:2px}
.photo-meal-total span{font-family:ui-monospace,Menlo,monospace;font-size:13px}
.menu-scan{display:grid;gap:12px}
.rms-head{display:grid;gap:3px}
.rms-head strong{font-weight:950;letter-spacing:-.02em}
.rms-head p{margin:0;color:var(--muted);font-size:13px;font-weight:750;line-height:1.35}
.rms-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.rms-actions .secondary{margin:0}
.rms-pages{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.rms-page{border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);overflow:hidden}
.rms-page img{display:block;width:100%;aspect-ratio:3/4;object-fit:cover;background:var(--soft)}
.rms-page-tools{display:grid;grid-template-columns:repeat(5,1fr);gap:2px;padding:5px;border-top:1px dashed var(--line)}
.rms-page-tools button{display:grid;place-items:center;min-width:0;height:30px;border:0;border-radius:8px;background:transparent;color:var(--ink);font-weight:950;cursor:pointer}
.rms-page-tools button:disabled{opacity:.25}
.rms-page-tools svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.rms-tools{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}
.rms-tools input,.rms-tools select{min-width:0}
.rms-compare,.rms-recent{display:grid;gap:6px;border:1px dashed var(--line);border-radius:14px;padding:9px;background:rgba(235,226,207,.36)}
.rms-compare b,.rms-recent>b{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.rms-compare span{display:flex;justify-content:space-between;gap:8px;font-weight:850;font-size:13px}
.rms-compare em{font-style:normal;font-family:ui-monospace,Menlo,monospace;color:var(--muted);white-space:nowrap}
.rms-recent-row{display:grid;grid-template-columns:minmax(0,1fr) 34px;gap:6px}
.rms-recent-row button{border:1px solid var(--line);border-radius:11px;background:var(--paper);color:var(--ink);font-weight:850;text-align:left;padding:8px;cursor:pointer}
.rms-recent-row button:last-child{text-align:center;font-size:18px;line-height:1}
.rms-recent-row small{display:block;color:var(--muted);font-size:11px;font-weight:750;margin-top:2px}
.rms-dishes{display:grid;gap:10px}
.rms-dish{display:grid;gap:8px;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:12px}
.rms-dish.logged{background:rgba(201,255,59,.16)}
.rms-dish-head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:start}
.rms-dish-head strong{grid-column:1;font-size:16px;line-height:1.15;letter-spacing:-.02em}
.rms-dish-head b{grid-column:2;grid-row:1/3;font-family:ui-monospace,Menlo,monospace;font-size:13px;white-space:nowrap}
.rms-check{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:850;color:var(--muted)}
.rms-check input{width:16px;height:16px;padding:0;accent-color:var(--lime)}
.rms-dish p{margin:0;color:var(--muted);font-size:13px;line-height:1.32;font-weight:750}
.rms-meta{display:flex;flex-wrap:wrap;gap:6px}
.rms-meta span{border:1px solid var(--line);border-radius:999px;padding:4px 8px;font-size:11px;font-weight:900;color:var(--muted)}
.rms-note{color:var(--muted);font-weight:750;line-height:1.3}
.rms-dish details{font-size:13px}
.rms-dish summary{cursor:pointer;font-weight:900;color:var(--cobalt)}
.rms-dish ul{margin:6px 0 0;padding-left:18px}
.rms-log{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;align-items:center;border-top:1px dashed var(--line);padding-top:10px}
.rms-log select,.rms-log input{padding:9px 10px;border-radius:12px}
.rms-adjusted{grid-column:1/3;font-family:ui-monospace,Menlo,monospace;font-size:12px;font-weight:900;color:var(--muted)}
.rms-log .primary{grid-column:3;margin:0}
@media(max-width:520px){
  .ls-capture{gap:6px}
  .ls-capture button{font-size:10px;padding:8px 2px}
  .rms-pages{grid-template-columns:1fr}
  .rms-tools,.rms-log{grid-template-columns:1fr}
  .rms-adjusted,.rms-log .primary{grid-column:auto}
}

.frequent-strip{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:12px}
.frequent-strip.hidden{display:none}
.frequent-label{font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:900;margin-right:2px}
.frequent-chip{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--ink);background:var(--paper);border-radius:999px;padding:5px 11px;font-weight:850;font-size:12.5px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.frequent-chip em{font-style:normal;font-family:ui-monospace,Menlo,monospace;font-size:11px;color:var(--muted)}
.frequent-chip:disabled{opacity:.5}

.mealprep-line{margin-top:14px}
.mealprep-line small{color:var(--muted);font-weight:800;text-transform:none;letter-spacing:0}

.plan-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.plan-head-title{display:flex;align-items:center;gap:12px;min-width:0}
.plan-nav{display:flex;gap:6px}
.plan-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-bottom:16px}
.plan-day{border:2px solid var(--ink);border-radius:var(--r-md);background:var(--paper);padding:10px;position:relative;min-height:120px;display:flex;flex-direction:column;gap:8px}
.plan-day-label{font-size:11px;text-transform:uppercase;letter-spacing:.05em;font-weight:900;color:var(--muted)}
.plan-day.empty{align-items:center;justify-content:center}
.plan-add{width:100%}
.plan-recipe{display:flex;flex-direction:column;gap:6px;text-decoration:none;color:inherit;flex:1}
.plan-thumb{aspect-ratio:16/10;border-radius:10px;overflow:hidden;background:var(--ink);display:grid;place-items:center}
.plan-thumb img{width:100%;height:100%;object-fit:cover}
.plan-thumb .lib-fallback{font-size:30px;color:rgba(244,238,223,.5)}
.plan-recipe b{font-size:13px;line-height:1.2}
.plan-remove{position:absolute;top:6px;right:6px;width:24px;height:24px;border:2px solid var(--ink);border-radius:50%;background:var(--paper);font-weight:900;cursor:pointer;line-height:1;padding:0}
.plan-shopping{border-top:2px solid var(--ink);padding-top:12px;margin-top:6px}
.plan-shopping.hidden{display:none}
.plan-shop-row{display:flex;align-items:center;gap:10px;padding:7px 4px;font-weight:800}
.plan-shop-row.have span{text-decoration:line-through;color:var(--muted)}
.plan-shop-row input{width:18px;height:18px;flex:0 0 auto;accent-color:var(--lime)}
.plan-shop-row span{flex:1}
.plan-pick-list{display:flex;flex-direction:column;gap:4px;max-height:60vh;overflow:auto}
.plan-pick-sentinel{display:block;width:100%;height:1px;flex:0 0 1px}
.plan-pick-row{text-align:left;border:2px solid var(--ink);border-radius:12px;background:var(--paper);padding:10px 12px;cursor:pointer;display:flex;flex-direction:column;gap:2px}
.plan-pick-row small{color:var(--muted);font-weight:700}

.plan-autofill{margin-bottom:12px}
.plan-autofill-config{margin-top:10px;border:2px solid var(--ink);border-radius:var(--r-md);background:rgba(201,255,59,.14);padding:14px;display:flex;flex-direction:column;gap:10px}
.plan-autofill-config.hidden{display:none}
.plan-slider-label{display:block;font-weight:850;font-size:13px;color:var(--muted);margin-top:2px}
.plan-slider-label b{font-family:ui-monospace,Menlo,monospace;font-size:15px;color:var(--ink)}
.plan-autofill-config input[type=range]{width:100%;accent-color:var(--lime)}
.plan-autofill-config .primary{width:auto;margin:0}
.plan-day-chips{display:flex;flex-wrap:wrap;gap:6px}
.pf-row-col{flex-direction:column;align-items:flex-start;gap:8px}
.pf-hint{color:var(--muted);font-weight:850;font-size:11.5px;line-height:1.35}
.day-chip{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:950;font-size:12px;padding:7px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.day-chip.active{background:var(--lime)}
.plan-diet-custom{display:flex;flex-direction:column;gap:10px}
.plan-diet-custom.hidden{display:none}

.library-search{width:100%;margin-bottom:12px;font-weight:800}

.plan-pick-row{flex-direction:row!important;align-items:center;gap:10px}
.plan-pick-thumb{flex:0 0 auto;width:52px;height:52px;border-radius:10px;overflow:hidden;background:var(--ink);display:grid;place-items:center}
.plan-pick-thumb img{width:100%;height:100%;object-fit:cover}
.plan-pick-thumb .lib-fallback{font-size:22px;color:rgba(244,238,223,.5)}
.plan-pick-body{display:flex;flex-direction:column;gap:2px;min-width:0}
.plan-pick-body b{font-size:14px}
#planPickFilters{margin-bottom:10px}

.tag-pill.season{background:rgba(201,255,59,.25);border-color:var(--ink)}

.carte-sub{max-width:68ch;color:var(--muted);font-size:14px;line-height:1.4;margin:0 0 12px}
.carte-intent{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px 18px;align-items:center;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:14px 0;margin:0 0 14px;animation:carteIntentIn .28s cubic-bezier(.16,1,.3,1) both}
@keyframes carteIntentIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.carte-intent-main{display:flex;align-items:center;gap:12px;min-width:0}
.carte-intent-icon{width:44px;height:44px;flex:0 0 auto;display:grid;place-items:center;border:2px solid var(--ink);border-radius:var(--r-sm);background:var(--lime-soft)}
.carte-intent-icon svg{width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
.carte-intent-copy{min-width:0}.carte-intent-copy small{display:block;font:950 10px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:4px}
.carte-intent-copy h3{font-size:21px;line-height:1.05;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.carte-intent-copy p{font-size:12px;line-height:1.35;color:var(--muted);font-weight:800;margin:4px 0 0}
.carte-intent-items{grid-column:1/-1;display:flex;gap:6px;overflow-x:auto;padding-bottom:2px;scrollbar-width:thin}
.carte-intent-items span,.carte-intent-items em{flex:0 0 auto;border:1px solid var(--ink);border-radius:var(--r-pill);background:var(--paper);padding:5px 9px;font-size:11px;font-style:normal;font-weight:900;white-space:nowrap}
.carte-intent-items em{background:var(--soft);color:var(--muted)}
.carte-intent-actions{display:flex;align-items:center;gap:7px}.carte-intent-actions .btn-ghost{min-height:40px;padding:8px 11px;white-space:nowrap}
.carte-search{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px;align-items:stretch;margin-bottom:14px}
.carte-ing{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 0}
.carte-ing input{flex:1 1 200px;min-width:0}

.carte-search input{min-width:0;height:46px}
.carte-search .primary,.carte-search .btn-ghost{display:inline-flex;align-items:center;justify-content:center;gap:7px;width:auto;min-height:46px;margin:0;padding:9px 15px;white-space:nowrap}
.carte-search .btn-ghost svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.carte-layout{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(300px,.75fr);gap:16px;align-items:start}
.carte-map{width:100%;height:480px;border:2px solid var(--ink);border-radius:var(--r-md);overflow:hidden;box-shadow:var(--sh-int)}
.carte-map .maplibregl-canvas{filter:grayscale(.35) sepia(.12) brightness(1.03) contrast(.98)}
.carte-pin{width:30px;height:30px;border-radius:50%;background:var(--lime)!important;border:2px solid var(--ink);display:flex;align-items:center;justify-content:center;font-size:15px;line-height:1;box-shadow:2px 2px 0 var(--ink);cursor:pointer}
.carte-pin.is-list-match{box-shadow:0 0 0 3px var(--paper),0 0 0 5px var(--ink);z-index:2}
.carte-note{font-size:12px;font-weight:850}
.carte-me{width:15px;height:15px;border-radius:50%;background:#2f6fed;border:3px solid #fff;box-shadow:0 0 0 2px #2f6fed}
.carte-results{height:480px;display:flex;flex-direction:column;min-width:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.carte-results-head{padding:4px 4px 12px}
.carte-results-head h3{font-size:24px;line-height:1;margin:0 0 5px}
.carte-results-head .status{margin:0}
.carte-list{min-height:0;display:flex;flex-direction:column;overflow-y:auto;border-top:1px solid var(--line)}
.carte-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;border-bottom:1px solid var(--line);background:transparent}
.carte-row.is-list-match{background:var(--lime-soft)}
.carte-row:last-child{border-bottom:0}
.carte-row-main{min-width:0;display:grid;grid-template-columns:38px minmax(0,1fr);align-items:center;gap:10px;border:0;background:transparent;color:var(--ink);padding:10px 4px;text-align:left;cursor:pointer}
@media(hover:hover){.carte-row-main:hover{background:rgba(235,226,207,.24)}}
.carte-row-main:focus-visible{outline:3px solid var(--lime);outline-offset:-3px}
.carte-row-icon{width:38px;height:38px;display:grid;place-items:center;border-radius:50%;background:var(--bone);color:var(--ink)}
.carte-row-icon svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.carte-row-body{min-width:0;display:grid;gap:2px}
.carte-row-body b{font-size:13.5px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.carte-row-body small{color:var(--muted);font-size:11px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.carte-row-match{display:block;margin-top:3px;color:var(--ink);font-size:10.5px;line-height:1.25;white-space:normal}.carte-row-match b{font-size:inherit}
.carte-popup-match{display:block;max-width:220px;margin:7px 0 2px;padding-top:6px;border-top:1px solid var(--line);font-size:11px;line-height:1.3}
.carte-empty{color:var(--muted);font-size:13px;line-height:1.4;margin:0;padding:16px 4px}
.maplibregl-popup-content{border:2px solid var(--ink);border-radius:10px;font-weight:700}
@media(max-width:820px){
  .carte-intent{grid-template-columns:1fr}.carte-intent-actions{grid-row:3}.carte-intent-actions .btn-ghost{flex:1}
  .carte-layout{grid-template-columns:1fr}
  .carte-map{height:260px}
  .carte-results{height:auto;max-height:none}
  .carte-list{overflow:visible}
}
@media(max-width:560px){
  .carte-intent-copy h3{white-space:normal}.carte-intent-copy p{max-width:34ch}.carte-intent-actions{width:100%}
  .carte-search{grid-template-columns:1fr 1fr}
  .carte-search input{grid-column:1/-1}
  .carte-search .primary,.carte-search .btn-ghost{width:100%;padding-inline:10px}
}
@media(max-width:960px){.guest-nav-links{display:none!important}}

.plan-day{min-height:0}
.plan-slot{border-top:1px dashed var(--line);padding-top:8px;margin-top:8px;position:relative;display:flex;flex-direction:column;gap:6px}
.plan-slot:first-of-type{border-top:0;padding-top:0;margin-top:4px}
.plan-slot-label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;font-weight:900;color:var(--cobalt)}
.plan-slot.empty{align-items:stretch}
.plan-slot .plan-remove{top:22px}

.add-week-grid{display:flex;flex-direction:column;gap:8px}
.awg-row{display:grid;grid-template-columns:auto 1fr 1fr;gap:8px;align-items:center}
.awg-day{font-size:11px;text-transform:uppercase;letter-spacing:.05em;font-weight:900;color:var(--muted)}
.awg-cell{border:2px solid var(--ink);border-radius:var(--r-sm);background:var(--paper);padding:8px 10px;font:inherit;font-weight:850;cursor:pointer;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.awg-cell:hover{background:var(--lime-soft)}
.awg-cell.awg-filled{background:var(--bone)}
@media(max-width:640px){.awg-row{grid-template-columns:1fr 1fr}.awg-day{grid-column:1/-1}}

.plan-extras{margin-top:12px}
.plan-extras .assist-add{margin-bottom:10px}
.plan-extra-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 0;border-top:1px dashed var(--line);font-weight:850}
.plan-extra-row:first-of-type{border-top:0}
.plan-extra-del{flex:none;width:24px;height:24px;border:2px solid var(--ink);border-radius:50%;background:var(--paper);color:var(--ink);font-weight:900;line-height:1;cursor:pointer;padding:0}

.lib-card{position:relative}
.lib-del{position:absolute;top:6px;left:6px;z-index:3;width:26px;height:26px;border:2px solid var(--ink);border-radius:50%;background:var(--paper);color:var(--ink);font-weight:900;font-size:16px;line-height:1;cursor:pointer;padding:0;opacity:.9;box-shadow:2px 2px 0 var(--ink)}
.view.select-mode .lib-card{cursor:pointer}
.view.select-mode .lib-card.selected{outline:3px solid var(--cobalt);outline-offset:2px;border-radius:16px}
.view.select-mode .lib-del{display:none}
.lib-select-btn{border:2px solid var(--ink);background:var(--paper);border-radius:999px;font-weight:850;font-size:12px;padding:6px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
#planShareBtn{margin-top:8px}

.week-grid{display:flex;flex-direction:column;gap:20px}
.week-day-label{font-weight:900;text-transform:capitalize;margin-bottom:8px;font-size:15px}
.week-slots{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.week-card{margin:0}
.week-empty{border:1px dashed var(--line);border-radius:16px;padding:16px;display:flex;flex-direction:column;gap:6px;justify-content:center;align-items:flex-start;color:var(--muted);font-size:13px}
@media(max-width:560px){.week-slots{grid-template-columns:1fr}}
.carte-gmaps{display:inline-block;margin-top:4px;font-weight:800;color:var(--cobalt);text-decoration:underline}
.carte-gmaps-row{display:inline-flex;align-items:center;justify-content:center;min-height:34px;margin-right:4px;font-size:11px;font-weight:900;color:var(--ink);border:1.5px solid var(--ink);border-radius:var(--r-pill);padding:5px 10px;text-decoration:none;white-space:nowrap}
.carte-gmaps-row:hover{background:var(--lime)}

.prep-entry{display:flex;align-items:stretch;max-width:520px;overflow:hidden;border:2.5px solid var(--ink);border-radius:var(--r-md);margin-bottom:16px;background:var(--paper);color:var(--ink);text-decoration:none;box-shadow:3px 3px 0 var(--ink);transition:transform .12s ease}
.prep-entry:hover{transform:translateY(-2px)}
.prep-entry::before{content:'';flex:none;width:92px;background:url('feature-cards/mealprep.webp?v=1') center/cover no-repeat;border-right:2.5px solid var(--ink)}
.prep-entry .prep-entry-body{display:flex;flex-direction:column;gap:2px;justify-content:center;padding:12px 14px;min-width:0}
.prep-entry span{font-weight:900;font-size:15.5px}
.prep-entry small{color:var(--muted);font-weight:800;font-size:12px}
.prep-entry::after{content:'\2192';font-weight:900;font-size:20px;align-self:center;margin-left:auto;padding:0 14px}
.prep-intro{color:var(--muted);font-size:14px;margin:4px 0 14px}
.prep-form{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
.prep-form label,.prep-full{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:800}
.prep-full{margin-bottom:10px}
.prep-list{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.prep-saved-item{display:flex;justify-content:space-between;align-items:center;border:1.5px solid var(--line);border-radius:12px;padding:10px 14px;background:var(--paper);cursor:pointer;text-align:left}
.prep-saved-item b{font-weight:850}
.prep-saved-item small{color:var(--muted)}
.muted-note{color:var(--muted);font-size:13px}
.prep-plan-head h2{margin:0 0 4px}
.prep-plan-head p{color:var(--muted);font-size:14px}
.prep-totals{display:flex;gap:10px;flex-wrap:wrap;margin:14px 0 4px}
.prep-totals div{border:2px solid var(--ink);border-radius:12px;padding:8px 12px;text-align:center;min-width:64px}
.prep-totals b{display:block;font-size:18px;font-weight:900}
.prep-totals small{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}
.prep-block{margin-top:22px}
.prep-block h3{font-size:16px;margin-bottom:10px}
.prep-block h3 small{font-weight:600;color:var(--muted);font-size:12px;text-transform:none;letter-spacing:0}
.prep-session,.prep-steps{padding-left:18px;display:flex;flex-direction:column;gap:6px}
.prep-oven{background:var(--sand,#f2ede4);border-radius:10px;padding:8px 12px;font-size:13px;margin-bottom:10px}
.prep-comps,.prep-meals{display:flex;flex-direction:column;gap:12px}
.prep-comp,.prep-meal{border:1.5px solid var(--line);border-radius:14px;padding:12px 14px}
.prep-comp-head,.prep-meal-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.prep-comp-head h4,.prep-meal-head h4{margin:0;font-size:15px}
.prep-type{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--cobalt);font-weight:850}
.prep-meta{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.prep-meta span{font-size:12px;background:var(--sand,#f2ede4);border-radius:999px;padding:3px 9px;font-weight:700}
.prep-badge{font-size:11px;font-weight:850;border-radius:999px;padding:3px 9px}
.prep-badge.frz{background:#dbeafe;color:#1e40af}
.prep-badge.frs{background:#dcfce7;color:#166534}
.prep-ings{list-style:none;padding:0;margin:8px 0;display:flex;flex-wrap:wrap;gap:6px}
.prep-ings li{font-size:12px;background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:3px 8px}
.prep-ings li span{color:var(--muted)}
.prep-note{font-size:12.5px;margin:6px 0 0;color:var(--ink)}
.prep-note b{color:var(--cobalt)}
.prep-uses{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0 0}
.prep-uses span{font-size:11.5px;background:#eef2ff;color:#3730a3;border-radius:999px;padding:2px 8px;font-weight:700}
.prep-fresh{font-size:12px;color:var(--muted);margin:6px 0 0}
.prep-sched{display:flex;flex-direction:column;gap:6px}
.prep-sched-row{display:flex;align-items:center;gap:10px;border-bottom:1px dashed var(--line);padding:6px 0;flex-wrap:wrap}
.prep-sched-row b{min-width:32px}
.prep-sched-row span{font-weight:700;flex:1}
.prep-src{font-style:normal;font-size:11px;font-weight:850;border-radius:999px;padding:2px 8px}
.prep-src.frz{background:#dbeafe;color:#1e40af}
.prep-src.frs{background:#dcfce7;color:#166534}
.prep-sched-row small{width:100%;color:var(--muted);font-size:11.5px}
.prep-shop{display:flex;flex-direction:column}
.prep-shop-row{display:flex;gap:10px;align-items:center;padding:6px 0;border-bottom:1px dashed var(--line)}
.prep-shop-row span:first-child{flex:1;font-weight:600}
.prep-qty{color:var(--muted);font-size:13px}
.prep-cost{font-weight:850}
@media(max-width:520px){.prep-form{grid-template-columns:1fr 1fr}}

.lib-thumb img,.history-thumb img{object-position:50% 60%}
.monde-pin img{object-position:50% 68%}

/* Accords suggeres pendant la composition */
.pair-chips{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}
.pair-tag{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:950;text-transform:uppercase;letter-spacing:.08em;color:var(--cobalt)}
.pair-chip{border:2px dashed var(--ink);background:var(--paper);color:var(--ink);border-radius:999px;padding:6px 11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:900;cursor:pointer;transition:transform .16s ease}
.pair-chip:hover{background:var(--lime);border-style:solid;box-shadow:2px 2px 0 var(--ink);transform:translateY(-1px)}

/* Suivi: cartes suggestions photo, anneau colore, etat vide, recents vignettes */
.day-summary{flex-wrap:wrap}
.ds-cards{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(190px,240px);gap:12px;overflow-x:auto;padding:10px 2px 6px;scroll-snap-type:x proximity}
.ds-card{scroll-snap-align:start;display:flex;flex-direction:column;border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);overflow:hidden;text-decoration:none;color:var(--ink);transition:transform .16s ease}
.ds-card:hover{transform:translateY(-2px)}
.ds-card img{width:100%;aspect-ratio:16/10;object-fit:cover;border-bottom:2px solid var(--ink)}
.ds-card .ds-body{display:flex;flex-wrap:wrap;gap:5px;align-content:start;padding:10px 11px 12px}
.ds-card b{display:block;width:100%;font-size:14.5px;line-height:1.15;letter-spacing:-.02em}
.ds-card .ds-meta{width:100%;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;font-weight:900}
.ds-card em{font-style:normal;border:2px solid var(--ink);border-radius:999px;background:var(--lime);padding:3px 7px;font-size:10px;font-weight:950;text-transform:uppercase;letter-spacing:.04em}
.day-complement{margin:4px 0 2px}
.dc-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:0 0 10px}
.dc-head b{font-size:16px;letter-spacing:-.02em}
.dc-head small{color:var(--muted);font-weight:850;font-size:12px;white-space:nowrap}
.dc-rail{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(178px,214px);gap:12px;overflow-x:auto;padding:2px 2px 8px;scroll-snap-type:x proximity;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.dc-rail::-webkit-scrollbar{display:none}
.dc-card{scroll-snap-align:start;display:flex;flex-direction:column;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);overflow:hidden;text-decoration:none;color:var(--ink);transition:transform .16s ease}
.dc-card:hover{transform:translateY(-2px)}
.dc-card img{width:100%;aspect-ratio:16/10;object-fit:cover;border-bottom:2px solid var(--ink)}
.dc-body{display:flex;flex-wrap:wrap;gap:5px;align-content:start;padding:9px 10px 11px}
.dc-card b{display:block;width:100%;font-size:14px;line-height:1.15;letter-spacing:-.02em}
.dc-kcal{width:100%;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;font-weight:900}
.dc-fill{font-style:normal;border:2px solid var(--ink);border-radius:999px;background:var(--lime);padding:3px 7px;font-size:10px;font-weight:950;letter-spacing:.02em}
.dc-cta{background:var(--lime);justify-content:center;min-height:120px}
.dc-cta:hover{transform:translateY(-2px)}
.dc-cta-body{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px 12px;text-align:center}
.dc-cta-ic{display:grid;place-items:center;width:38px;height:38px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);box-shadow:2px 2px 0 var(--ink)}
.dc-cta-ic svg{width:20px;height:20px}
.dc-cta b{font-size:13.5px;line-height:1.15;letter-spacing:-.02em}
.ct-banner{display:flex;flex-wrap:wrap;align-items:center;gap:8px;border:2px solid var(--ink);border-radius:16px;background:var(--lime);box-shadow:3px 3px 0 var(--ink);padding:10px 12px;margin:0 0 14px}
.ct-title{font-weight:950;letter-spacing:-.02em;font-size:13px}
.ct-chips{display:flex;flex-wrap:wrap;gap:6px}
.ct-chip{font-style:normal;display:inline-flex;align-items:center;gap:5px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);padding:3px 5px 3px 9px;font-size:11px;font-weight:900}
.ct-x{all:unset;cursor:pointer;display:grid;place-items:center;width:16px;height:16px;border-radius:999px;background:var(--ink);color:var(--bone);font-size:12px;line-height:1}
.ct-x:focus-visible{outline:3px solid var(--cobalt);outline-offset:2px}
.li-banner{background:var(--paper)}
.li-fridge{margin-left:auto;background:var(--lime);white-space:nowrap}
@media(max-width:640px){.li-banner{align-items:flex-start}.li-banner .ct-title{width:100%}.li-fridge{width:100%;margin-left:0;justify-content:center}.lv-list .lib-gen-inner{grid-template-columns:44px minmax(0,1fr);grid-template-areas:"plus title" "plus meta"}.lv-list .lib-gen-inner>span:last-child{white-space:normal}}
.ct-met{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 2px}
.ct-met-chip{font-style:normal;border:2px solid var(--ink);border-radius:999px;background:var(--lime);padding:3px 9px;font-size:11px;font-weight:950;letter-spacing:.01em;box-shadow:2px 2px 0 var(--ink)}
/* Le digest du lundi n'est plus une carte: le detail vit dans le pane Bilan, il ne reste qu'une
   banniere d'une ligne qui y pousse (les regles .wk-card/.wk-list/.wk-more sont parties avec elle). */
.weekly-recap{margin:0 0 14px;max-width:560px}
.bs-nudge{display:flex;align-items:center;gap:10px;padding:11px 12px}
.bs-nudge p{margin:0;font-size:13px;font-weight:800;line-height:1.3}
.wk-x{border:0;background:none;color:var(--muted);font-size:19px;line-height:1;font-weight:900;cursor:pointer;padding:0 2px;flex:0 0 auto}
.wk-cta{flex:0 0 auto;margin-left:auto;border:2px solid var(--ink);border-radius:var(--r-pill);background:var(--lime);color:var(--ink);font-weight:950;font-size:12px;padding:6px 12px;text-decoration:none;box-shadow:var(--sh-int);white-space:nowrap}
.wk-cta:hover{transform:translateY(-2px)}
/* Coach quotidien: carte DA Umay, marqueur « Coach » cobalt, dismissible par jour */
.coach-card{margin:0 0 14px}
.cc-card{border:2px solid var(--ink);border-radius:18px;background:var(--cobalt-soft);box-shadow:var(--sh-card);padding:14px 15px;max-width:560px}
.cc-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 8px}
.cc-kicker{display:inline-flex;background:var(--cobalt);color:#fff;border:2px solid var(--ink);border-radius:999px;padding:5px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:950;text-transform:uppercase;letter-spacing:.08em;box-shadow:var(--sh-int)}
.cc-x{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);width:30px;height:30px;font-size:18px;line-height:1;font-weight:950;cursor:pointer;box-shadow:var(--sh-int);flex:0 0 auto}
.cc-title{display:block;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;letter-spacing:0.02em;font-size:22px;line-height:.98;margin:2px 0 6px}
.cc-body{margin:0;line-height:1.4;font-weight:750;color:rgba(21,19,15,.84)}
/* Chat coach (admin, en test): point d'entree discret + panneau multi-conversations, DA Umay.
   Prefixes .coach-chat-* / .cchat-* pour ne PAS collisionner le namespace .cc-* (carte collection). */
.coach-chat-entry{margin:0 0 14px}
.coach-chat-open{display:inline-flex;align-items:center;gap:8px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;font-size:13px;padding:8px 14px;cursor:pointer;box-shadow:var(--sh-int)}
.coach-chat-open svg{width:17px;height:17px}
.coach-chat-open:hover{transform:translateY(-1px);background:var(--cobalt-soft)}
/* Au-dessus des FAB flottants du Suivi (gooey z61, more-sheet z59) et du logger (z70): le chat est
   plein ecran sur mobile, son input ne doit jamais passer sous ces chromes. */
#coachChatModal{z-index:72}
.coach-chat-card{width:min(940px,calc(100vw - 24px));height:min(86vh,760px);padding:0;display:flex;flex-direction:column;overflow:hidden}
.coach-chat-card .modal-head{padding:16px 18px;margin:0;border-bottom:2px solid var(--ink)}
.cchat-body{flex:1;display:flex;min-height:0}
.cchat-side{width:230px;flex:0 0 auto;border-right:2px solid var(--ink);display:flex;flex-direction:column;background:rgba(235,226,207,.35);min-height:0}
.cchat-new{margin:12px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:950;padding:9px 12px;cursor:pointer;box-shadow:var(--sh-int)}
.cchat-list{flex:1;overflow-y:auto;padding:0 10px 12px;display:grid;gap:6px;align-content:start}
.cchat-conv{text-align:left;border:2px solid var(--ink);border-radius:12px;background:var(--paper);color:var(--ink);font-weight:800;font-size:13px;padding:9px 10px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:var(--sh-int);flex:1;min-width:0}
.cchat-conv.active{background:var(--cobalt);color:#fff}
.cchat-row{position:relative;display:flex;align-items:center;gap:4px}
.cchat-row-tools{display:flex;align-items:center;gap:2px;flex:0 0 auto;opacity:0;transition:opacity .12s ease}
.cchat-row:hover .cchat-row-tools,.cchat-row:focus-within .cchat-row-tools{opacity:1}
@media(hover:none){.cchat-row-tools{opacity:1}}
.cchat-tool{border:2px solid var(--ink);border-radius:8px;background:var(--paper);color:var(--ink);width:26px;height:26px;flex:0 0 auto;display:grid;place-items:center;cursor:pointer;padding:0;font-weight:950;font-size:15px;line-height:1}
.cchat-tool:hover{background:var(--lime)}
.cchat-tool svg{width:13px;height:13px}
.cchat-name-edit{flex:1;min-width:0;border:2px solid var(--ink);border-radius:12px;padding:8px 9px;font:inherit;font-size:13px;font-weight:800;background:var(--paper);color:var(--ink)}
.cchat-empty-list{color:var(--muted);font-weight:750;font-size:13px;padding:8px 12px;margin:0}
.cchat-main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}
.cchat-thread{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px}
.cchat-hello{margin:auto;color:var(--muted);font-weight:800;text-align:center}
.cchat-interrupted{align-self:center;color:var(--muted);font-size:12px;font-weight:800;font-style:italic;opacity:.75;margin:2px 0}
.cchat-msg{display:flex;max-width:82%}
.cchat-msg.user{align-self:flex-end;justify-content:flex-end}
.cchat-msg.coach{align-self:flex-start}
.cchat-bubble{border:2px solid var(--ink);border-radius:16px;padding:10px 13px;line-height:1.4;font-weight:600;box-shadow:var(--sh-int);white-space:pre-wrap;word-break:break-word}
.cchat-msg.user .cchat-bubble{background:var(--cobalt);color:#fff}
.cchat-msg.coach .cchat-bubble{background:var(--paper);color:var(--ink)}
.cchat-typing .cchat-bubble{color:var(--muted);font-style:italic}
.cchat-err .cchat-bubble{border-color:var(--love);color:var(--love)}
/* Coach agentique: tour = raisonnement (sous-titres outils) + bulle coach + mini-cartes recettes */
.cchat-turn{align-self:flex-start;max-width:88%;display:flex;flex-direction:column;gap:6px}
.cchat-turn .cchat-msg{max-width:100%}
.cchat-dots{display:inline-flex;gap:5px;align-items:center;padding:2px 2px}
.cchat-dots i{width:7px;height:7px;border-radius:50%;background:var(--ink);display:inline-block;opacity:.45}
.cchat-reason{margin:0}
.cchat-reason>summary{cursor:pointer;list-style:none;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.05em;color:var(--cobalt);padding:2px 0}
.cchat-reason>summary::-webkit-details-marker{display:none}
.cchat-subs{display:flex;flex-direction:column;gap:5px;padding:2px 0}
.cchat-sub{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:750;color:var(--muted);opacity:0}
.cchat-sub.in{opacity:1}
.cchat-sub-ic{width:15px;height:15px;flex:0 0 auto;border:2px solid var(--muted);border-radius:50%;position:relative}
.cchat-sub.done{color:var(--ink)}
.cchat-sub.done .cchat-sub-ic{background:var(--lime);border-color:var(--ink)}
.cchat-sub.done .cchat-sub-ic:after{content:"";position:absolute;left:3.5px;top:.5px;width:4px;height:8px;border:solid var(--ink);border-width:0 2px 2px 0;transform:rotate(45deg)}
.cchat-cards{display:flex;flex-wrap:wrap;gap:8px;margin-top:2px}
.cchat-card{display:flex;flex-direction:column;width:132px;border:2px solid var(--ink);border-radius:14px;overflow:hidden;background:var(--paper);box-shadow:var(--sh-int);text-decoration:none;color:var(--ink)}
.cchat-card-img{display:block;width:100%;height:82px;background:var(--soft) center/cover no-repeat}
.cchat-card-img.no-img{background:linear-gradient(135deg,var(--bone),var(--soft))}
.cchat-card b{font-size:12.5px;line-height:1.2;padding:7px 8px 2px;letter-spacing:-.01em}
.cchat-card span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;font-weight:800;color:var(--muted);padding:0 8px 8px}
@media(prefers-reduced-motion:no-preference){
  .cchat-dots i{animation:cchatDot 1s infinite ease-in-out}
  .cchat-dots i:nth-child(2){animation-delay:.16s}
  .cchat-dots i:nth-child(3){animation-delay:.32s}
  @keyframes cchatDot{0%,80%,100%{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}
  .cchat-sub{transform:translateY(4px);transition:opacity .28s ease,transform .28s ease}
  .cchat-sub.in{transform:none}
  .cchat-card{opacity:0;animation:cchatCardIn .34s ease forwards}
  @keyframes cchatCardIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  .cchat-card{transition:transform .16s ease}
  .cchat-card:hover{transform:translateY(-2px)}
}
.cchat-form{border-top:2px solid var(--ink);padding:10px;display:flex;gap:8px;align-items:flex-end;background:var(--paper)}
.cchat-form textarea{flex:1;resize:none;border:2px solid var(--ink);border-radius:14px;padding:10px 12px;font:inherit;line-height:1.35;max-height:140px;box-shadow:var(--sh-int)}
.cchat-send{flex:0 0 auto;width:44px;height:44px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);cursor:pointer;box-shadow:var(--sh-int);display:grid;place-items:center}
.cchat-send svg{width:20px;height:20px}
.cchat-send:hover{transform:translateY(-1px)}
@media(max-width:640px){
  #coachChatModal{padding:0}
  .coach-chat-card{width:100vw;height:100dvh;max-height:100dvh;border-radius:0;border-width:0}
  .cchat-body{flex-direction:column}
  .cchat-side{width:auto;flex:0 0 auto;border-right:0;border-bottom:2px solid var(--ink);flex-direction:row;align-items:center;overflow-x:auto;gap:8px;padding:0}
  .cchat-new{margin:8px;flex:0 0 auto}
  .cchat-list{grid-auto-flow:column;grid-auto-columns:minmax(130px,max-content);overflow-x:auto;overflow-y:hidden;padding:8px 8px 8px 0;align-content:center}
  .cchat-msg{max-width:90%}
}
.kcal-ring{background:conic-gradient(var(--ring-c,var(--lime)) calc(var(--pct)*1%),var(--soft) 0)}
.kcal-ring.warn{--ring-c:#ff8a00}
.kcal-ring.over{--ring-c:var(--red)}
.kcal-ring.empty{background:var(--paper);border-style:dashed}
.macro-bar.p i{--fill:var(--cobalt)}
.macro-bar.g i{--fill:#ff8a00}
.macro-bar.l i{--fill:#c05dff}
.macro-bar.f i{--fill:#2f8f5b}  /* fibres: vert sombre, distinct des macros (cobalt/orange/violet) */
.day-kick{width:100%;margin-top:12px;border:2px dashed var(--ink);border-radius:18px;background:rgba(201,255,59,.14);padding:14px;display:grid;gap:10px}
.day-kick p{margin:0;font-weight:950;letter-spacing:-.02em}
.kick-btns{display:flex;flex-wrap:wrap;gap:8px}
.kick-btns button{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-weight:950;padding:9px 13px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.frequent-chip{display:inline-flex;align-items:center;gap:6px}
.frequent-chip img{width:22px;height:22px;border-radius:6px;object-fit:cover;border:1px solid var(--ink);flex:0 0 auto}
.frequent-chip i{font-style:normal;font-size:15px;line-height:1}

/* Precision d'ingredient (morceau, variete) via la chip */
.chip .chip-main i{font-style:normal;color:rgba(21,19,15,.62);font-weight:900}
.chips-hint{width:100%;color:var(--muted);font-weight:850;font-size:11px}
.chip-detail{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px;border:2px dashed var(--ink);border-radius:16px;background:rgba(255,250,240,.85);padding:10px 12px}
.chip-detail b{font-size:13px}
.chip-detail input{flex:1;min-width:150px;width:auto;padding:8px 10px;border-radius:12px}
.chip-detail .cd-pick{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-weight:900;font-size:12px;padding:6px 10px;cursor:pointer}
.chip-detail .cd-pick:hover{background:var(--lime)}
.chip-detail .cd-ok{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-weight:950;padding:6px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.chip-detail .cd-clear{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-weight:900;padding:6px 10px;cursor:pointer}

/* Page de partage: header leger DA actuelle */
.share-top{display:flex;align-items:center;gap:18px;padding:18px 4px 8px}
.share-brand img{width:86px;height:auto;display:block;filter:drop-shadow(3px 3px 0 rgba(21,19,15,.25))}
.share-intro{flex:1;min-width:0;display:grid;gap:6px}
.share-hidden{margin:0;font-size:0;line-height:0;position:absolute;left:-9999px}
.share-intro:before{content:var(--share-kicker,"Recette partagée");display:inline-block;justify-self:start;border:2px solid var(--ink);border-radius:999px;background:var(--lime);padding:6px 11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:950;text-transform:uppercase;letter-spacing:.07em;box-shadow:2px 2px 0 var(--ink)}
.share-intro p{margin:0;color:var(--muted);font-weight:850}
.share-cta{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:950;padding:11px 18px;text-decoration:none;box-shadow:3px 3px 0 var(--ink);transition:transform .16s ease;white-space:nowrap}
.share-cta:hover{transform:translateY(-2px)}
@media(max-width:700px){.share-top{flex-wrap:wrap}.share-brand img{width:60px}.share-cta{order:3}}

/* Badge de rang Top 50 */
.lib-rank{position:absolute;top:8px;left:8px;z-index:3;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:var(--lime);color:var(--ink);font-weight:950;font-size:13px;border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink)}

.cb-note{flex-basis:100%;color:var(--muted);font-weight:850;font-size:12px}
.cb-note a{color:var(--cobalt);font-weight:950}

/* Logo nav detoure + hover anime */
.guest-nav .mark{background:none;border:none;box-shadow:none;padding:0;border-radius:0}
.guest-nav .mark img,.guest-nav .mark video{width:64px;height:auto;display:block;filter:drop-shadow(2px 2px 0 rgba(21,19,15,.25))}
@media(max-width:960px){.guest-nav .mark img,.guest-nav .mark video{width:48px}}

/* Rythme vertical unifie */
.view>.panel{margin-top:var(--sp-block)}
.view>.section-head:first-child,.view>.panel:first-child{margin-top:0}

.tag-pill.tag-edit-btn{border-style:dashed;background:var(--paper);cursor:pointer}
.classif-nutri small{font-size:12px;font-weight:900;color:var(--muted)}

/* budget + nutrition: grammaire unifiee */
.budget-head strong,.nutrition-head strong{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.stat-rows{list-style:none;margin:0;padding:0;display:grid}
.stat-rows li{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:7px 0;border-bottom:1px dashed var(--line)}
.stat-rows li:last-child{border-bottom:0}
.stat-rows b{font-weight:800;font-size:14px}
.stat-rows span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:900;white-space:nowrap;color:var(--ink)}
.stat-pills{display:flex;flex-wrap:wrap;gap:6px}
.stat-pill{font-style:normal;display:inline-flex;align-items:center;border:2px solid var(--ink);border-radius:999px;padding:5px 10px;font-size:12px;font-weight:900;letter-spacing:-.01em;line-height:1.15;background:var(--lime);color:var(--ink)}
.stat-pill.bad{background:rgba(230,62,17,.1);border-color:var(--red);color:var(--red)}
.stat-fold-body summary{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);list-style:none;display:flex;align-items:center;gap:8px;cursor:pointer}
.stat-fold-body summary::-webkit-details-marker{display:none}
.stat-fold-body summary::before{content:"+";display:grid;place-items:center;width:18px;height:18px;border:2px solid currentColor;border-radius:6px;font-size:12px;line-height:1;flex:0 0 auto}
.stat-fold-body details[open]>summary::before{content:"\2013"}
.stat-fold-body summary:hover{color:var(--ink)}
.micros-details{border:0;background:transparent;border-radius:0;padding:8px 0 0;margin:0}
.stat-note{margin:2px 0 0;color:var(--muted);font-size:12px;font-weight:750;line-height:1.5}

/* planning: drag & drop */
.plan-slot.filled{cursor:grab}
.plan-slot.filled:active{cursor:grabbing}
.plan-slot.dragging{opacity:.45}
.plan-slot.drop-hint{outline:3px dashed var(--cobalt);outline-offset:3px;border-radius:var(--r-sm)}

/* fiche: panier de depart */
.basket-src{margin-top:10px;border-top:1px dashed var(--line);padding-top:8px}
.basket-src summary{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);list-style:none;display:flex;align-items:center;gap:8px;cursor:pointer}
.basket-src summary::-webkit-details-marker{display:none}
.basket-src summary::before{content:"+";display:grid;place-items:center;width:18px;height:18px;border:2px solid currentColor;border-radius:6px;font-size:12px;line-height:1;flex:0 0 auto}
.basket-src[open]>summary::before{content:"\2013"}
.basket-src summary:hover{color:var(--ink)}
.basket-src .classif-pills{margin-top:8px}

/* remix: autocomplete catalogue */
.rmx-combo{position:relative}
.rmx-combo .combo-list{color:var(--ink)}

/* partage semaine: vues bibliotheque */
.week-share .week-toolbar{display:flex;justify-content:flex-end;margin-top:18px}
.week-meal .cc-details{margin-top:8px}
.week-meal .cc-details summary{cursor:pointer;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.week-meal .cc-details summary:hover{color:var(--ink)}
.week-meal .cc-full h3{font-size:18px;margin:12px 0 6px}
.lv-list .week-meal .cc-details{display:none}

.week-share .share-intro{--share-kicker:"Semaine partagée"}

/* remix: apercu deterministe */
.rmx-preview{display:flex;flex-direction:column;gap:5px;margin:10px 0;border:1px dashed rgba(255,255,255,.28);border-radius:12px;padding:10px 12px}
.rmx-preview .rmx-hint-dark{margin:0 0 3px}
.rmxp-row{font-size:13px;font-weight:800;color:#e8e4da}
.rmxp-row b.up{color:#ffb454}
.rmxp-row b.down{color:#c9ff3b}
.rmxp-flag{font-size:12px;font-weight:900;color:#ff8a70}
.rmxp-pair{font-size:12px;font-weight:800;color:#c9ff3b}

/* fiche: badges materiel */
.equip-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:9px}
.equip-badge{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--ink);border-radius:12px;background:var(--paper);padding:5px 10px}
.equip-badge svg{width:16px;height:16px;flex:0 0 auto}
.equip-badge i{font-style:normal;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.04em}

/* nav mobile: bouton Plus + bottom sheet */
.tabbar-more{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:5px 0;border:0;background:none;color:var(--muted);font-size:10px;font-weight:900;letter-spacing:.01em;cursor:pointer;font-family:inherit}
.tabbar-more svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:2}
.tabbar-more.active{color:var(--ink)}
.more-sheet{position:fixed;inset:0;z-index:59;background:rgba(21,19,15,.45);backdrop-filter:blur(5px)}
.more-sheet-panel{position:absolute;left:10px;right:10px;bottom:84px;max-width:420px;margin:0 auto;max-height:min(70vh,560px);overflow:auto;border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:8px;display:grid;gap:2px}
@media(min-width:961px){
  /* pas de tabbar ici: le sheet devient une carte centree, vrai overlay.
     Scope a #moreSheet: #exportModal / #plModal partagent .more-sheet-panel mais
     sont ancres au bouton par leur JS (left/top inline) sans reset du transform. */
  #moreSheet .more-sheet-panel{left:50%;right:auto;bottom:auto;top:50%;transform:translate(-50%,-50%);width:min(420px,calc(100vw - 48px));box-shadow:var(--shadow)}
}
.more-sheet-panel a{display:flex;align-items:center;gap:12px;padding:13px 12px;border-radius:12px;text-decoration:none;color:var(--ink);font-weight:900;font-size:15px}
.more-sheet-panel a svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;flex:0 0 auto}
.more-sheet-panel a.active{background:var(--lime)}
/* pages contenu (guide + blog) */
.guide-page .share-intro{--share-kicker:"Le guide Umay"}
.blog-page .share-intro{--share-kicker:"Le blog Umay"}
.content-hub{margin-top:10px}
.content-hub .lib-body small{display:block;margin-top:5px;color:var(--muted);font-size:12px;font-weight:750;line-height:1.4}
.content-more{margin:22px 0 8px}
.content-more a{color:var(--cobalt);font-weight:900;text-decoration:none}
/* article lineaire: carte editoriale (lettrine, barres de section, filigrane) */
.content-body{--pad:clamp(20px,4.5vw,52px);max-width:800px;margin:14px auto 34px;background:var(--paper);border:2px solid var(--ink);border-radius:20px;box-shadow:var(--shadow);padding:var(--pad);position:relative;overflow:hidden}
.content-body::after{content:"味";position:absolute;right:-34px;bottom:-70px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:250px;line-height:1;color:rgba(21,19,15,.05);letter-spacing:-0.04em;pointer-events:none}
.content-cover{width:100%;border-radius:14px;border:2px solid var(--ink);margin-bottom:18px}
.content-body h2{font-size:clamp(30px,4.4vw,46px);line-height:.92;letter-spacing:-.03em;margin:46px 0 16px;padding-top:18px;border-top:2px solid var(--ink);position:relative}
.content-body h2::before{content:"";position:absolute;top:-2px;left:0;width:62px;height:11px;background:var(--lime);border:2px solid var(--ink)}
.content-body h2:first-of-type{margin-top:2px}
.content-body h3{font-size:22px;margin:26px 0 8px}
.content-body p{line-height:1.68;margin:12px 0;max-width:66ch;font-size:16.5px}
.content-body>p:first-of-type:not(.content-more)::first-letter{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:74px;line-height:.74;float:left;padding:8px 12px 0 0;color:var(--ink);text-shadow:5px 5px 0 var(--lime)}
.content-body p b{font-weight:800;background:linear-gradient(0deg,var(--lime) 0 .36em,transparent .36em);padding:0 2px;box-decoration-break:clone;-webkit-box-decoration-break:clone}
.content-body ul{list-style:none;padding-left:4px;max-width:66ch;margin:14px 0}
.content-body ul li{position:relative;padding-left:26px;margin:9px 0;line-height:1.55}
.content-body ul li::before{content:"";position:absolute;left:0;top:.42em;width:10px;height:10px;background:var(--lime);border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink)}
.content-body ol{line-height:1.6;padding-left:26px;max-width:66ch}
.content-body ol li::marker{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:900;color:var(--cobalt)}
.content-body>img{max-width:100%;border-radius:14px;border:2px solid var(--ink);box-shadow:5px 5px 0 var(--ink);margin:10px 0;display:block}
.content-body p img{max-width:100%;border-radius:12px;border:2px solid var(--ink)}
.content-body video{max-width:100%;border-radius:14px;border:2px solid var(--ink);display:block}
/* citation lineaire: bandeau encre pleine largeur, guillemet lime geant */
.content-body .art-quote{position:relative;margin:40px calc(-1 * var(--pad,0px));padding:clamp(26px,4vw,44px) var(--pad,24px);background:var(--ink);color:var(--bone);display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 20px;overflow:hidden}
.content-body .art-quote::before{content:"«";font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(74px,10vw,120px);line-height:.62;color:var(--lime);letter-spacing:-0.02em;margin-top:4px}
.content-body .art-quote::after{content:"旨";position:absolute;right:-14px;bottom:-46px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:150px;line-height:1;color:rgba(244,238,223,.07);letter-spacing:-0.04em;pointer-events:none}
.content-body .art-quote .aq-text{position:relative;display:block;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-weight:400;text-transform:uppercase;font-size:clamp(24px,3.2vw,34px);line-height:1.05;letter-spacing:0.02em;text-wrap:balance;max-width:26ch}
.content-body .art-quote .aq-text b{background:none;padding:0;color:var(--lime);font-weight:400}
.content-body .content-more{border-top:2px dashed var(--line);padding-top:20px;margin:34px 0 0;position:relative}
.content-body .content-more a{display:inline-block;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;padding:10px 16px;box-shadow:3px 3px 0 var(--ink);transition:transform .16s ease}
.content-body .content-more a:hover{transform:translateY(-2px)}
@media(max-width:640px){
  .content-body{border-radius:16px;box-shadow:4px 4px 0 var(--ink)}
  .content-body>p:first-of-type::first-letter{font-size:58px;padding:6px 10px 0 0}
  .content-body .art-quote{grid-template-columns:1fr;gap:8px;padding-top:22px;padding-bottom:26px}
  .content-body .art-quote::before{font-size:56px;line-height:.62}
}
/* bloc recette (CMS): carte large */
.art-recipe{display:flex;align-items:stretch;gap:0;margin:20px 0;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);overflow:hidden;text-decoration:none;color:var(--ink);transition:transform .16s ease}
.art-recipe:hover{transform:translateY(-2px)}
.art-recipe-img{flex:0 0 160px;width:160px;align-self:stretch;object-fit:cover;border:0;border-right:2px solid var(--ink);border-radius:0;margin:0}
.art-recipe-body{display:flex;flex-direction:column;gap:8px;justify-content:center;padding:16px 18px;min-width:0}
.art-recipe-body b{font-size:19px;line-height:1.2;letter-spacing:-.01em}
.art-recipe-meta{font-size:13px;font-weight:800;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.art-recipe-cta{align-self:flex-start;margin-top:2px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:900;font-size:13px;padding:7px 13px;box-shadow:2px 2px 0 var(--ink)}
@media(max-width:640px){.art-recipe{flex-direction:column}.art-recipe-img{width:100%;flex-basis:auto;height:180px;border-right:0;border-bottom:2px solid var(--ink)}}

/* fiches guide: spreads cookbook */
.book-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:16px 0 14px}
.book-back{color:var(--cobalt);font-weight:900;text-decoration:none}
.bk-ctl{display:flex;align-items:center;gap:8px}
.bk-ctl button{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-weight:900;padding:7px 13px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);font-family:inherit;font-size:13px}
.bk-ctl button:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
#bkNav{display:inline-flex;align-items:center;gap:8px}
#bkNav.hidden{display:none}
#bkPage{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:900;color:var(--muted);min-width:44px;text-align:center}
.spreads{display:grid;gap:18px;margin-bottom:30px}
.spread{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);border:2px solid var(--ink);border-radius:20px;overflow:hidden;background:var(--paper);box-shadow:3px 3px 0 var(--ink);min-height:360px}
.spread-fig{margin:0;background:#f7f0df;border-right:2px solid var(--ink);display:grid;place-items:center;position:relative;overflow:hidden}
.spread-fig img{width:100%;height:100%;object-fit:cover}
.spread-num{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(90px,14vw,150px);line-height:1;color:rgba(21,19,15,.1);letter-spacing:0em}
.spread-idx{position:absolute;top:14px;left:18px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:23px;line-height:1;color:rgba(21,19,15,.26);letter-spacing:0.01em;z-index:1}
.spread-quote{margin:0;align-self:center;padding:clamp(26px,3.6vw,44px);font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-weight:400;text-transform:uppercase;font-size:clamp(23px,2.9vw,38px);line-height:1.04;letter-spacing:0.02em;color:var(--ink);text-wrap:balance}
.spread-stat{align-self:center;text-align:center;padding:clamp(20px,3vw,38px)}
.spread-stat b{display:block;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-weight:400;font-size:clamp(70px,11vw,126px);line-height:.86;letter-spacing:0em;color:var(--ink)}
.spread-stat span{display:block;margin-top:10px;font-weight:800;font-size:14px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.spread-term{align-self:center;text-align:center;padding:clamp(24px,3.4vw,44px);font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-weight:400;text-transform:uppercase;font-size:clamp(27px,3.6vw,48px);line-height:.99;letter-spacing:0.02em;color:var(--ink);text-wrap:balance}
.spread-fig.t1{background:#f2ead4}.spread-fig.t2{background:#e9f0dd}.spread-fig.t3{background:#f4e7de}.spread-fig.t4{background:#e5edf0}
/* layout magazine (CMS) */
.art-wide{max-width:1000px;margin:0 auto}
.mag{display:flex;flex-direction:column;gap:22px}
.mag-h{font-size:clamp(26px,3vw,38px);margin:6px 0 0}
.mag p{font-size:17px;line-height:1.62;max-width:66ch;margin:0}
.mag-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px}
.mag-grid img,.mag-grid video{width:100%;height:100%;object-fit:cover;aspect-ratio:4/3;border:2px solid var(--ink);border-radius:16px;display:block}
.mag-grid:has(>:only-child) img,.mag-grid:has(>:only-child) video{aspect-ratio:16/9}
.mag-quote{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;font-weight:400;font-size:clamp(24px,3.2vw,42px);line-height:1.04;letter-spacing:0.02em;border-left:6px solid var(--ink);padding-left:18px;margin:6px 0}
.spread-text{padding:clamp(20px,3.2vw,38px);align-self:center}
.spread-text h2{font-size:clamp(24px,2.6vw,32px);margin:0 0 10px}
.spread-text p{line-height:1.65;margin:9px 0;max-width:58ch}
.spread-text ul,.spread-text ol{line-height:1.6;padding-left:20px;max-width:58ch}
.spreads.book{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:14px;padding-bottom:10px;scrollbar-width:none}
.spreads.book::-webkit-scrollbar{display:none}
.spreads.book .spread{flex:0 0 100%;scroll-snap-align:center}
@media(max-width:820px){.spread{grid-template-columns:1fr;min-height:0}.spread-fig{border-right:0;border-bottom:2px solid var(--ink);min-height:210px}.spread-num{font-size:80px}}

/* blog livre + magazine (scopé .art-wide, meme langage que le lineaire #246; ne touche pas les fiches guide) */
.art-wide .content-cover{border-radius:20px;box-shadow:var(--shadow);margin-bottom:26px}
.art-wide .content-more{border-top:2px dashed var(--line);padding-top:20px;margin:34px 0 0}
.art-wide .content-more a{display:inline-block;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;padding:10px 16px;box-shadow:3px 3px 0 var(--ink);transition:transform .16s ease}
.art-wide .content-more a:hover{transform:translateY(-2px)}
.art-wide p b{font-weight:800;background:linear-gradient(0deg,var(--lime) 0 .36em,transparent .36em);padding:0 2px;box-decoration-break:clone;-webkit-box-decoration-break:clone}
/* livre */
.art-wide .spreads{gap:26px}
.art-wide .spread{box-shadow:var(--shadow)}
.art-wide .spread:nth-child(even){grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr)}
.art-wide .spread:nth-child(even) .spread-fig{order:2;border-right:0;border-left:2px solid var(--ink)}
.art-wide .spread-text h2{font-size:clamp(28px,3.4vw,40px);line-height:.92;letter-spacing:-.03em;margin:0 0 14px;padding-top:16px;border-top:2px solid var(--ink);position:relative}
.art-wide .spread-text h2::before{content:"";position:absolute;top:-2px;left:0;width:54px;height:10px;background:var(--lime);border:2px solid var(--ink)}
.art-wide .spread-text ul{list-style:none;padding-left:4px}
.art-wide .spread-text ul li{position:relative;padding-left:26px;margin:9px 0;line-height:1.55}
.art-wide .spread-text ul li::before{content:"";position:absolute;left:0;top:.42em;width:10px;height:10px;background:var(--lime);border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink)}
.art-wide .spread-idx{top:0;left:0;padding:9px 12px 7px;background:var(--lime);color:var(--ink);border:2px solid var(--ink);border-top:0;border-left:0;border-radius:0 0 12px 0;box-shadow:3px 3px 0 rgba(21,19,15,.18);font-size:20px}
.art-wide .spread-fig.spread-typo:has(.spread-quote){background:var(--ink)}
.art-wide .spread-fig.spread-typo:has(.spread-quote)::after{content:"旨";position:absolute;right:-16px;bottom:-48px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:160px;line-height:1;color:rgba(244,238,223,.07);letter-spacing:-0.04em;pointer-events:none}
.art-wide .spread-fig.spread-typo:has(.spread-quote) .spread-idx{box-shadow:3px 3px 0 rgba(201,255,59,.32)}
.art-wide .spread-quote{color:var(--bone);position:relative;padding-top:clamp(48px,6vw,72px);quotes:none}
.art-wide .spread-quote b{color:var(--lime);font-weight:400}
.art-wide .spread-quote::before{content:"«";display:block;font-size:clamp(64px,8vw,96px);line-height:.6;color:var(--lime);letter-spacing:-.06em;margin-bottom:14px}
.art-wide .spread-fig.spread-typo:has(.spread-stat){background:var(--paper)}
.art-wide .spread-stat b{text-shadow:6px 6px 0 var(--lime)}
.art-wide .spread-stat span{color:var(--ink);border:2px solid var(--ink);background:var(--lime);display:inline-block;padding:6px 12px;box-shadow:3px 3px 0 var(--ink);margin-top:16px}
.art-wide .spread-fig.spread-typo:has(.spread-term){background:var(--lime)}
.art-wide .spread-fig.spread-typo:has(.spread-term)::after{content:"味";position:absolute;left:-14px;bottom:-52px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:160px;line-height:1;color:rgba(21,19,15,.08);letter-spacing:-0.04em;pointer-events:none}
.art-wide .spread-num{color:transparent;-webkit-text-stroke:2px rgba(21,19,15,.3);text-shadow:8px 8px 0 var(--lime)}
@media(max-width:820px){
  .art-wide .spread{box-shadow:4px 4px 0 var(--ink)}
  .art-wide .spread:nth-child(even){grid-template-columns:1fr}
  .art-wide .spread:nth-child(even) .spread-fig{order:0;border-left:0;border-bottom:2px solid var(--ink)}
  .art-wide .spread-quote{padding-top:44px}
}
/* citation secondaire dans la colonne texte (bandeau ink compact) */
.art-wide .spread-text .art-quote{position:relative;margin:18px 0;padding:16px 18px 16px 52px;background:var(--ink);color:var(--bone);border-radius:14px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-weight:400;text-transform:uppercase;font-size:18px;line-height:1.15;letter-spacing:0.03em;overflow:hidden}
.art-wide .spread-text .art-quote::before{content:"«";position:absolute;left:14px;top:10px;font-size:40px;line-height:1;color:var(--lime);letter-spacing:-.06em}
/* magazine */
.art-wide .mag{gap:24px}
.art-wide .mag-h{font-size:clamp(30px,4.4vw,46px);line-height:.92;letter-spacing:-.03em;margin:22px 0 0;padding-top:18px;border-top:2px solid var(--ink);position:relative}
.art-wide .mag-h::before{content:"";position:absolute;top:-2px;left:0;width:62px;height:11px;background:var(--lime);border:2px solid var(--ink)}
.art-wide .mag>p:first-of-type::first-letter{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:74px;line-height:.74;float:left;padding:8px 12px 0 0;color:var(--ink);text-shadow:5px 5px 0 var(--lime)}
.art-wide .mag-grid img,.art-wide .mag-grid video{border-radius:16px;box-shadow:5px 5px 0 var(--ink)}
.art-wide .mag-quote{position:relative;border-left:0;background:var(--ink);color:var(--bone);border:2px solid var(--ink);border-radius:20px;box-shadow:var(--shadow);padding:clamp(26px,4vw,44px);display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 20px;overflow:hidden;font-size:clamp(24px,3.2vw,34px);line-height:1.05;quotes:none}
.art-wide .mag-quote::before{content:"«";font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(74px,10vw,120px);line-height:.62;color:var(--lime);letter-spacing:-0.02em;margin-top:4px}
.art-wide .mag-quote::after{content:"旨";position:absolute;right:-14px;bottom:-46px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:150px;line-height:1;color:rgba(244,238,223,.07);letter-spacing:-0.04em;pointer-events:none}
.art-wide .mag-quote .aq-text{position:relative;display:block;text-wrap:balance;max-width:26ch}
.art-wide .mag-quote .aq-text b{background:none;padding:0;color:var(--lime);font-weight:400}
.art-wide .mag ul{list-style:none;padding-left:4px;max-width:66ch;margin:0}
.art-wide .mag ul li{position:relative;padding-left:26px;margin:9px 0;line-height:1.55}
.art-wide .mag ul li::before{content:"";position:absolute;left:0;top:.42em;width:10px;height:10px;background:var(--lime);border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink)}
.art-wide .mag .art-recipe{max-width:760px}
@media(max-width:640px){
  .art-wide .mag-quote{grid-template-columns:1fr;gap:8px}
  .art-wide .mag-quote::before{font-size:56px}
  .art-wide .mag>p:first-of-type::first-letter{font-size:58px;padding:6px 10px 0 0}
}

/* courses: choisir un autre commerce */
.shop-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.shop-head h3{margin:0}
.shop-pick{max-width:min(320px,100%);border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-weight:800;font-size:11.5px;padding:6px 10px;font-family:inherit;cursor:pointer}

@media(max-width:1420px){.guest-nav-links a svg{display:none}.guest-nav-links a{padding:8px 12px}}
@media(max-width:1150px){.guest-nav-links a{padding:7px 9px;font-size:11.5px}}

/* courses: select commerce dans le theme */
.shop-head .select-ui{max-width:min(340px,100%);flex:1 1 220px}
.shop-head .select-trigger{border-radius:999px;padding:7px 13px;font-size:11.5px;font-weight:800;box-shadow:none}
.shop-head .select-trigger .select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shop-head .select-list{font-size:12px}

/* rayon des commerces */
.shop-radius-line{justify-content:space-between}
.shop-radius-line .select-ui{flex:0 0 auto;min-width:120px}
.shop-radius-line .select-trigger{border-radius:999px;padding:6px 12px;font-size:12px;font-weight:800;box-shadow:none}

/* header des pages contenu: calibre editorial, pas le titre geant des partages */
.content-page .share-top{align-items:center;gap:16px;padding:20px 4px 8px;margin-bottom:6px}
.content-page .share-intro h1{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(26px,3.4vw,44px);line-height:.92;letter-spacing:0.01em;text-transform:uppercase;margin:0;font-weight:400}
.content-page .share-intro p{margin:0;color:var(--muted);font-weight:750;font-size:13.5px}
.content-page .share-brand img{width:64px}
/* pont recettes -> guide */
.gl{color:inherit;text-decoration:none;border-bottom:2px dashed var(--cobalt);padding-bottom:1px}
.gl:hover{background:rgba(201,255,59,.55);border-bottom-style:solid}
.gl::after{content:"\2197";font-size:.62em;vertical-align:super;color:var(--cobalt);margin-left:2px;font-weight:900}
a.equip-badge{text-decoration:none;color:var(--ink);transition:transform .14s ease,background .14s ease}
a.equip-badge:hover{background:var(--lime);transform:translateY(-1px)}
a.equip-badge::after{content:"\2197";font-size:10px;color:var(--cobalt);font-weight:900;margin-left:1px}

.spread-lead{font-size:17px;font-weight:750;color:var(--muted);line-height:1.55;max-width:46ch}

/* rail: covers totems */
.coll-cover{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.coll-thumb em{z-index:2}

/* intro PWA */
#appIntro{position:fixed;inset:0;z-index:9999;background:#fef7e5;display:grid;place-items:center;transition:opacity .4s ease}
#appIntro video{width:min(72vw,420px);height:auto}
#appIntro.out{opacity:0;pointer-events:none}

/* export */
.export-opt{display:flex;align-items:center;gap:12px;padding:13px 12px;border:0;background:none;border-radius:12px;color:var(--ink);font-weight:900;font-size:15px;cursor:pointer;font-family:inherit;text-align:left;width:100%}
.export-opt:hover{background:var(--lime)}
#printSheet{display:none}
@media print{
  @page{size:A4 portrait;margin:11mm}
  body>*:not(#printSheet){display:none!important}
  body{background:#fff!important}
  #printSheet{display:block!important;font-family:ui-sans-serif,-apple-system,"Segoe UI",sans-serif;color:#15130f;width:100%}
  .ps-head{display:flex;gap:7mm;align-items:flex-start;border-bottom:1.2pt solid #15130f;padding-bottom:4mm;margin-bottom:5mm}
  .ps-title{flex:1;min-width:0}
  .ps-title small{font-family:ui-monospace,Menlo,monospace;font-size:7.5pt;font-weight:700;letter-spacing:.08em;color:#7d766a}
  .ps-title h1{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:24pt;line-height:.95;letter-spacing:0.02em;text-transform:uppercase;margin:1mm 0 2mm;font-weight:400}
  .ps-desc{font-size:9pt;line-height:1.4;color:#3d3830;font-style:italic;margin:0 0 2mm}
  .ps-meta{font-family:ui-monospace,Menlo,monospace;font-size:8pt;font-weight:700;margin:0}
  .ps-photo{margin:0;flex:0 0 42mm}
  .ps-photo img{width:42mm;height:42mm;object-fit:cover;border:1.2pt solid #15130f;border-radius:3mm}
  .ps-body{display:grid;grid-template-columns:60mm 1fr;gap:7mm}
  #printSheet h2{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:12pt;text-transform:uppercase;letter-spacing:0;margin:0 0 2.5mm;font-weight:400}
  .ps-ings ul{list-style:none;margin:0;padding:0}
  .ps-ings li{font-size:9pt;line-height:1.5;padding:1mm 0;border-bottom:.4pt dashed #b9b2a4}
  .ps-ings b{font-family:ui-monospace,Menlo,monospace;font-size:8pt}
  .ps-steps ol{margin:0;padding-left:5mm}
  .ps-steps li{font-size:9.5pt;line-height:1.5;margin-bottom:2.2mm}
  .ps-foot{margin-top:5mm;padding-top:2.5mm;border-top:.6pt solid #b9b2a4;font-family:ui-monospace,Menlo,monospace;font-size:7pt;color:#7d766a}
  #printSheet.ps-compact .ps-steps li{font-size:8.5pt;margin-bottom:1.6mm;line-height:1.42}
  #printSheet.ps-compact .ps-ings li{font-size:8pt;line-height:1.4}
  #printSheet.ps-compact .ps-title h1{font-size:20pt}
  #printSheet.ps-compact .ps-photo{flex-basis:34mm}
  #printSheet.ps-compact .ps-photo img{width:34mm;height:34mm}
  #printSheet.ps-tiny .ps-steps li{font-size:7.8pt;margin-bottom:1.2mm;line-height:1.35}
  #printSheet.ps-tiny .ps-ings li{font-size:7.5pt;line-height:1.35;padding:.6mm 0}
  #printSheet.ps-tiny .ps-title h1{font-size:17pt}
  #printSheet.ps-tiny .ps-desc{display:none}
  #printSheet.ps-tiny .ps-photo{display:none}
  #printSheet.ps-tiny .ps-body{grid-template-columns:52mm 1fr;gap:5mm}
}
}

/* export: popover ancre au bouton */
.export-modal{background:rgba(21,19,15,.2);backdrop-filter:none}
.export-modal .more-sheet-panel{box-shadow:3px 3px 0 var(--ink)}

/* foyer & avatars */
.hh-avatar-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:10px 0}
.hh-avatar-big{width:56px;height:56px;border-radius:50%;border:2px solid var(--ink);object-fit:cover;background:var(--soft)}
.hh-avatar-big.empty{visibility:hidden}
.hh-avatar-picks{display:flex;gap:6px;flex-wrap:wrap}
.hh-avatar-picks img{width:38px;height:38px;border-radius:50%;border:2px solid var(--ink);cursor:pointer;transition:transform .14s ease}
.hh-avatar-picks img:hover{transform:translateY(-2px) scale(1.08)}
.hh-upload{border:2px dashed var(--ink);border-radius:999px;padding:8px 13px;font-weight:900;font-size:12px;cursor:pointer;background:var(--paper)}
.hh-box{margin-top:8px}
.hh-hint{color:var(--muted);font-weight:750;font-size:13px;margin:0 0 8px}
.hh-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.hh-actions input{border:2px solid var(--ink);border-radius:12px;padding:9px 10px;width:110px;font-weight:900;font-family:ui-monospace,Menlo,monospace;background:var(--paper)}
.hh-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.hh-code{font-family:ui-monospace,Menlo,monospace;font-weight:900;letter-spacing:.12em;border:2px solid var(--ink);border-radius:10px;padding:5px 9px;background:var(--lime)}
.hh-mini{width:auto !important;flex:none;display:inline-flex;align-items:center;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font:inherit;font-weight:900;padding:7px 14px;font-size:12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.hh-head #hhInvite{background:var(--lime)}
.frequent-chips{display:flex;flex-wrap:wrap;gap:8px;padding:4px 0}
.hh-members{display:flex;gap:12px;flex-wrap:wrap;margin-top:10px}
.hh-member{display:inline-flex;align-items:center;gap:7px;font-weight:800;font-size:13px}
.hh-avatar{border-radius:50%;border:2px solid var(--ink);object-fit:cover;display:inline-grid;place-items:center;background:var(--lime);font-weight:900}
.plan-by{position:absolute;right:6px;bottom:6px;z-index:2}
.plan-by .hh-avatar{box-shadow:1px 1px 0 var(--ink)}

/* score sante + glycemie */
.hscore{display:inline-flex;align-items:baseline;gap:1px;border:2px solid var(--ink);border-radius:10px;padding:3px 8px;font-size:15px;font-weight:900;letter-spacing:-.02em}
.hscore i{font-style:normal;font-size:10px;font-weight:900;color:rgba(21,19,15,.55)}
.hscore.hs-high{background:var(--lime)}
.hscore.hs-mid{background:#ffd66b}
.hscore.hs-low{background:rgba(230,62,17,.18);color:var(--red)}
.hs-line{font-size:13px;font-weight:800}
.hs-line b{font-weight:950}
.gi-line{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}

/* suivi: sante du jour */
.day-health{display:flex;align-items:center;gap:12px;flex-wrap:wrap;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:12px 14px;margin:12px 0}
.day-health b{font-size:13.5px;font-weight:900}

/* a propos */
.apropos-btn{width:20px;height:20px;border:2px solid var(--ink);border-radius:50%;background:var(--paper);font-weight:900;font-size:11px;cursor:pointer;line-height:1;padding:0;vertical-align:middle;color:var(--muted)}
.apropos-btn:hover{background-size:100% 100%;color:var(--ink)}
.apropos-card{width:min(560px,calc(100vw - 24px))}
.apropos-body h3{font-size:20px;margin:14px 0 6px}
.apropos-body p{line-height:1.6;font-size:14px;margin:6px 0;color:var(--ink)}
.hs-detail{color:var(--muted);font-weight:750;font-size:12px}

.gallery-count{position:absolute;right:10px;bottom:10px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-size:11px;font-weight:900;padding:4px 9px;z-index:2;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}

.gal-nav{position:absolute;top:50%;transform:translateY(-50%);width:36px;height:36px;border:2px solid var(--ink);border-radius:50%;background:var(--paper);font-weight:900;font-size:16px;cursor:pointer;z-index:2;box-shadow:2px 2px 0 var(--ink);display:grid;place-items:center}
.gal-nav:active{transform:translateY(-50%) translate(1px,1px);box-shadow:1px 1px 0 var(--ink)}
.gal-prev{left:10px}
.gal-next{right:10px}

/* collections personnelles */
.pl-row{display:flex;align-items:center;gap:4px;border-radius:12px}
.pl-row.on{background:rgba(201,255,59,.5)}
.pl-main{display:flex;align-items:center;gap:9px;flex:1;min-width:0;border:0;background:none;padding:13px 6px 13px 12px;color:var(--ink);font-weight:900;font-size:15px;cursor:pointer;font-family:inherit;text-align:left}
.pl-tool{border:0;background:none;color:var(--muted);font-weight:950;cursor:pointer;font-size:13px;padding:6px;border-radius:8px;flex:0 0 auto;font-family:inherit}
.pl-tool:hover{color:var(--ink)}
.pl-tool-del{font-size:16px}
.pl-tool-del[data-arm]{color:var(--red);font-size:12px}
.pl-name-edit{flex:1;min-width:0;border:2px solid var(--ink);border-radius:8px;padding:4px 8px;font:inherit;font-size:14px;font-weight:900;background:var(--paper);color:var(--ink)}
.pl-row .pl-check{width:17px;flex:0 0 auto;font-weight:950;color:var(--cobalt)}
.pl-row .pl-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-row.on{background:rgba(201,255,59,.5)}
.pl-empty{font-size:13px;color:var(--muted);font-weight:850;padding:6px 8px}
.pl-new{display:flex;gap:6px;margin-top:6px;padding:2px}
.pl-new input{flex:1;min-width:0;border:2px solid var(--ink);border-radius:10px;padding:8px 10px;font:inherit;background:var(--paper);color:var(--ink)}
.pl-new button{border:2px solid var(--ink);border-radius:10px;background:var(--lime);color:var(--ink);font-weight:950;padding:8px 12px;cursor:pointer;font-family:inherit}
/* D5 (18/08): --red (#ff3b30) en texte sur --paper (#fffaf0) ne fait que 3.41:1, sous le seuil
   AA de 4.5:1. Le token de marque ne bouge pas; ce lien prend un rouge assombri a l'encre
   (color-mix oklab, deja utilise plus bas), qui donne 4.90:1 sur paper. */
.pl-del-link{display:inline-flex;align-items:center;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:color-mix(in oklab, var(--red) 80%, var(--ink));font:inherit;font-size:12px;font-weight:950;padding:6px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);text-decoration:none;margin:4px 44px 0 4px;vertical-align:middle;white-space:nowrap;transition:transform .14s ease}
.pl-del-link:hover{transform:translateY(-1px)}

/* questionnaire d'accueil */
#obWizard{position:fixed;inset:0;z-index:80;background:var(--paper);display:flex;flex-direction:column}
#obWizard.hidden{display:none}
body.ob-open{overflow:hidden}
.ob-top{display:flex;align-items:center;gap:14px;padding:14px 16px;border-bottom:2px solid var(--ink);background:var(--paper)}
.ob-back,.ob-close{border:2px solid var(--ink);background:var(--paper);color:var(--ink);border-radius:999px;width:38px;height:38px;font-size:19px;font-weight:950;cursor:pointer;box-shadow:2px 2px 0 var(--ink);flex:0 0 auto}
.ob-back:disabled{opacity:.3;box-shadow:none;cursor:default}
.ob-bar{flex:1;height:10px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);overflow:hidden}
.ob-bar i{display:block;height:100%;background:var(--lime);transition:width .35s cubic-bezier(.16,1,.3,1)}
.ob-body{flex:1;overflow-y:auto;display:grid;justify-items:center;padding:26px 16px 40px}
.ob-step{width:min(560px,100%);animation:obIn .32s cubic-bezier(.16,1,.3,1) both}
@keyframes obIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
.ob-photo{height:190px;border:2px solid var(--ink);border-radius:22px;box-shadow:4px 4px 0 var(--ink);background-size:cover;background-position:center;margin-bottom:20px}
.ob-totem{width:86px;height:86px;object-fit:cover;border:2px solid var(--ink);border-radius:18px;box-shadow:3px 3px 0 var(--ink);margin-bottom:14px}
.ob-kicker{display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--cobalt);font-weight:950;text-transform:uppercase;letter-spacing:.09em;font-size:12px;margin-bottom:6px}
.ob-step h2{font-size:clamp(30px,5vw,44px);line-height:.94;margin:0 0 10px;letter-spacing:-.03em}
.ob-hint{color:var(--muted);font-weight:780;line-height:1.4;margin:0 0 16px}
.ob-controls{display:grid;gap:10px;margin:14px 0}
.ob-opt{display:grid;gap:3px;text-align:left;border:2px solid var(--ink);border-radius:18px;background:var(--paper);padding:14px 16px;cursor:pointer;font-family:inherit;box-shadow:3px 3px 0 var(--ink);transition:transform .14s ease}
.ob-opt:hover{transform:translateY(-2px)}
.ob-opt b{font-size:17px;letter-spacing:-.02em;color:var(--ink)}
.ob-opt span{color:var(--muted);font-size:13px;font-weight:800}
.ob-opt.on{background:var(--lime)}
.ob-opt.on span{color:rgba(21,19,15,.62)}
.ob-chips{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
.ob-chip{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;font-family:inherit;font-size:14px;padding:9px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.ob-chip.on{background:var(--lime)}
.ob-avatars{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0}
.ob-av{border:2px solid var(--ink);border-radius:20px;background:var(--paper);padding:0;overflow:hidden;aspect-ratio:1;cursor:pointer;box-shadow:3px 3px 0 var(--ink)}
.ob-av img{width:100%;height:100%;object-fit:cover;display:block}
.ob-av.on{outline:4px solid var(--lime)}
.ob-av-up span{display:grid;place-items:center;font-size:24px;font-weight:950;color:var(--muted);height:100%}
.ob-av-up span i{font-style:normal;font-size:11px}
.ob-scan-btn{display:flex;align-items:center;justify-content:center;gap:10px;border:2px solid var(--ink);border-radius:18px;background:var(--cobalt);color:#fff;font-weight:950;font-family:inherit;font-size:16px;padding:16px;cursor:pointer;box-shadow:3px 3px 0 var(--ink);width:100%}
.ob-you label{display:grid;gap:6px;font-weight:900;font-size:13px}
.ob-grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px}
.ob-recap{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 16px}
.ob-recap span{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-weight:900;font-size:13px;padding:7px 12px;box-shadow:2px 2px 0 var(--ink)}
.ob-foot{display:grid;gap:10px;margin-top:20px}
.ob-foot .primary{width:100%;margin:0}
.ob-skip{background:none;border:0;color:var(--muted);font:inherit;font-weight:850;text-decoration:underline;cursor:pointer;padding:6px}
.ob-relaunch{display:inline-flex;align-items:center;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font:inherit;font-size:14px;font-weight:900;padding:10px 18px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);text-decoration:none;margin:0;vertical-align:middle;transition:transform .14s ease}
.ob-relaunch:hover{transform:translateY(-1px)}
.ob-intent{display:grid;gap:12px;margin:18px 0}
.ob-intent-card{display:grid;grid-template-columns:64px 1fr;align-items:center;gap:16px;text-align:left;border:2px solid var(--ink);border-radius:20px;background:var(--paper);padding:16px 18px;cursor:pointer;font-family:inherit;box-shadow:4px 4px 0 var(--ink);transition:transform .14s ease}
.ob-intent-card:hover{transform:translateY(-2px)}
.ob-intent-card.on{background:var(--lime)}
.ob-intent-ico{position:relative;width:64px;height:64px;display:grid;place-items:center;border-radius:14px;overflow:hidden;border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink)}
.ob-intent-ico img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.ob-intent-emoji{font-size:40px;line-height:1}
.ob-intent-txt{display:grid;gap:3px;min-width:0}
.ob-intent-txt b{font-size:19px;letter-spacing:-.02em;color:var(--ink)}
.ob-intent-txt span{color:var(--muted);font-size:13px;font-weight:800}
.ob-intent-card.on .ob-intent-txt span{color:rgba(21,19,15,.62)}
@media(max-width:640px){.ob-photo{height:150px}.ob-avatars{grid-template-columns:repeat(3,minmax(0,1fr))}.ob-grid3{grid-template-columns:1fr 1fr}}

/* feedback prive + teste & approuve */
.lib-tested{position:absolute;top:8px;left:8px;background:var(--lime);border:2px solid var(--ink);border-radius:999px;font-size:11px;font-weight:950;padding:3px 8px;box-shadow:2px 2px 0 var(--ink);z-index:2;color:var(--ink)}
.tested-badge{display:inline-flex;align-items:center;background:var(--lime);border:2px solid var(--ink);border-radius:999px;font-size:13px;font-weight:950;padding:7px 12px;box-shadow:2px 2px 0 var(--ink);margin:10px 0 4px}
/* notation communautaire: murmure, pas de cri — ink plein pour les etoiles, rien de lime */
.recipe-rating{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:4px 0}
.recipe-rating.hidden{display:none}
.rr-stars{display:inline-flex;gap:2px}
.rr-star{background:none;border:0;border-radius:6px;padding:2px;cursor:pointer;color:var(--ink);font-family:inherit}
.rr-star svg{width:22px;height:22px;display:block}
.rr-star:disabled{cursor:default;opacity:.55}
.rr-num{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:14px;font-weight:900}
.rr-txt{font-size:13px;font-weight:800;color:var(--muted)}
.fb-card{width:min(640px,calc(100vw - 24px))}
.fb-approve{width:100%;border:2px solid var(--ink);border-radius:16px;background:var(--paper);color:var(--ink);font-weight:950;font-family:inherit;font-size:15px;padding:13px;cursor:pointer;box-shadow:3px 3px 0 var(--ink);margin-bottom:14px;text-align:left}
.fb-approve.on{background:var(--lime)}
.fb-fields{display:grid;gap:12px}
.fb-fields label{font-size:13px;font-weight:900}
.fb-fields textarea{font-size:14px}
.fb-admin{margin-top:18px;border-top:2px solid var(--ink);padding-top:12px;display:grid;gap:10px}
.fb-admin h3{margin:0;font-size:16px}
.fb-item{border:2px solid var(--ink);border-radius:14px;background:rgba(235,226,207,.42);padding:10px 12px}
.fb-item b{display:block;font-size:13px;margin-bottom:4px}
.fb-item p{margin:3px 0;font-size:13px;line-height:1.35}
.fb-item i{font-style:normal;color:var(--cobalt);font-weight:900}
.fb-none{color:var(--muted);font-size:13px;margin:2px 0}

/* anti-gaspi */
.leftovers-panel{margin:18px 0 22px;border:2px solid var(--ink);border-radius:24px;background:rgba(201,255,59,.18);box-shadow:var(--shadow);padding:22px}
.lo-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--cobalt);font-weight:950;text-transform:uppercase;letter-spacing:.09em;font-size:12px}
.lo-head h3{margin:2px 0 14px;font-size:26px;letter-spacing:-.03em}
.lo-sect{margin-bottom:16px}
.lo-sect h4{margin:0;font-size:16px;letter-spacing:-.02em}
.lo-sect small{display:block;color:var(--muted);font-weight:850;font-size:12px;margin:1px 0 8px}
.lo-items{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px}
.lo-item{border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:11px 13px}
.lo-item b{display:block;font-size:14px;letter-spacing:-.01em;margin-bottom:3px}
.lo-item p{margin:0;font-size:13px;line-height:1.35;color:rgba(21,19,15,.78)}
.lo-refresh{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:950;font-family:inherit;font-size:13px;padding:8px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}

/* multi-timers mode cuisine */
.cook-timers{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 18px;border-top:2px solid var(--ink);background:var(--paper)}
.ct{display:flex;align-items:center;gap:5px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);padding:5px 7px;box-shadow:2px 2px 0 var(--ink);flex:0 0 auto}
.ct-time{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:18px;font-weight:950;min-width:46px;text-align:center}
.ct.running{background:rgba(201,255,59,.45)}
.ct.paused{background:rgba(36,87,255,.12)}
.ct.finished{background:var(--red);color:#fff;animation:ctPulse 1s ease infinite}
@keyframes ctPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}
.ct-btns{display:flex;gap:3px}
.ct-btns button{border:2px solid var(--ink);border-radius:8px;background:var(--paper);color:var(--ink);font-weight:950;width:26px;height:26px;cursor:pointer;font-size:12px;line-height:1;padding:0;font-family:inherit;display:grid;place-items:center}
/* icones du minuteur en SVG (rendu identique iOS/desktop, plus d'emoji couleur) */
.ct-ic{width:14px;height:14px;fill:currentColor}
.ct-ic-line{fill:none}
.ro-ic{width:14px;height:14px;vertical-align:-2px;display:inline-block}
.ct.finished .ct-btns button{background:#fff}
.ct-add{border:2px dashed var(--ink);border-radius:14px;background:none;color:var(--ink);font-weight:950;font-family:inherit;font-size:13px;padding:9px 12px;cursor:pointer;flex:0 0 auto}
/* Sous 480 px le libelle du bouton d'ajout cede la place aux minuteurs eux-memes. */
@media(max-width:480px){.ct-add{font-size:0;padding:9px 11px}.ct-add::before{content:'+';font-size:18px;line-height:1}}
.ct-new{display:flex;gap:6px;align-items:center;flex:0 0 auto}
.ct-new button{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:950;font-family:inherit;padding:7px 10px;cursor:pointer;font-size:12px}
.ct-new input{width:64px;border:2px solid var(--ink);border-radius:10px;padding:6px 8px;font:inherit;background:var(--paper);color:var(--ink)}
@media(max-width:640px){.cook-timers{flex-wrap:nowrap;overflow-x:auto;padding:8px 12px;-webkit-overflow-scrolling:touch}}
@media(prefers-reduced-motion:reduce){.ct.finished{animation:none}}

/* evenements entre amis */
.plan-events{margin-top:26px;border-top:2px solid var(--ink);padding-top:18px}
.pe-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--cobalt);font-weight:950;text-transform:uppercase;letter-spacing:.09em;font-size:12px}
.pe-head h3{margin:2px 0 4px;font-size:24px;letter-spacing:-.03em}
#planEvents{display:grid;gap:8px;margin:12px 0}
.pe-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:12px 14px;text-decoration:none;color:var(--ink)}
.pe-row span{color:var(--muted);font-size:12px;font-weight:850;white-space:nowrap}
.pe-new{display:flex;gap:8px;flex-wrap:wrap}
.pe-new input[type=text]{flex:2;min-width:150px}
.pe-new button{flex:0 0 auto;width:auto;margin:0}
/* Date-picker maison au DS (evenements) : trigger facon input + popover month-grid, jour actif = pastille lime. */
.dp-field{position:relative;flex:1;min-width:130px}
.dp-trigger{width:100%;border:2px solid var(--ink);border-radius:16px;background:var(--paper);color:var(--ink);font:inherit;font-weight:850;text-align:left;padding:13px 14px;cursor:pointer}
.dp-pop{position:absolute;top:calc(100% + 6px);right:0;z-index:40;width:min(320px,86vw);border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:12px}
.dp-pop.up{top:auto;bottom:calc(100% + 6px)}
.dp-pop.hidden{display:none}
.dp-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.dp-head b{font-weight:950;text-transform:capitalize;letter-spacing:-.02em}
.dp-head .day-nav{width:34px;height:34px;font-size:18px}
.dp-dow,.dp-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.dp-dow span{text-align:center;font-size:11px;font-weight:900;color:var(--muted);padding:2px 0}
.dp-day{border:2px solid transparent;border-radius:12px;background:transparent;color:var(--ink);font:inherit;font-weight:850;aspect-ratio:1;min-height:36px;cursor:pointer}
.dp-day:hover{border-color:var(--ink)}
.dp-day.sel{background:var(--lime);border-color:var(--ink);box-shadow:inset 0 0 0 2px var(--ink)}
.pe-badge{display:inline-block;background:var(--lime);border:1px solid var(--ink);border-radius:999px;font-size:10px;font-weight:950;padding:1px 7px;text-decoration:none;color:var(--ink);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}
.ev-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--cobalt);font-weight:950;text-transform:uppercase;letter-spacing:.09em;font-size:12px}
.ev-head h2{font-size:clamp(34px,6vw,56px)}
.ev-meta{color:var(--muted);font-weight:850;margin:6px 0 12px}
.ev-sv{border:2px solid var(--ink);border-radius:8px;background:var(--paper);color:var(--ink);width:26px;height:26px;font-weight:950;cursor:pointer;font-family:inherit;padding:0;line-height:1}
.ev-actions{display:flex;gap:10px;flex-wrap:wrap}
.ev-actions .secondary{width:auto;margin:0}
.ev-danger{color:var(--red)}
.ev-menu{margin:20px 0 4px}
.ev-menu h4,.ev-items h4,.ev-cost h4{margin:0 0 8px;font-size:17px;letter-spacing:-.02em}
.ev-menu-list{display:flex;flex-wrap:wrap;gap:8px}
.ev-menu-item{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--ink);border-radius:999px;background:rgba(201,255,59,.3);padding:6px 12px;font-weight:900;font-size:13px}
.ev-menu-item a{color:var(--ink);text-decoration:none}
.ev-menu-del{background:none;border:0;color:var(--ink);font-weight:950;cursor:pointer;padding:0;font-size:14px}
.ev-items{margin-top:20px;display:grid;gap:8px}
.ev-item{display:flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:10px 13px}
.ev-item.claimed{background:rgba(201,255,59,.25)}
.ev-item-main{flex:1;min-width:0;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.ev-item-main b{font-size:14px}
.ev-item-main span{color:var(--muted);font-size:12px;font-weight:850}
.ev-item-main em{font-style:normal;color:var(--cobalt);font-size:12px;font-weight:900}
.ev-take{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:950;font-family:inherit;font-size:12px;padding:7px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);flex:0 0 auto}
.ev-who{font-size:12px;font-weight:950;background:var(--ink);color:var(--bone);border-radius:999px;padding:5px 10px;flex:0 0 auto;max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ev-x{border:2px solid var(--ink);border-radius:8px;background:var(--paper);color:var(--ink);width:26px;height:26px;font-weight:950;cursor:pointer;font-family:inherit;padding:0;flex:0 0 auto}
.ev-add{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.ev-add input[type=text]:first-child{flex:3;min-width:160px}
.ev-add #evAddQty{flex:1;min-width:70px}
.ev-add #evAddPrice{flex:1;min-width:70px}
.ev-add button{border:2px solid var(--ink);border-radius:14px;background:var(--lime);color:var(--ink);font-weight:950;font-family:inherit;padding:10px 16px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.ev-login-hint{margin-top:14px;color:var(--muted);font-weight:850}
.ev-login-link{background:none;border:0;color:var(--cobalt);font:inherit;font-weight:950;text-decoration:underline;cursor:pointer;padding:0}
.ev-cost{margin-top:22px;border:2px solid var(--ink);border-radius:18px;background:rgba(36,87,255,.08);padding:16px}
.ev-cost p{margin:4px 0}
.ev-bals{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.ev-bal{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-size:12px;font-weight:900;padding:5px 10px}
.ev-settle{font-weight:950;color:var(--cobalt)}
.ev-cost-note{color:var(--muted);font-size:12px;font-weight:850}

.ev-paid{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--cobalt);font-weight:950;font-family:inherit;font-size:12px;padding:3px 9px;cursor:pointer;text-decoration:underline dotted;text-underline-offset:2px}
.ev-paid-edit{width:76px;border:2px solid var(--ink);border-radius:10px;padding:4px 8px;font:inherit;font-size:13px;font-weight:900;background:var(--paper);color:var(--ink)}

.ev-bev-btn{margin-top:10px;border:2px dashed var(--ink);border-radius:999px;background:none;color:var(--ink);font-weight:950;font-family:inherit;font-size:13px;padding:8px 14px;cursor:pointer}
.ev-bev-list{display:grid;gap:8px;margin-top:10px}
.ev-bev-row{display:flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:16px;background:rgba(36,87,255,.06);padding:9px 12px}
.ev-bev-em{font-size:22px;flex:0 0 auto}
.ev-bev-txt{flex:1;min-width:0}
.ev-bev-txt b{display:block;font-size:13px}
.ev-bev-txt span{display:block;color:var(--muted);font-size:12px;font-weight:800;line-height:1.3}
.ev-bev-add{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font-weight:950;font-family:inherit;font-size:12px;padding:6px 11px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);flex:0 0 auto}
.ev-bev-add:disabled{background:var(--paper);box-shadow:none;cursor:default}

/* tuiles emoji (evenements + garde-manger) */
.ev-items-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px}
.ev-items-head h4{margin:0}
.ev-row-em{font-style:normal;font-size:17px;margin-right:2px}
.ev-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.ev-grid.big{grid-template-columns:repeat(auto-fill,minmax(215px,1fr))}
.ev-card{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:4px;border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:12px}
.ev-card.claimed{background:rgba(201,255,59,.28)}
.ev-card-em{font-size:30px;line-height:1}
.ev-grid.big .ev-card-em{font-size:46px}
.ev-card-name{font-size:13px;letter-spacing:-.01em;line-height:1.2;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ev-grid.big .ev-card-name{font-size:15px}
.ev-card-qty{color:var(--muted);font-size:11px;font-weight:850}
.ev-card-foot{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:auto;padding-top:6px}
.ev-card .ev-x-del{position:absolute;top:8px;right:8px;width:22px;height:22px;font-size:11px}
.ev-card .ev-who{max-width:100%}
.frigo-row-visual{position:relative;display:grid;place-items:center;overflow:hidden;width:48px;height:48px;border-radius:50%;flex:0 0 auto;background:var(--soft)}
.frigo-ing-fallback{font-size:30px;line-height:1}
.frigo-row-visual .frigo-ing-fallback{font-size:20px}
.frigo-row-visual img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.frigo-item{border-bottom:1px solid var(--line);background:transparent}
.frigo-item:last-child{border-bottom:0}
.frigo-row-toggle{width:100%;min-height:68px;display:grid;grid-template-columns:48px minmax(0,1fr) auto auto 22px;align-items:center;gap:12px;border:0;background:transparent;color:var(--ink);padding:10px 4px;text-align:left;cursor:pointer}
@media(hover:hover){.frigo-row-toggle:hover{background:rgba(235,226,207,.24)}}
.frigo-row-toggle:focus-visible{outline:3px solid var(--lime);outline-offset:-3px}
.frigo-row-copy{display:grid;gap:2px;min-width:0}
.frigo-row-copy b{font-size:14px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.frigo-row-copy small{font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.frigo-row-expiry{font-size:11.5px;font-weight:850;color:var(--muted);white-space:nowrap}
.frigo-row-expiry.warn{color:#a56600}
.frigo-row-expiry.bad{color:#b42318}
.frigo-level-badge{min-width:66px;border:1.5px solid var(--line);border-radius:var(--r-pill);padding:5px 9px;text-align:center;font-size:11px;font-weight:900;color:var(--muted);background:transparent}
.frigo-level-badge.lvl-plein{border-color:var(--ink);background:var(--lime);color:var(--ink)}
.frigo-level-badge.lvl-moyen{border-color:var(--ink);background:var(--lime-soft);color:var(--ink)}
.frigo-level-badge.lvl-bas{border-color:var(--red);background:var(--red-soft);color:#b42318}
.frigo-level-badge.lvl-epuise{border-color:var(--ink);background:var(--ink);color:var(--paper)}
.frigo-chevron{width:10px;height:10px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translateY(-2px);transition:transform .18s ease;color:var(--muted)}
.frigo-item.open .frigo-chevron{transform:rotate(225deg) translate(-1px,-1px)}
.frigo-item-editor{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;padding:2px 4px 14px 64px}
.frigo-control{display:grid;gap:5px}
.frigo-control>small,.frigo-date-control>span{font-size:10px;font-weight:900;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.frigo-date-control{display:grid;gap:5px;font-weight:inherit;min-width:148px}
.frigo-date-control .frigo-date{height:34px;padding:5px 8px;border:1.5px solid var(--ink);border-radius:var(--r-sm);font-size:12px}
.frigo-item-editor>.btn-ghost{width:auto;min-height:34px;margin:0;padding:6px 10px;font-size:11px;box-shadow:none}

@media(max-width:640px){
  .frigo-head-actions .primary,.frigo-head-actions .secondary,.frigo-head-actions .btn-ghost{min-height:42px;padding:9px 12px;font-size:12px}
  .frigo-now-head{align-items:flex-start;flex-direction:column;gap:6px}
  .frigo-now-head p{text-align:left}
  .frigo-now-grid{grid-auto-columns:minmax(176px,76vw)}
  .frigo-row-toggle{grid-template-columns:44px minmax(0,1fr) auto 18px;gap:9px;padding:9px 2px}
  .frigo-row-visual{width:44px;height:44px}
  .frigo-row-expiry{grid-column:2;grid-row:2;margin-top:-18px}
  .frigo-level-badge{grid-column:3;grid-row:1 / span 2;min-width:58px;padding:5px 7px}
  .frigo-chevron{grid-column:4;grid-row:1 / span 2}
  .frigo-item-editor{padding-left:55px;align-items:stretch}
  .frigo-control,.frigo-date-control{width:100%}
  .frigo-levels{flex-wrap:wrap}
}

/* meal prep: formulaire pills + cartes + timeline */
.prep-form2{display:grid;gap:14px;margin:14px 0}
.pf-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.pf-col{flex-direction:column;align-items:flex-start;gap:8px}
.pf-label{font-weight:950;font-size:13px;min-width:132px}
.pf-step{display:flex;align-items:center;gap:12px;border:2px solid var(--ink);border-radius:999px;padding:4px 8px;box-shadow:2px 2px 0 var(--ink);background:var(--paper)}
.pf-step button{border:0;background:none;font-size:18px;font-weight:950;cursor:pointer;width:28px;height:28px;color:var(--ink);font-family:inherit;padding:0}
.pf-step b{min-width:22px;text-align:center;font-size:16px}
.pf-pills{display:flex;gap:6px;flex-wrap:wrap}
.pf-pills button{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:950;font-family:inherit;font-size:13px;padding:7px 13px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.pf-pills button.on{background:var(--lime)}
.pf-chips{display:flex;gap:6px;flex-wrap:wrap}
.pf-chips button{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;font-family:inherit;font-size:12px;padding:7px 12px;cursor:pointer}
.pf-chips button.on{background:var(--lime);color:var(--ink)}
#prepConstraints{max-width:440px}
.pf-hint{margin:0;color:var(--muted);font-size:12px;font-weight:850}
.prep-recap{border:2px solid var(--ink);border-radius:14px;background:rgba(201,255,59,.32);font-weight:950;font-size:14px;padding:11px 14px;margin:4px 0 12px;box-shadow:2px 2px 0 var(--ink)}
.prep-list{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}
.prep-card{display:grid;gap:6px;text-align:left;border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:13px 15px;cursor:pointer;font-family:inherit;width:100%;transition:transform .14s ease}
.prep-card:hover{transform:translateY(-2px)}
.prep-card b{font-size:15px;letter-spacing:-.02em;line-height:1.25}
.prep-card-meta{color:var(--muted);font-size:12px;font-weight:850}
.prep-card-comps{display:flex;gap:5px;flex-wrap:wrap}
.prep-card-comps i{font-style:normal;border:1px solid var(--line);border-radius:999px;background:rgba(235,226,207,.55);font-size:11px;font-weight:900;padding:3px 8px}
.prep-session{list-style:none;padding:0;margin:12px 0 0 16px;counter-reset:ps}
.prep-session li{position:relative;counter-increment:ps;padding:9px 12px 13px 34px;border-left:3px solid var(--lime);line-height:1.4}
.prep-session li:before{content:counter(ps);position:absolute;left:-16px;top:6px;width:29px;height:29px;border:2px solid var(--ink);border-radius:50%;background:var(--lime);display:grid;place-items:center;font-weight:950;font-size:13px;box-shadow:2px 2px 0 var(--ink)}
.prep-session li:last-child{border-left-color:transparent}

/* meal prep resultat: respiration */
.prep-result #prepBack{width:auto;margin:0 0 24px;display:inline-block}
.prep-plan-head{margin-bottom:30px}
.prep-plan-head h2{font-size:clamp(28px,4.2vw,50px);line-height:1;letter-spacing:-.03em;margin:0 0 12px}
.prep-plan-head p{max-width:72ch;line-height:1.5;color:var(--muted);font-weight:780;margin:0 0 18px}
.prep-totals{display:flex;gap:12px;flex-wrap:wrap}
.prep-totals>div{border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:10px 16px;display:grid;justify-items:center;gap:1px}
.prep-totals b{font-size:20px;letter-spacing:-.02em}
.prep-totals small{color:var(--muted);font-weight:850;font-size:11px}
.prep-block{margin-top:38px}
.prep-block>h3{font-size:22px;letter-spacing:-.02em;margin:0 0 14px}
.prep-block>h3 small{color:var(--muted);font-weight:850;font-size:13px}

.prep-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.prep-actions .secondary{width:auto;margin:0}

.prep-pins{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.prep-pinned{display:contents}
.prep-pin{display:inline-flex;align-items:center;gap:7px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-weight:900;font-size:12px;padding:6px 11px;box-shadow:2px 2px 0 var(--ink)}
.prep-pin button{border:0;background:none;font-weight:950;cursor:pointer;padding:0;color:var(--ink);font-size:13px;line-height:1}
.prep-pin-add{border:2px dashed var(--ink);border-radius:999px;background:none;color:var(--ink);font-weight:950;font-family:inherit;font-size:12px;padding:7px 12px;cursor:pointer}

/* toast global d'erreur */
#umayToast{position:fixed;left:50%;bottom:86px;transform:translate(-50%,12px);background:var(--ink);color:var(--bone);border:2px solid var(--ink);border-radius:14px;box-shadow:3px 3px 0 rgba(21,19,15,.35);font-weight:900;font-size:13px;padding:11px 16px;z-index:130;opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;max-width:min(92vw,480px);text-align:center}
#umayToast.show{opacity:1;transform:translate(-50%,0)}

.recipe-tips .tips-body{flex:1;min-width:0;display:grid;gap:6px}
.recipe-tips ul{margin:0;padding-left:18px;display:grid;gap:4px;line-height:1.35}
.recipe-tips li{font-weight:800}

/* remplissage de collection + outils banniere */
.pl-banner-tools{display:inline-flex;gap:8px;align-items:center;flex-wrap:wrap;margin-left:6px;vertical-align:middle}
.pl-banner-tools .pl-del-link{margin:0}
.pl-tool-pill{display:inline-flex;align-items:center;border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font:inherit;font-size:12px;font-weight:950;padding:6px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);white-space:nowrap;transition:transform .14s ease}
.pl-tool-pill:hover{transform:translateY(-1px)}
.pl-fill{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:10px;width:100%}
.pl-fill input{flex:1;min-width:180px;max-width:340px;border:2px solid var(--ink);border-radius:12px;padding:8px 12px;font:inherit;font-size:13px;font-weight:850;background:var(--paper);color:var(--ink)}
.pl-fill-counts{display:inline-flex;gap:5px}
.pl-fill-counts button{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font:inherit;font-size:12px;font-weight:950;width:34px;height:30px;cursor:pointer}
.pl-fill-counts button.on{background:var(--lime);color:var(--ink)}
#plFillGo{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font:inherit;font-size:12px;font-weight:950;padding:7px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
/* la pastille Teste s'ecarte de la croix de suppression des cartes perso */
.lib-card:has(.lib-del) .lib-tested{left:38px}

/* visite guidee: spotlight + tooltip */
#tourBack{position:fixed;inset:0;z-index:150;display:none}
#tourBack.show{display:block}
#tourBack.dim{background:rgba(21,19,15,.6)}
#tourRing{position:fixed;z-index:151;border:3px solid var(--lime);border-radius:16px;box-shadow:0 0 0 9999px rgba(21,19,15,.6),0 0 0 6px rgba(201,255,59,.35);pointer-events:none;transition:left .3s cubic-bezier(.16,1,.3,1),top .3s cubic-bezier(.16,1,.3,1),width .3s cubic-bezier(.16,1,.3,1),height .3s cubic-bezier(.16,1,.3,1);animation:tourPulse 1.8s ease infinite}
#tourRing.hidden{display:none}
@keyframes tourPulse{0%,100%{border-color:var(--lime)}50%{border-color:rgba(201,255,59,.45)}}
@media(prefers-reduced-motion:reduce){#tourRing{animation:none}}
#tourTip{position:fixed;z-index:152;border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:4px 4px 0 var(--ink);padding:16px 18px}
#tourTip small{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--cobalt);font-weight:950;text-transform:uppercase;letter-spacing:.09em;font-size:11px;margin-bottom:4px}
#tourTip h3{margin:0 0 6px;font-size:19px;letter-spacing:-.02em}
#tourTip p{margin:0 0 12px;font-size:13px;line-height:1.45;color:rgba(21,19,15,.78);font-weight:750}
#tourTip.tour-break{width:min(420px,calc(100vw - 24px));padding:22px;text-align:left}
#tourTip.tour-break h3{font-size:26px}
.tour-btns{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.tour-go{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font:inherit;font-size:13px;font-weight:950;padding:8px 16px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.tour-skip{border:0;background:none;color:var(--muted);font:inherit;font-size:12px;font-weight:850;text-decoration:underline;cursor:pointer;padding:4px}

/* reorganisation jiggle */
#railReorderBtn{margin-right:8px}
.reorder-card{width:min(760px,calc(100vw - 24px))}
.ro-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:10px;max-height:60vh;overflow-y:auto;padding:6px}
.ro-tile{position:relative;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:8px;display:grid;gap:6px;cursor:grab;user-select:none;touch-action:none;animation:roJiggle .35s ease-in-out infinite alternate}
.ro-tile:nth-child(2n){animation-direction:alternate-reverse}
@keyframes roJiggle{from{transform:rotate(-1.1deg)}to{transform:rotate(1.1deg)}}
@media(prefers-reduced-motion:reduce){.ro-tile{animation:none}}
.ro-tile img{width:100%;height:64px;object-fit:cover;border-radius:9px;border:1px solid var(--line);pointer-events:none}
.ro-tile b{font-size:11px;line-height:1.2;letter-spacing:-.01em;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:26px}
.ro-tile.ro-drag{animation:none;transform:scale(1.07) rotate(1.5deg);box-shadow:6px 8px 0 rgba(21,19,15,.45);cursor:grabbing;background:var(--lime)}
.ro-ph{border-style:dashed;background:rgba(21,19,15,.06);box-shadow:none;animation:none}

.ro-group{margin:12px 0 6px;font-size:14px;letter-spacing:-.01em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--cobalt);text-transform:uppercase;font-size:12px;font-weight:950}

/* semaine: tous les plats alignes (titres = hauteur fixe de 2 lignes) */
.plan-slot .plan-recipe b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.25;min-height:2.5em}

.profile-filter-note{margin:2px 0 14px;color:var(--muted);font-weight:850;font-size:13px}
.profile-filter-note b{color:var(--ink)}
.profile-filter-note button{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font:inherit;font-size:12px;font-weight:950;padding:4px 11px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);margin-left:4px}

.ro-smart{margin:0 0 4px;font-size:13px;font-weight:850}
.ro-smart-hint{margin:0 0 8px;color:var(--cobalt);font-size:12px;font-weight:900}
.ro-pin-hint{margin:0 0 8px;color:var(--cobalt);font-size:12px;font-weight:900}
.ro-pin{position:absolute;top:5px;right:5px;z-index:2;width:26px;height:26px;padding:0;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-size:13px;line-height:1;cursor:pointer;opacity:.45;box-shadow:1px 1px 0 var(--ink)}
.ro-tile.ro-pinned .ro-pin{background:var(--lime);opacity:1}
.ro-grid.ro-locked{opacity:.45;pointer-events:none}
.ro-grid.ro-locked .ro-pin{display:none}

.kick-ic{width:17px;height:17px;vertical-align:-3.5px;margin-right:3px;flex:0 0 auto}
.recipe-actions button .kick-ic{width:17px;height:17px}

.pl-ic{width:14px;height:14px;margin-right:4px;flex:none}

.hf-ou{display:inline-block;margin:2px 0 0;padding:2px 8px;border:1.5px solid var(--ink);border-radius:999px;font-size:11px;font-weight:900;background:var(--paper)}

.coll-mosaic{position:absolute;inset:0;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}
.coll-mosaic img{width:100%;height:100%;object-fit:cover}
.cover-card{max-width:520px}
.cover-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:8px;max-height:60vh;overflow-y:auto;padding:4px}
.cover-opt{position:relative;aspect-ratio:1;border:2.5px solid var(--ink);border-radius:12px;overflow:hidden;padding:0;cursor:pointer;background:var(--paper);box-shadow:2px 2px 0 var(--ink)}
.cover-opt img{width:100%;height:100%;object-fit:cover;display:block}
.cover-opt.sel{outline:3px solid var(--cobalt);outline-offset:1px}
.cover-mosaic{display:flex;align-items:center;justify-content:center;font-weight:950;font-size:12px;text-align:center;line-height:1.25}

#ideaboxFab{position:fixed;left:14px;bottom:76px;z-index:60;width:40px;height:40px;border-radius:50%;border:2.5px solid var(--ink);background:var(--paper);color:var(--ink);display:flex;align-items:center;justify-content:center;box-shadow:2px 2px 0 var(--ink);cursor:grab;opacity:.82;touch-action:none;user-select:none;-webkit-user-select:none}
#ideaboxFab:active{cursor:grabbing}
#ideaboxFab.fab-settling{transition:left .3s cubic-bezier(.2,.9,.3,1),top .3s cubic-bezier(.2,.9,.3,1)}
#ideaboxFab:hover{opacity:1;transform:translateY(-1px)}
.ib-card{max-width:440px}
.ib-kinds{display:flex;gap:8px;margin:0 0 10px}
.ib-kind{border:2px solid var(--ink);border-radius:999px;background:var(--paper);padding:6px 14px;font:inherit;font-size:13px;font-weight:900;cursor:pointer}
.ib-kind.on{background:var(--lime)}
#ibMsg{width:100%;border:2px solid var(--ink);border-radius:12px;padding:10px;font:inherit;margin:0 0 10px;background:var(--paper);resize:vertical}

#gen1Banner{margin:18px auto 8px;max-width:640px;background:var(--paper);border:2.5px solid var(--ink);border-radius:18px;box-shadow:4px 4px 0 var(--ink);padding:16px 18px}
#gen1Banner .g1-head{margin:0 0 12px;font-weight:950;font-size:16px;letter-spacing:-.02em}
#gen1Banner .g1-q{margin:0 0 12px}
#gen1Banner .g1-label{display:block;font-weight:900;font-size:13px;color:var(--muted);margin:0 0 6px}
#gen1Banner .g1-chips,#gen1Banner .g1-opts{display:flex;flex-wrap:wrap;gap:8px}
#gen1Banner .g1-chip,#gen1Banner .g1-opt{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font:inherit;font-weight:900;font-size:13px;padding:8px 13px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
#gen1Banner .g1-chip.on,#gen1Banner .g1-opt.on{background:var(--lime)}
#gen1Banner .g1-foot{display:flex;gap:10px;align-items:center;margin-top:14px}
#gen1Banner .g1-save{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font:inherit;font-weight:950;font-size:14px;padding:9px 20px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
#gen1Banner .g1-later{margin-left:auto;background:none;border:0;color:var(--muted);font:inherit;font-weight:850;text-decoration:underline;cursor:pointer;padding:6px}
#umayHealthNudge{position:fixed;left:50%;transform:translateX(-50%);bottom:84px;z-index:70;background:var(--paper);border:2.5px solid var(--ink);border-radius:16px;box-shadow:3px 3px 0 var(--ink);padding:12px 14px;width:min(92vw,360px)}
#umayHealthNudge p{margin:0 0 8px;font-weight:900;font-size:14px}
#umayHealthNudge .us-btns{display:flex;gap:8px;align-items:center}
#umayHealthNudge .hn-go{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font:inherit;font-weight:900;font-size:14px;padding:6px 16px;cursor:pointer}
#umayHealthNudge .us-close{margin-left:auto;border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-size:15px;font-weight:900;padding:2px 10px;cursor:pointer}
#umaySurvey{position:fixed;left:50%;transform:translateX(-50%);bottom:84px;z-index:70;background:var(--paper);border:2.5px solid var(--ink);border-radius:16px;box-shadow:3px 3px 0 var(--ink);padding:12px 14px;width:min(92vw,360px)}
#umaySurvey p{margin:0 0 8px;font-weight:900;font-size:14px}
#umaySurvey .us-btns{display:flex;gap:8px;align-items:center}
#umaySurvey .us-btns button{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font-size:17px;padding:4px 12px;cursor:pointer}
#umaySurvey .us-btns button.on{background:var(--lime)}
#umaySurvey .us-close{margin-left:auto;font-size:15px !important;font-weight:900}
#umaySurvey textarea{width:100%;border:2px solid var(--ink);border-radius:10px;padding:8px;font:inherit;margin:8px 0 6px;background:var(--paper)}
#umaySurvey .us-send{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font:inherit;font-weight:900;padding:6px 16px;cursor:pointer}

.day-activity{margin:12px 0}
.da-card{border:2.5px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);overflow:hidden}
.da-head{display:flex;align-items:center;gap:12px;padding:12px 14px}
.da-ico{width:34px;height:34px;flex:none;color:var(--cobalt)}
.da-ico svg{width:100%;height:100%}
.da-resume{flex:1;min-width:0}
.da-resume b{display:block;font-size:15px;letter-spacing:-.02em}
.da-resume small{color:var(--muted);font-weight:800;font-size:12px}
.da-add-btn{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font:inherit;font-weight:900;font-size:13px;padding:8px 16px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);white-space:nowrap}
.da-form{border-top:2px dashed var(--ink);padding:12px 14px 6px;background:color-mix(in oklab, var(--paper) 92%, var(--lime))}
.da-line{display:flex;gap:8px;align-items:center;margin:0 0 10px}
.da-line label{font-weight:900;font-size:13px;flex:none}
.da-line input{border:2px solid var(--ink);border-radius:10px;padding:8px 10px;font:inherit;background:var(--paper);min-width:0;flex:1}
.da-line button, .da-form .da-line button{width:auto !important;flex:none;border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font:inherit;font-weight:900;font-size:13px;padding:8px 16px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.da-wide{display:block;width:100%;border:2px solid var(--ink);border-radius:10px;padding:8px 10px;font:inherit;background:var(--paper);margin:0 0 10px}
.da-chips{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 0}
.da-chip{display:inline-flex;gap:6px;align-items:center;border:2px solid var(--ink);border-radius:999px;padding:4px 10px;font-size:12px;font-weight:900;background:var(--paper)}
.da-del{border:0;background:none;font-weight:900;cursor:pointer;font-size:14px;padding:0}

.badge-card .badge-ic{width:72px;height:72px;display:flex}
.badge-card .badge-ic svg{width:100%;height:100%}
.badge-card .badge-ic img{width:100%;height:100%;object-fit:cover;border-radius:50%}
.badge-card.locked{opacity:.5}
.badge-card.locked .badge-ic img{filter:grayscale(1);opacity:.6}
.badge-card.earned .badge-ic{color:var(--cobalt)}

@supports (content-visibility:auto){
  .lib-card{content-visibility:auto;contain-intrinsic-size:auto 300px}
  .library-grid.lv-list .lib-card{content-visibility:visible;contain-intrinsic-size:none}
}

/* overflow:clip ne cree pas de scroll container et preserve position:sticky. */
@supports (overflow:clip){html,body{overflow-x:clip}}

/* Safari < 18 expose encore le filtre via le prefixe historique. */
.modal{-webkit-backdrop-filter:blur(8px)}
.image-carousel-main:after{-webkit-backdrop-filter:blur(4px)}
.lightbox{-webkit-backdrop-filter:blur(10px)}

.feat-pills{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;margin:10px 0}
.feat-pill{display:grid;gap:4px;justify-items:start;text-align:left;border:2.5px solid var(--ink);border-radius:16px;background:var(--paper);padding:0 0 10px;font:inherit;cursor:pointer;overflow:hidden;box-shadow:2px 2px 0 var(--ink);transition:transform .12s ease}
.feat-pill:hover{transform:translateY(-2px)}
.feat-pill .fp-img{position:relative;width:100%;aspect-ratio:1;display:block}
.feat-pill .fp-img img{width:100%;height:100%;object-fit:cover;display:block;transition:filter .15s ease}
.feat-pill .fp-check{position:absolute;right:8px;top:8px;width:26px;height:26px;border-radius:50%;background:var(--lime);border:2px solid var(--ink);display:flex;align-items:center;justify-content:center;font-style:normal;font-weight:900;font-size:15px}
.feat-pill b{font-size:13.5px;letter-spacing:-.02em;padding:6px 10px 0}
.feat-pill small{color:var(--muted);font-size:11.5px;font-weight:800;padding:0 10px;line-height:1.3}
.feat-pill:not(.on) .fp-img img{filter:grayscale(1);opacity:.55}
.feat-pill:not(.on) .fp-check{visibility:hidden}
.feat-pill:not(.on){box-shadow:none;border-color:#b9b4a6;color:var(--muted)}
body.feat-off-suivi [data-nav="suivi"], body.feat-off-suivi #trackRecipeBtn{display:none !important}
body.feat-off-plan [data-nav="plan"]{display:none !important}
body.feat-off-courses #shoppingRecipe, body.feat-off-courses #planShoppingBtn{display:none !important}
body.feat-off-remix #remixBtn{display:none !important}
body.feat-off-restes #leftoversBtn{display:none !important}
body.feat-off-boissons #beverageRecipe{display:none !important}
body.feat-off-flemme #lazyBtn{display:none !important}
body.feat-off-carte [data-nav="carte"]{display:none !important}
body.feat-off-monde [data-nav="monde"]{display:none !important}
body.feat-off-progression #homeBadges, body.feat-off-progression #homeAddition,
body.feat-off-progression .pfp-progress, body.feat-off-progression .pfp-show .wrapped-entry{display:none !important}
body.feat-off-mealprep .prep-entry{display:none !important}
body.feat-off-evenements .plan-events{display:none !important}
body.feat-off-frigo [data-nav="frigo"]{display:none !important}
body.feat-off-apprendre [data-guide-link]{display:none !important}

.ob-starter{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px;max-height:46vh;overflow-y:auto;margin:10px 0;padding:2px}
.ob-st{position:relative;border:2.5px solid var(--ink);border-radius:14px;overflow:hidden;padding:0;cursor:pointer;background:var(--paper);text-align:left;display:grid}
.ob-st img{width:100%;aspect-ratio:1;object-fit:cover;display:block}
.ob-st span{font-size:11px;font-weight:900;padding:5px 7px;line-height:1.25;color:var(--ink)}
.ob-st i{position:absolute;right:6px;top:6px;width:22px;height:22px;border-radius:50%;background:var(--lime);border:2px solid var(--ink);display:flex;align-items:center;justify-content:center;font-style:normal;font-weight:900;font-size:13px;visibility:hidden}
.ob-st.on i{visibility:visible}
.ob-st.on{outline:3px solid var(--cobalt);outline-offset:-1px}
.ob-st:not(.on) img{opacity:.85}

/* harmonie suivi */
#view-suivi .stat-fold summary strong{font-size:15px;font-weight:900;letter-spacing:-.02em}
#view-suivi .stat-fold summary small, #view-suivi .nutrition-head small{font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:900;color:var(--muted);font-family:inherit}
#view-suivi .frequent-label, #frequentStrip .nutrition-head small{font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:900;color:var(--muted);font-family:inherit}
#frequentStrip .nutrition-head strong{font-size:15px;font-weight:900;letter-spacing:-.02em}
#view-suivi .da-resume b{font-weight:900}
#view-suivi .day-kick b, #view-suivi .day-kick > p{font-size:15px;font-weight:900}
#view-suivi .day-summary .kcal-ring-in b{font-size:26px}
#view-suivi #coachNote{margin:12px 0 0}
#view-suivi .day-activity, #view-suivi .day-health, #view-suivi .day-micros, #view-suivi .journal-add, #view-suivi .day-list{margin-top:12px;margin-bottom:12px}
#view-suivi .ds-card b{font-weight:900}

/* poids glamour */
.wt-hero{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:0 0 12px}
.wt-lead{display:flex;flex-direction:column;gap:2px}
.wt-lead>small{color:var(--muted);font-weight:800;font-size:11.5px;letter-spacing:.02em}
.wt-big{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(40px,8vw,64px);line-height:.95;letter-spacing:0.02em}
.wt-big i{font-style:normal;font-size:.42em;margin-left:5px;color:var(--muted)}
.wt-side{display:grid;gap:4px}
.wt-last{opacity:.9}
.wt-delta-pill{display:inline-flex;align-items:center;gap:6px;border:2px solid var(--ink);border-radius:999px;padding:5px 12px;font-weight:900;font-size:13px;background:var(--soft);width:fit-content}
.wt-delta-pill.wt-good{background:var(--lime)}
.wt-delta-pill.wt-warn{background:#ffd9d2}
.wt-side small{color:var(--muted);font-weight:800}
.wf-card{margin:0 0 12px}
.wf-inline{display:flex;gap:8px;align-items:center;margin:0}
.wf-inline input{width:96px;border:2px solid var(--ink);border-radius:10px;padding:8px 10px;font:inherit;background:var(--paper)}
.wf-inline button{width:auto;margin:0;border:2px solid var(--ink);border-radius:999px;background:var(--lime);font:inherit;font-weight:900;font-size:13px;padding:8px 16px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.wc-target{stroke:var(--lime);stroke-width:4;stroke-linecap:round}
.wc-target-lbl{font-size:11px;font-weight:900;fill:var(--muted)}
.wc-mark circle{fill:var(--red);stroke:var(--ink);stroke-width:2}
.wc-mark text{font-size:9px;font-weight:900;fill:#fff}
/* objectif glamour */
.gt-hero{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin:0 0 14px}
.gt-ring{width:134px;height:134px;border-radius:50%;border:6px solid var(--lime);outline:2.5px solid var(--ink);outline-offset:0;box-shadow:3px 3px 0 var(--ink);display:grid;place-items:center;align-content:center;gap:0;flex:none;background:var(--paper)}
.gt-ring b{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:34px;line-height:1}
.gt-ring small{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:900}
.gt-ring-side{display:grid;gap:6px;flex:1;min-width:220px}
.gt-mode{display:inline-flex;border:2px solid var(--ink);border-radius:999px;padding:5px 12px;font-weight:900;font-size:12px;background:var(--soft);width:fit-content}
.gt-mode.gt-adaptive{background:var(--lime)}
.gt-ring-side small{color:var(--muted);font-weight:800;line-height:1.4}
.gt-burned{font-weight:900;font-size:13px}
.gt-gauges{display:grid;gap:10px;margin:0 0 6px}
.gt-gauge{display:grid;gap:3px}
.gt-lbl{display:flex;justify-content:space-between;align-items:baseline}
.gt-lbl small{font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:900}
.gt-lbl b{font-size:15px}
.gt-bar{height:14px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);overflow:hidden}
.gt-bar i{display:block;height:100%}
.gt-p{background:var(--cobalt)}
.gt-c{background:var(--red)}
.gt-f{background:var(--lime)}
.gt-gauge em{font-style:normal;font-size:11px;color:var(--muted);font-weight:800}

/* graphe poids wahou */
.wc-grid{stroke:var(--ink);stroke-opacity:.12;stroke-dasharray:3 5;stroke-width:1.5}
.wc-axis{font-size:11px;font-weight:900;fill:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.wc-area{fill:url(#wcGrad)}
.wc-trend{fill:none;stroke:var(--ink);stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round}
.wc-dot{fill:var(--paper);stroke:var(--ink);stroke-width:1.2;opacity:.55}
.wc-last{fill:var(--lime);stroke:var(--ink);stroke-width:2.5}
.wc-pulse{fill:none;stroke:var(--lime);stroke-width:3;opacity:.9;transform-origin:center;transform-box:fill-box}
.wc-vpill rect{fill:var(--ink)}
.wc-vpill text{font-size:15px;fill:var(--bone);font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;letter-spacing:0.03em}
.wc-band{fill:url(#wcHatch)}
.wc-target{stroke:var(--lime);stroke-width:4;stroke-linecap:round;stroke-dasharray:1 9}
.wc-target-lbl{font-size:11px;font-weight:900;fill:var(--muted)}
.wc-goalpill rect{fill:var(--soft);stroke:var(--ink);stroke-width:2}
.wc-goalpill text{font-size:11px;font-weight:900;fill:var(--ink)}
.wc-flag rect{fill:var(--soft);stroke:var(--ink);stroke-width:1.6}
.wc-flag text{font-size:10.5px;font-weight:900;fill:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.wc-edge rect{fill:var(--paper);stroke:var(--ink);stroke-width:2;rx:10}
.wc-edge text{font-size:10.5px;font-weight:900;fill:var(--ink)}
.wc-medal circle{fill:var(--paper);stroke:var(--ink);stroke-width:2.2}
.wc-range{margin:0 0 12px}
.wc-stats{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 0}
.wc-stats span{border:2px solid var(--ink);border-radius:999px;padding:5px 12px;font-size:12px;font-weight:900;background:var(--soft)}
@media (prefers-reduced-motion: no-preference){
  .wc-draw{stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:wcDraw 1.1s cubic-bezier(.22,1,.36,1) .1s forwards}
  @keyframes wcDraw{to{stroke-dashoffset:0}}
  .wc-area{opacity:0;animation:wcFade .7s ease .7s forwards}
  @keyframes wcFade{to{opacity:1}}
  .wc-pulse{animation:wcPulse 2.2s ease-out infinite}
  @keyframes wcPulse{0%{transform:scale(1);opacity:.9}70%{transform:scale(2.1);opacity:0}100%{transform:scale(2.1);opacity:0}}
  .wc-vpill,.wc-medal{opacity:0;animation:wcFade .5s ease 1s forwards}
}

.phase-card{border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:14px 16px;margin:14px 0 0}
.phase-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.phase-kicker{display:inline-flex;background:var(--lime);border:2px solid var(--ink);border-radius:999px;padding:5px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:950;text-transform:uppercase;letter-spacing:.04em}
.phase-dismiss{all:unset;cursor:pointer;width:26px;height:26px;display:grid;place-items:center;border-radius:999px;font-size:18px;line-height:1;color:var(--muted);flex:none}
.phase-dismiss:hover{background:var(--soft);color:var(--ink)}
.phase-card p{margin:0;color:rgba(21,19,15,.82);font-weight:750;line-height:1.4;font-size:14px}
.wm-box{margin:16px 0 0}
.wm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px}
.wm-cell{display:grid;gap:2px;justify-items:center;text-align:center;border:2.5px solid var(--ink);border-radius:14px;background:var(--paper);padding:10px 8px;box-shadow:2px 2px 0 var(--ink)}
.wm-cell img{width:56px;height:56px;border-radius:50%;border:2px solid var(--ink)}
.wm-cell b{font-size:13px}
.wm-cell small{color:var(--muted);font-weight:800;font-size:11px}
.wm-cell:not(.on){box-shadow:none;border-color:#b9b4a6}
.wm-cell:not(.on) img{filter:grayscale(1);opacity:.55}
.wm-cell.on small{color:var(--ink)}
.wh-box{margin:16px 0 0}
.wh-note{display:block;color:var(--muted);font-size:11.5px;font-weight:800;line-height:1.45;margin:2px 0 9px}
.wh-rows{display:grid;gap:6px}
.wh-row{display:flex;align-items:baseline;gap:12px;border-bottom:1px dashed var(--line);padding:7px 2px}
.wh-row span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:900;color:var(--muted);width:44px}
.wh-row b{font-size:14.5px}
.wh-row em{font-style:normal;margin-left:auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:900;color:var(--muted)}
.wh-row em.wh-above{color:var(--muted)}
.wh-row em.wh-below{color:var(--ink);background:var(--lime);border-radius:6px;padding:1px 6px}

/* Check-in hebdo TDEE : surface d'info .card-info (filet, pas d'ombre), le chiffre murmure en mono. */
.ck-card{margin:16px 0 0}
.ck-card .ds-head{margin-bottom:8px}
.ck-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.ck-lead{display:flex;flex-direction:column;gap:2px}
.ck-num{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:22px;font-weight:950}
.ck-num i{font-style:normal;font-size:.6em;margin-left:5px;color:var(--muted);font-weight:900}
.ck-lead small{color:var(--muted);font-weight:800;font-size:11.5px}
.ck-target{display:block;margin-top:8px;color:var(--muted);font-weight:800;font-size:12.5px}
.ck-empty{margin:0;color:var(--muted);font-weight:750;font-size:13.5px;line-height:1.45}

/* menus */
.menus-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px;margin:0 0 18px}
.menu-card{display:grid;gap:3px;text-align:left;border:2.5px solid var(--ink);border-radius:14px;background:var(--paper);padding:14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);font:inherit}
.menu-card b{font-size:15px}
.menu-card small{color:var(--muted);font-weight:800;font-size:12px}
.menu-card.menu-new{background:var(--lime)}
.menu-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:space-between;margin:0 0 12px}
.menu-head small{font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:900}
.menu-actions{display:flex;gap:8px;flex-wrap:wrap}
.menu-fill{display:flex;gap:8px;align-items:center;flex-wrap:wrap;border:2px dashed var(--ink);border-radius:14px;padding:10px 12px;margin:0 0 12px;background:color-mix(in oklab, var(--paper) 92%, var(--lime))}
.menu-fill span{font-weight:900;font-size:13px}
.menu-fill button{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font:inherit;font-weight:900;font-size:12.5px;padding:7px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.menu-slot{border:2.5px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:12px 14px;margin:0 0 12px}
.ms-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 8px}
.ms-head b{font-size:15px}
.ms-head span{display:flex;gap:6px}
.ms-add,.ms-gen{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font:inherit;font-weight:900;font-size:12px;padding:6px 12px;cursor:pointer}
.ms-gen{background:var(--paper)}
.ms-items{display:grid;gap:8px}
.ms-item{display:flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:12px;padding:6px 10px 6px 6px}
.ms-item img{width:44px;height:44px;border-radius:9px;object-fit:cover}
.ms-item b{font-size:13.5px;flex:1}
.ms-del{border:0;background:none;font-weight:900;font-size:16px;cursor:pointer}
.ms-empty{color:var(--muted);font-weight:800}
.event-menus{margin:14px 0 0}
.ev-menu{display:flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:14px;padding:10px 12px;margin:8px 0;background:var(--paper)}
.ev-menu-lead{background:color-mix(in oklab, var(--paper) 85%, var(--lime));box-shadow:2px 2px 0 var(--ink)}
.ev-menu-body{flex:1;min-width:0}
.ev-menu-body b{display:block;font-size:14px}
.ev-menu-body small{color:var(--muted);font-weight:800;font-size:12px}
.ev-vote{border:2px solid var(--ink);border-radius:999px;background:var(--lime);font:inherit;font-weight:900;font-size:13px;padding:7px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
/* carte publique */
.menu-page .mp-card{max-width:560px;margin:0 auto;border:2.5px solid var(--ink);border-radius:22px;background:var(--paper);box-shadow:4px 4px 0 var(--ink);padding:28px 26px}
.mp-slot h3{text-align:center;font-size:14px;text-transform:uppercase;letter-spacing:.14em;margin:22px 0 12px;position:relative}
.mp-slot h3::after{content:'';display:block;width:44px;height:2.5px;background:var(--ink);margin:8px auto 0;border-radius:2px}
.mp-line{display:flex;gap:12px;align-items:center;margin:0 0 12px}
.mp-line img{width:56px;height:56px;border-radius:50%;object-fit:cover;border:2.5px solid var(--ink)}
.mp-line b{display:block;font-size:16px;letter-spacing:-.02em}
.mp-line small{color:var(--muted);font-weight:750;line-height:1.35}
.mp-foot{text-align:center;margin:26px 0 0;color:var(--muted);font-weight:800;font-size:13px}
.mp-foot a{color:inherit}

.ask-card{max-width:400px}
.ask-text{margin:0 0 12px;color:var(--muted);font-weight:800;font-size:14px}
.ask-card input{margin:0 0 14px}
.ask-btns{display:flex;gap:10px}
.ask-go,.ask-danger,.ask-cancel{border:2px solid var(--ink);border-radius:999px;font:inherit;font-weight:900;font-size:14px;padding:10px 20px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.ask-go{background:var(--lime)}
.ask-danger{background:#ffd9d2;color:var(--red)}
.ask-cancel{background:var(--paper)}

/* --- Menus wahou: outils du composeur + carte publique enrichie --- */
.ms-ic{width:15px;height:15px;display:block}
.bev-ic svg{width:20px;height:20px;display:block}
.menu-tools{border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:12px 14px;margin:0 0 12px}
.menu-tools .ds-head{margin-bottom:10px}
.menu-servings{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:0 0 10px}
.menu-servings button{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font:inherit;font-weight:900;font-size:12.5px;padding:6px 12px;cursor:pointer}
.menu-servings button.active{background:var(--lime);box-shadow:2px 2px 0 var(--ink)}
.menu-servings span{font-size:12.5px;font-weight:800;color:var(--muted)}
.menu-days{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}
.menu-days button{border:2px solid var(--ink);border-radius:12px;background:var(--paper);font:inherit;font-weight:900;font-size:13px;padding:10px 8px;cursor:pointer;box-shadow:2px 2px 0 var(--ink);text-transform:capitalize}
.menu-days button:hover{background-size:100% 100%}
.menu-tools .ev-bev-row{margin:0 0 8px}
.menu-cook-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px;margin:0 0 12px}
.menu-cook-card{display:flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:8px 10px;font:inherit;cursor:pointer;text-align:left}
.menu-cook-card:hover{background:color-mix(in oklab, var(--paper) 88%, var(--lime))}
.menu-cook-card .mc-thumb{flex:0 0 46px;width:46px;height:46px;border-radius:10px;overflow:hidden;border:2px solid var(--ink);display:grid;place-items:center;background:var(--paper)}
.menu-cook-card .mc-thumb img{width:100%;height:100%;object-fit:cover}
.menu-cook-card .mc-body{display:flex;flex-direction:column;min-width:0;flex:1}
.menu-cook-card .mc-body small{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:900}
.menu-cook-card .mc-body b{font-size:13.5px;line-height:1.2;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.menu-cook-card .mc-play{flex:0 0 18px;width:18px;height:18px}
#menuCookChain .pl-ic{width:16px;height:16px;vertical-align:-3px;margin-right:4px}
.mp-somm{margin:24px 0 0;border-top:2px dashed var(--ink);padding-top:16px}
.mp-somm h3{text-align:center;font-size:13px;text-transform:uppercase;letter-spacing:.14em;margin:0 0 12px}
.mp-somm-row{display:grid;grid-template-columns:122px 1fr;gap:12px;align-items:baseline;margin:0 0 8px}
.mp-somm-row b{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);text-align:left}
.mp-somm-row div{display:flex;flex-direction:column}
.mp-somm-row span{font-weight:800}
.mp-somm-row small{color:var(--muted)}
.mp-budget{text-align:center;margin:18px 0 0;font-weight:800;font-size:13.5px;color:var(--muted)}
.mp-print-line{text-align:center;margin:16px 0 0}
.mp-print{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font:inherit;font-weight:900;font-size:13px;padding:9px 18px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
@media print{
  .ps-menu{max-width:150mm;margin:0 auto;text-align:center;color:#15130f}
  .psm-kicker{font-family:ui-monospace,Menlo,monospace;font-size:8pt;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:#7d766a}
  .ps-menu h1{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:30pt;line-height:.95;letter-spacing:0.03em;text-transform:uppercase;margin:2mm 0 4mm;font-weight:400}
  .ps-menu h2{font-size:10.5pt;letter-spacing:.2em;text-transform:uppercase;margin:8mm 0 0;font-weight:700}
  .ps-menu h2::after{content:'';display:block;width:13mm;height:.7mm;background:#15130f;margin:2mm auto 3mm}
  .psm-dish{margin:0 0 3mm}
  .psm-dish b{font-size:12.5pt}
  .psm-dish span{font-size:9pt;color:#3d3830;font-style:italic}
  .psm-somm{margin-top:9mm;border-top:.6pt dashed #7d766a;padding-top:2mm}
  .psm-meta{margin-top:7mm;font-size:9pt;color:#3d3830}
  .psm-foot{margin-top:11mm;font-family:ui-monospace,Menlo,monospace;font-size:7.5pt;letter-spacing:.08em;color:#7d766a}
  .ps-menu.ps-a5{max-width:118mm}
  .ps-menu.ps-a5 h1{font-size:22pt}
  .ps-menu.ps-a5 h2{margin-top:5.5mm;font-size:9pt}
  .ps-menu.ps-a5 .psm-dish b{font-size:10.5pt}
  .ps-menu.ps-a5 .psm-dish span{font-size:8pt}
}

/* --- Votes de menus dans les evenements --- */
.event-menus{margin:18px 0 4px}
.evm-row{display:flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:9px 12px;margin:0 0 8px}
.evm-row.evm-lead{background:color-mix(in oklab, var(--paper) 68%, var(--lime))}
.evm-body{flex:1;min-width:0;display:flex;flex-direction:column}
.evm-body small{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.evm-open{flex:0 0 auto;color:var(--ink);font-weight:800;font-size:12px;text-decoration:underline}
.ev-vote{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);font:inherit;font-weight:900;font-size:12.5px;padding:6px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.ev-vote svg{width:15px;height:15px}
.evm-propose{border:2px dashed var(--ink);border-radius:999px;background:transparent;font:inherit;font-weight:900;font-size:12.5px;padding:7px 14px;cursor:pointer;margin:2px 0 8px}
.evm-picker{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 8px}
.evm-picker button{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font:inherit;font-weight:800;font-size:12.5px;padding:6px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.evm-picker button.on{background:var(--lime)}
.mp-print-line .mp-print{margin:0 4px}

/* --- Bulle d'aide "?" (hover desktop, tap mobile) --- */
.help-dot{width:22px;height:22px;border-radius:50%;border:2px solid var(--ink);background:var(--paper);font:inherit;font-weight:900;font-size:12px;line-height:1;cursor:help;position:relative;padding:0;flex:0 0 auto}
.help-dot::after{content:attr(data-tip);position:absolute;top:calc(100% + 8px);right:-8px;z-index:40;width:230px;background:var(--ink);color:var(--paper);border-radius:10px;padding:9px 11px;font-size:12px;font-weight:600;line-height:1.4;text-align:left;opacity:0;pointer-events:none;transform:translateY(-4px);transition:opacity .15s ease,transform .15s ease}
.help-dot:hover::after,.help-dot:focus-visible::after,.help-dot.open::after{opacity:1;transform:none}
@media (prefers-reduced-motion: reduce){.help-dot::after{transition:none}}

/* --- Bouton discret facon lien (partage post-log) --- */
.linklike{border:none;background:none;padding:0;font:inherit;font-weight:800;font-size:inherit;color:var(--ink);text-decoration:underline;cursor:pointer}
.linklike:disabled{opacity:.5;cursor:default}

/* --- Complements alimentaires (profil + onboarding + note journal) --- */
.supp-list{display:flex;flex-direction:column;gap:8px}
.supp-row{display:grid;grid-template-columns:172px 1fr;gap:8px;align-items:center}
.supp-chip{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font:inherit;font-weight:900;font-size:12.5px;padding:7px 10px;cursor:pointer;opacity:.55;justify-self:start;max-width:100%}
.supp-row.on .supp-chip{background:var(--lime);opacity:1;box-shadow:2px 2px 0 var(--ink)}
.supp-fields{display:flex;align-items:center;gap:6px;min-width:0}
.supp-fields input[type="number"]{width:64px;flex:0 0 auto;border:2px solid var(--ink);border-radius:10px;padding:7px 6px;font:inherit;font-weight:800;font-size:12.5px;background:var(--paper)}
.supp-fields input[type="text"]{flex:1 1 90px;min-width:70px;border:2px solid var(--ink);border-radius:10px;padding:7px 8px;font:inherit;font-size:12.5px;background:var(--paper)}
.supp-fields select{flex:1 1 auto;min-width:0;width:auto;border:2px solid var(--ink);border-radius:10px;padding:7px 4px;font:inherit;font-weight:800;font-size:12.5px;background:var(--paper)}
.supp-fields select.supp-unit{flex:0 0 64px}
.supp-fields .select-ui{flex:1 1 auto;min-width:0}
.supp-fields select.supp-unit+.select-ui{flex:0 1 88px;min-width:72px}
.supp-fields .select-trigger{padding:8px 10px;font-size:12.5px;font-weight:800;border-radius:10px}
.supp-fields .select-trigger .select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.supp-note{margin:10px 2px 0;font-size:12.5px;color:var(--muted);font-weight:700}
@media (max-width:640px){.supp-row{grid-template-columns:1fr;gap:5px}.supp-row .supp-fields{margin-left:2px}}

/* --- Kids favorites: banniere team nuggets + pill cache dedans --- */
.kids-toggle{display:flex;align-items:center;gap:12px;margin-top:10px;width:100%;max-width:560px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:10px 14px;font:inherit;cursor:pointer;text-align:left}
.kids-toggle .kt-track{flex:0 0 46px;width:46px;height:26px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);position:relative;transition:background .15s ease}
.kids-toggle .kt-knob{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--ink);transition:transform .15s ease}
.kids-toggle.on .kt-track{background:var(--lime)}
.kids-toggle.on .kt-knob{transform:translateX(20px)}
.kids-toggle .kt-txt{display:flex;flex-direction:column;min-width:0}
.kids-toggle .kt-txt b{font-size:13.5px;line-height:1.25}
.kids-toggle .kt-txt small{color:var(--muted);font-size:12px;font-weight:700;line-height:1.3}
@media (prefers-reduced-motion: reduce){.kids-toggle .kt-track,.kids-toggle .kt-knob{transition:none}}
.tag-pill.kids-hidden{background:color-mix(in oklab, var(--paper) 75%, var(--lime));border-style:dashed}

/* --- Blog compact: carrousel accueil (hr-*) + rail public /guide (br-*) --- */
.home-read{margin:14px 0}
.hr-head small{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:900}
.hr-rail{display:flex;gap:10px;overflow-x:auto;padding:8px 2px 10px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
.hr-card{flex:0 0 218px;scroll-snap-align:start;display:flex;flex-direction:column;gap:8px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:8px;font:inherit;text-align:left;cursor:pointer}
.hr-card:hover{background:color-mix(in oklab, var(--paper) 90%, var(--lime))}
.hr-card .hr-thumb{width:100%;height:96px;border-radius:10px;border:2px solid var(--ink);overflow:hidden;display:grid;place-items:center;background:var(--soft, var(--paper))}
.hr-card .hr-thumb img{width:100%;height:100%;object-fit:cover}
.hr-card b{font-size:13px;line-height:1.25;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:2.5em}
.blog-rail{display:flex;gap:12px;overflow-x:auto;padding:4px 2px 12px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;margin-bottom:18px}
.br-card{flex:0 0 230px;scroll-snap-align:start;display:flex;flex-direction:column;gap:8px;border:2.5px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:9px;text-decoration:none;color:var(--ink)}
.br-card .br-thumb{position:relative;width:100%;height:104px;border-radius:11px;border:2px solid var(--ink);overflow:hidden;display:grid;place-items:center}
/* img en absolute inset:0: la ligne de grid etant auto, height:100%/stretch etait ignore
   (WebKit: l'image debordait a sa hauteur intrinseque, rendu "a moitie"). Le fallback 旨 reste centre par le grid. */
.br-card .br-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.br-card b{font-size:13.5px;line-height:1.25;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}

/* --- Enfants dans le suivi: switcher, resume repere, foyer --- */
.day-who{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}
.dw-pill{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font:inherit;font-weight:900;font-size:13px;padding:7px 14px;cursor:pointer}
.dw-pill.on{background:var(--lime);box-shadow:2px 2px 0 var(--ink)}
.kid-summary{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.kid-sum-body{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}
.kid-sum-body b{font-size:15px}
.kid-sum-body span{font-size:13px;font-weight:800}
.kid-sum-body small{color:var(--muted);font-size:12px;line-height:1.35}
#suivi-journal.kid-day #dayBurn,
#suivi-journal.kid-day .day-activity,#suivi-journal.kid-day #coachNote,
#suivi-journal.kid-day #dayHealth,#suivi-journal.kid-day #dayMicros,#suivi-journal.kid-day #daySuggest{display:none!important}
.hh-kids{display:flex;flex-direction:column;gap:8px}
.hhk-row{display:flex;align-items:center;gap:10px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:8px 12px}
.hhk-body{display:flex;flex-direction:column;flex:1;min-width:0}
.hhk-body small{color:var(--muted)}
.hhk-del{border:2px solid var(--ink);border-radius:50%;width:26px;height:26px;background:var(--paper);font:inherit;font-weight:900;cursor:pointer;line-height:1}
.hhk-form{display:flex;flex-wrap:wrap;gap:8px;align-items:center;border:2px dashed var(--ink);border-radius:14px;padding:10px 12px}
.hhk-form input,.hhk-form select{border:2px solid var(--ink);border-radius:10px;padding:8px 10px;font:inherit;font-weight:700;background:var(--paper)}
.hhk-form input[type="text"]{width:120px}
.hhk-form input[type="number"]{width:110px}
.hhk-form .sel-inline{display:flex;gap:6px}
.hhk-form .hhk-sex{border:2px solid var(--ink);border-radius:999px;background:var(--paper);font:inherit;font-weight:900;font-size:12.5px;padding:7px 12px;cursor:pointer;opacity:.55}
.hhk-form .hhk-sex.on{background:var(--lime);opacity:1}
.hhk-form .status{width:100%;margin:0}

/* --- Dashboard admin --- */
.admin-page .share-cta{display:none}
.kpi{display:flex;flex-direction:column;gap:6px}
.kpi h2{margin:22px 0 10px;font-size:15px;text-transform:uppercase;letter-spacing:.08em}
.kpi-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
.kpi-tile{border:2.5px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:12px 14px;display:flex;flex-direction:column;gap:2px}
.kpi-tile small{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:900}
.kpi-tile b{font-size:26px;line-height:1.05}
.kpi-tile span{font-size:11.5px;color:var(--muted);font-weight:800}
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:10px}
.kpi-card{border:2.5px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:14px 16px}
.kpi-card-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:0 0 8px}
.kpi-card-head b{font-size:14px}
.kpi-card-head small{color:var(--muted);font-weight:800}
.kpi-spark{width:100%;height:44px;color:var(--ink)}
.kpi-row{display:flex;justify-content:space-between;gap:12px;margin:0 0 6px;font-size:13px}
.kpi-row span{color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kpi-row b{flex:0 0 auto}
.kpi-line{margin:6px 0 0;font-size:12.5px;color:var(--muted);font-weight:700}
.kpi-bar{display:grid;grid-template-columns:190px 1fr auto;gap:10px;align-items:center;margin:0 0 8px;font-size:13px}
.kpi-bar i{display:block;height:12px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);overflow:hidden}
.kpi-bar i b{display:block;height:100%;background:var(--lime)}
.kpi-bar small{color:var(--muted);font-weight:800;white-space:nowrap}
.kpi-log{margin:0 0 8px;font-size:12.5px;line-height:1.35;border-bottom:1px dashed var(--muted);padding-bottom:8px}
.kpi-log small{display:block;color:var(--muted);font-weight:900;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em}
.kpi-scroll{overflow-x:auto}
.kpi-table{width:100%;border-collapse:collapse;font-size:12.5px}
.kpi-table th{text-align:left;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:4px 10px 6px 0;border-bottom:2px solid var(--ink)}
.kpi-table td{padding:6px 10px 6px 0;border-bottom:1px dashed var(--muted);white-space:nowrap}
.kpi-foot{margin:18px 0 0;color:var(--muted);font-size:12px;font-weight:700}
@media (max-width:640px){.kpi-bar{grid-template-columns:1fr;gap:4px}}

/* --- Composeur: plat precis impose --- */
.dish-wanted{margin:0 0 14px;padding:12px 14px;border:2px dashed var(--ink);border-radius:14px;background:color-mix(in oklab, var(--paper) 94%, var(--lime))}
.dish-wanted label{font-weight:900;font-size:13.5px;display:block;margin:0 0 6px}
.dish-wanted input{width:100%;border:2px solid var(--ink);border-radius:12px;padding:10px 12px;font:inherit;background:var(--paper)}
.dish-wanted .prefs-hint{margin:6px 0 0}

/* --- Recomposer un plat depuis une photo --- */
.dish-photo-btn{margin-top:8px;border:2px dashed var(--ink);border-radius:999px;background:transparent;font:inherit;font-weight:900;font-size:12.5px;padding:7px 13px;cursor:pointer}
.dish-photo-fold{margin-top:10px;display:flex;flex-direction:column;gap:8px;border-top:2px dashed var(--ink);padding-top:10px}
.dish-photo-fold .dpf-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dish-photo-fold textarea{border:2px solid var(--ink);border-radius:12px;padding:9px 11px;font:inherit;background:var(--paper);resize:vertical}
/* le fold photo est deja flex column avec gap: la marge propre a .dish-match-card doublonnerait */
.dish-photo-fold .dish-match-card{margin-top:0}

/* --- Recherche d'ingredients mise en avant --- */
.ing-label{display:flex;align-items:baseline;gap:8px;font-weight:900;font-size:14.5px;margin:14px 0 6px}
.ing-label em{font-style:normal;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;color:var(--paper);background:var(--ink);border-radius:999px;padding:3px 9px}
.ing-big{position:relative}
.ing-big .ing-loupe{position:absolute;left:13px;top:50%;transform:translateY(-50%);width:18px;height:18px;pointer-events:none}
.ing-big input{padding:13px 14px 13px 40px;font-size:15px;border-width:2.5px;box-shadow:2px 2px 0 var(--ink)}
.dish-wanted{margin-top:16px}

/* --- Reglages avances: resume parlant --- */
.adv-sum{display:flex;align-items:center;gap:12px;min-width:0}
.adv-sum .kick-ic{width:19px;height:19px;flex:0 0 auto}
.adv-txt{display:flex;flex-direction:column;min-width:0}
.adv-txt b{font-size:13px}
.adv-txt small{text-transform:none;letter-spacing:0;font-weight:700;color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* --- Guide natif dans l'app --- */
.guide-article{max-width:980px;margin:0 auto}
.ga-back{margin:0 0 14px}
.ga-back-foot{margin:18px 0 0}
.ga-spreads{display:grid;gap:18px}
@media (max-width:700px){.ga-spreads .spread{grid-template-columns:1fr;min-height:0}.ga-spreads .spread-fig{border-right:none;border-bottom:2px solid var(--ink);min-height:170px}}
/* article blog dans la SPA (#guide/<slug>): titre inline au-dessus du rendu blocs */
.ga-spreads .ga-btitle{font-size:clamp(30px,4.5vw,52px);line-height:.9;letter-spacing:-.035em;margin:0 0 4px;max-width:none}
.ga-spreads .art-wide,.ga-spreads .content-body{margin-left:auto;margin-right:auto;width:100%}

/* --- Bloc photo: etat « a generer » mis en avant --- */
.photo-style-block.psb-hot>summary{background:color-mix(in oklab, var(--paper) 78%, var(--lime))}
.photo-style-block .adv-txt small{white-space:normal}
.img-cta-ic{width:34px;height:34px;color:var(--lime);margin-bottom:6px}

/* --- Profil: zone donnees / suppression + pages legales --- */
.acct-zone{display:flex;gap:10px;flex-wrap:wrap}
.acct-btn{width:auto;margin-top:0;padding:9px 16px;font-size:13px}
.acct-danger{background:var(--paper);color:var(--red, #e63e11);border-color:currentColor}
.legal-page{max-width:760px;margin:0 auto}
.legal-page h2{font-size:20px;margin:26px 0 8px}
.legal-page p,.legal-page li{line-height:1.55}
.legal-links{text-align:center;margin:14px 0 0;font-size:12.5px;color:var(--muted);font-weight:700}
.legal-links a{color:inherit}

/* --- Depense du jour --- */

/* --- Ajout tel quel (mot exact -> precision de chip) --- */
.combo-exact{padding:10px 12px;border-top:2px solid var(--ink);background:rgba(201,255,59,.28);font-weight:900;cursor:pointer;font-size:13.5px}
.combo-exact em{display:block;font-style:normal;font-weight:700;font-size:11.5px;color:var(--muted);margin-top:2px}
.combo-exact:hover{background:rgba(201,255,59,.5)}
.combo-note{padding:7px 12px 9px;font-size:11px;font-weight:700;color:var(--muted);border-top:1px dashed var(--line)}

/* --- Drop d'image sur le volet photo du plat --- */
.photo-zone{display:grid;place-items:center;gap:6px;padding:22px 16px;border:2px dashed var(--ink);border-radius:16px;background:rgba(235,226,207,.4);cursor:pointer;text-align:center;transition:background .15s ease}
.photo-zone:hover,.photo-zone:focus-visible{background:rgba(201,255,59,.25);outline:none}
.photo-zone .pz-ic{width:26px;height:26px;color:var(--muted)}
.photo-zone b{font-size:14px;letter-spacing:-.01em}
.photo-zone .pz-prev{max-height:96px;max-width:100%;border:2px solid var(--ink);border-radius:12px;box-shadow:2px 2px 0 var(--ink)}
.dish-photo-fold.dpf-drag .photo-zone,.photo-zone.dpf-drag{outline:3px dashed var(--cobalt);outline-offset:3px;background:rgba(36,87,255,.08)}

/* --- Renommage admin du titre --- */
.title-edit{border:none;background:none;cursor:pointer;color:var(--muted);padding:2px;margin-left:10px;vertical-align:middle}
.title-edit svg{width:19px;height:19px}
.title-edit:hover{color:var(--cobalt)}

/* --- Section Mes recettes repliable --- */
.sec-toggle{border:none;background:none;cursor:pointer;color:var(--ink);padding:0 6px 0 0;vertical-align:middle}
.sec-toggle svg{width:22px;height:22px;transition:transform .18s ease}
.sec-toggle.closed svg{transform:rotate(-90deg)}
.sec-folded{display:none!important}

/* --- Restes de plat generables --- */
.lo-cook{margin-top:8px;border:2px solid var(--ink);border-radius:999px;background:var(--lime);font-weight:900;font-size:12px;padding:6px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.lo-cook:disabled{opacity:.6;cursor:progress}

/* --- Banniere relance restes (accueil) --- */
/* « Deja pret »: les lots de restes cuisines, en tete de Provisions. Surface d'information
   (filet, pas d'ombre): elle informe, ce sont ses boutons qui agissent. */
.lo-batches{margin:0 0 var(--sp-3)}
.lo-rail{display:grid;gap:10px}
.lo-card{display:flex;align-items:center;gap:12px;flex-wrap:wrap;border:2px solid var(--line);border-radius:var(--r-md);background:var(--paper);padding:12px 14px}
.lo-card>svg{flex:0 0 22px;width:22px;height:22px;color:var(--ink)}
.lo-body{flex:1;min-width:180px;display:flex;flex-direction:column;gap:2px}
.lo-body b{font-size:14px;letter-spacing:-.01em}
.lo-body small{color:var(--muted);font-size:11.5px;font-weight:700}
.lo-acts{display:flex;flex-wrap:wrap;gap:8px}
.lo-acts .btn-ghost{width:auto;margin:0;min-height:36px;padding:8px 13px;font-size:12.5px}
/* La question « encore bon ? » sur la ligne meme, pas dans l'editeur replie: la ligne dit deja
   « a verifier », les trois reponses se posent dessous, alignees sur le retrait de l'editeur.
   Aucune n'est lime: c'est une vraie question a trois issues, pas une reponse recommandee. */
.frigo-ask{display:flex;flex-wrap:wrap;gap:8px;padding:2px 14px 12px 16px}
.frigo-ask .btn-ghost{width:auto;margin:0;min-height:34px;padding:6px 11px;font-size:11.5px;box-shadow:none}


/* --- Carte de confirmation du log (fiche) --- */
.log-card{display:flex;gap:12px;align-items:flex-start;border:2px solid var(--ink);border-radius:16px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:12px 16px;margin-top:12px;text-transform:none;letter-spacing:0}
.log-card>svg{flex:0 0 24px;width:24px;height:24px;color:var(--ink);background:var(--lime);border-radius:50%;padding:2px;border:2px solid var(--ink)}
.log-card .lc-body{display:flex;flex-direction:column;gap:8px;min-width:0}
.log-card b{font-size:14.5px;letter-spacing:-.01em}
.log-card .lc-row{display:flex;flex-wrap:wrap;gap:7px;align-items:center}
.log-card .lc-row em{font-style:normal;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-right:2px}
.lc-pill{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font-weight:900;font-size:12.5px;padding:6px 12px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.lc-pill:hover{background:rgba(201,255,59,.3)}
.lc-pill.lc-fb{background:var(--lime)}
.lc-pill.on{background:var(--lime)}
.lc-pill:disabled{cursor:default;opacity:.85;box-shadow:none}
.lc-pill.on:disabled{opacity:1}
.cooked-leftover-question{display:grid;gap:8px;padding:10px 0;border-top:1px dashed var(--line);border-bottom:1px dashed var(--line)}
.cooked-leftover-question>strong{font-size:13px}
.leftover-declare{display:grid;gap:8px}
.leftover-declare.hidden{display:none}
.leftover-declare-status{font-size:11.5px;font-weight:800;color:var(--love)}
.leftover-answer{font-size:12.5px;font-weight:850;color:var(--muted)}
.log-card.compact{margin:10px 0}

/* --- Frigo: precision --- */
.frigo-detail{font-style:normal;color:var(--muted);font-weight:700;font-size:11.5px}
/* --- Frigo: actions anti-gaspi (jete / fini-utilise) --- */
.frigo-waste{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto}
.frigo-toss,.frigo-saved{border:2px solid var(--line);border-radius:999px;background:var(--paper);font-size:11px;font-weight:900;padding:4px 9px;cursor:pointer;color:var(--muted)}
.frigo-toss:hover{border-color:var(--red);color:var(--red)}
.frigo-saved:hover{border-color:var(--ink);background:var(--lime);color:var(--ink)}
.frigo-waste .frigo-del{padding:5px 8px;font-size:11px;font-weight:850;text-decoration:underline;text-underline-offset:2px}
.frigo-waste .frigo-del:hover{color:var(--red)}
.frigo-editable{cursor:pointer}
/* ============================================================
   Composer « Cuisiner » refondu : 1 depart segmente, 1 champ,
   pills rapides, toggles, CTA sticky, ecran « ça cuisine »
   ============================================================ */
.seg-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:2px 0 16px}
.seg-kicker{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:900}

/* appareil photo dans le champ (ingredients et plat) */
.has-cam input{padding-right:58px}
.field-cam{position:absolute;right:7px;top:50%;transform:translateY(-50%);width:40px;height:40px;display:grid;place-items:center;border:2px solid var(--ink);border-radius:12px;background:var(--lime);box-shadow:2px 2px 0 var(--ink);cursor:pointer;padding:0;color:var(--ink)}
.field-cam svg{width:20px;height:20px;display:block;margin-top:-1px}
.field-cam:hover{background:#d8ff6e}
.field-cam:focus-visible{outline:3px solid var(--cobalt);outline-offset:2px}
.dish-big{position:relative}
.dish-big input{padding:13px 58px 13px 14px;font-size:15px;border-width:2.5px;box-shadow:2px 2px 0 var(--ink)}
.src-extras{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
.src-extras .mini-link{width:100%;justify-content:center}
.mini-link{display:inline-flex;align-items:center;gap:7px;border:2px dashed var(--ink);border-radius:999px;background:transparent;font:inherit;font-weight:900;font-size:12.5px;padding:8px 14px;cursor:pointer;color:var(--ink);min-height:38px}
.mini-link:hover{background:rgba(201,255,59,.25)}
.mini-link:focus-visible{outline:3px solid var(--lime);outline-offset:2px}
.cam-hint{color:var(--muted);font-weight:850;font-size:11px}
#srcDish .dish-wanted{margin:0;padding:0;border:0;background:transparent}
#srcDish .ing-label{margin-top:0}

/* pills rapides : portions + budget, meme langage que le segmente */
/* labels alignes sur une colonne fixe, controles alignes sur l'autre (Portions et Budget etaient decales) */
.quick-row{display:grid;gap:12px;margin:20px 0 4px}
.qk{display:grid;grid-template-columns:86px minmax(0,1fr);align-items:center;gap:10px}
.qk .stepper{justify-self:start}
.qk-label{font-weight:950;font-size:13px}
.stepper{display:inline-flex;align-items:center;border:2px solid var(--ink);border-radius:999px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);overflow:hidden}
.stepper button{border:0;background:transparent;width:40px;height:40px;font-size:19px;font-weight:950;cursor:pointer;color:var(--ink);display:grid;place-items:center}
.stepper button:hover{background:rgba(201,255,59,.35)}
.stepper button:focus-visible{outline:3px solid var(--lime);outline-offset:-3px}
.stepper b{min-width:28px;text-align:center;font-weight:950;font-size:15px}

/* toggles coherents : mode sportif + boost proteine + basiques */
.switchline{display:inline-flex;align-items:center;gap:9px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:8px 15px 8px 10px;font:inherit;font-weight:950;font-size:13px;cursor:pointer;color:var(--ink);min-height:40px;position:relative}
.switchline input{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px}
.switchline .sw{width:34px;height:20px;border:2px solid var(--ink);border-radius:999px;background:var(--soft);position:relative;flex:0 0 auto;transition:background .15s ease}
.switchline .sw::after{content:"";position:absolute;top:1px;left:1px;width:14px;height:14px;border-radius:50%;background:var(--ink);transition:left .15s ease}
.switchline.active .sw,.switchline:has(input:checked) .sw{background:var(--lime)}
.switchline.active .sw::after,.switchline:has(input:checked) .sw::after{left:15px}
.switchline:focus-visible,.switchline:has(input:focus-visible){outline:3px solid var(--lime);outline-offset:2px}
.adv-switch{justify-self:start}

/* reglages avances : un seul format de ligne, libelle a gauche, controle a droite */
.advanced-body{gap:12px}
.advanced-body .settings{grid-template-columns:1fr;gap:10px}
.advanced-body .settings>label{grid-template-columns:minmax(0,1fr) minmax(150px,230px);align-items:center;gap:8px 12px;font-size:13.5px}
.advanced-body .settings>label>small.field-help{grid-column:1/-1;font-weight:750;color:var(--muted)}
.advanced-body .settings>label input,.advanced-body .settings>label .select-ui{min-width:0}

/* CTA toujours visible : barre flottante fixe, meme langage que la share-bar
   (position:sticky impossible ici: html/body ont overflow-x:hidden) */
.cta-bar{position:fixed;left:50%;bottom:12px;transform:translateX(-50%);z-index:30;width:min(888px,calc(100vw - 28px));margin:0;padding:10px 12px calc(10px + env(safe-area-inset-bottom,0px));border:2px solid var(--ink);border-radius:20px;background:var(--paper);box-shadow:var(--shadow)}
.cta-bar .primary{margin-top:0;min-height:50px;font-size:16px}
.cta-bar .status{margin:8px 2px 0;min-height:0}
.cta-bar .status:empty{display:none}
body:has(.modal:not(.hidden)) .cta-bar{display:none}
#view-generate .panel.inputs{padding-bottom:110px}

/* ecran plein page « ça cuisine » */
.gen-overlay{display:grid;justify-items:center;align-content:center;text-align:center;gap:14px;padding:46px 18px 36px;min-height:58vh}
.gen-overlay h3{margin:0;font-size:clamp(36px,5vw,54px);line-height:.9}
.gen-pan{width:96px;height:96px;display:grid;place-items:center;border:2px solid var(--ink);border-radius:50%;background:var(--lime);box-shadow:4px 4px 0 var(--ink);color:var(--ink)}
.gen-pan svg{width:56px;height:56px}
.gen-bar{width:min(340px,82%);height:12px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);box-shadow:2px 2px 0 var(--ink);overflow:hidden}
.gen-bar i{display:block;height:100%;width:40%;border-radius:999px;background:var(--lime);border-right:2px solid var(--ink);border-left:2px solid var(--ink)}
.gen-step{margin:0;font-weight:900;font-size:15px;min-height:1.4em;max-width:46ch}
.gen-done{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:12.5px;color:var(--muted);font-weight:800}
.gen-done li::before{content:"✓ ";color:var(--cobalt);font-weight:950}
.gen-note{margin:8px 0 0;max-width:42ch;border:2px dashed var(--ink);border-radius:14px;padding:10px 14px;font-weight:850;font-size:12.5px;background:rgba(201,255,59,.16);line-height:1.4}
@media(prefers-reduced-motion:no-preference){
  .gen-bar i{animation:genSlide 1.5s ease-in-out infinite alternate}
  .gen-pan{animation:panBob 1.6s ease-in-out infinite}
  .gen-steam path{animation:steamUp 1.6s ease-in-out infinite;transform-origin:center bottom}
  .gen-steam path:nth-child(2){animation-delay:.35s}
  .gen-steam path:nth-child(3){animation-delay:.7s}
  @keyframes genSlide{from{transform:translateX(-45%)}to{transform:translateX(200%)}}
  @keyframes panBob{0%,100%{transform:translateY(0) rotate(-.6deg)}50%{transform:translateY(-4px) rotate(.6deg)}}
  @keyframes steamUp{0%,100%{opacity:.25;transform:translateY(1.5px)}50%{opacity:1;transform:translateY(-1.5px)}}
}
@media(prefers-reduced-motion:reduce){
  .gen-bar i{width:100%;opacity:.5}
}

@media(max-width:960px){
  .cta-bar{bottom:10px;width:calc(100vw - 20px)}
  body:has(.tabbar:not(.hidden)) .cta-bar{bottom:calc(68px + env(safe-area-inset-bottom,0px))}
  body:has(.tabbar:not(.hidden)) #view-generate .panel.inputs{padding-bottom:170px}
  .quick-row{gap:12px 16px}
}
@media(max-width:520px){
  .seg-row{align-items:flex-start;flex-direction:column;gap:8px}
  .cam-hint{display:none}
}
/* etat vide: pas de gouffre sous le champ ingredient */
#srcIngredients .chips:empty{min-height:0;margin-top:0}
#srcIngredients .status:empty{display:none}

/* onboarding: etape enfants */
.ob-grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
.ob-kid{border:2px solid var(--ink);border-radius:18px;background:var(--paper);box-shadow:3px 3px 0 var(--ink);padding:14px;display:grid;gap:10px;margin-bottom:12px}
.ob-kid-head{display:flex;align-items:center;justify-content:space-between}
.ob-kid-n{font-weight:950;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--cobalt)}
.ob-kid-rm{border:2px solid var(--ink);background:var(--paper);border-radius:999px;width:28px;height:28px;font-size:18px;font-weight:950;line-height:1;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.ob-kid label{display:grid;gap:6px;font-weight:900;font-size:13px}
.ob-addkid{border:2px dashed var(--ink);background:transparent;border-radius:14px;padding:11px;font-weight:950;cursor:pointer;width:100%;font-family:inherit}
.ob-addkid:hover{background:rgba(21,19,15,.05)}
.ob-privacy{display:flex;gap:8px;align-items:flex-start;background:rgba(201,255,59,.28);border:2px solid var(--ink);border-radius:14px;padding:10px 12px;color:var(--ink);font-weight:800;font-size:12.5px;line-height:1.35}
.ob-privacy svg{flex:0 0 auto;margin-top:2px}

/* MES MENUS/RECETTES replies: masquer le sous-titre; toolbar qui wrap sur mobile */
.section-head:has(.sec-toggle[aria-expanded="false"]) small{display:none}
@media(max-width:560px){.section-head{flex-wrap:wrap}.section-head>span:last-child{flex-wrap:wrap}}

/* --- Design system : composants canoniques (documentés dans static/design.html) ---
   Règle d'or : calme par défaut, punch choisi. Un seul élément lime par écran (l'action
   principale OU l'état actif courant). Les surfaces d'information ne portent pas d'ombre. */
.segctl{display:inline-flex;gap:4px;border:2px solid var(--ink);border-radius:var(--r-pill);background:var(--paper);padding:4px;position:relative}
.segctl-btn{border:0;background:transparent;border-radius:var(--r-pill);padding:8px 15px;font:inherit;font-weight:900;color:var(--ink);cursor:pointer;position:relative;z-index:1}
.segctl-btn.active{background:var(--lime);box-shadow:inset 0 0 0 2px var(--ink)}
/* Transition liquide : un thumb lime glisse entre les crans (spring + squash). Injecte par JS (initSegctl).
   Sans JS, chaque bouton actif garde sa pastille (degradation propre). prefers-reduced-motion = pas d'anim. */
/* Thumb 100% CSS pour les segctl a crans egaux (seg-wide): largeur en fractions, position par data-at.
   Zero mesure JS = zero pilule fantome (le thumb mesure en offsetWidth laissait des largeurs perimees). */
.segctl{--segpad:4px}
.segctl.seg-sm{--segpad:3px}
.segctl.seg-wide::before{content:'';position:absolute;top:var(--segpad);bottom:var(--segpad);left:var(--segpad);width:calc((100% - 2*var(--segpad) - (var(--segn,2) - 1)*4px)/var(--segn,2));border-radius:var(--r-pill);background:var(--lime);box-shadow:inset 0 0 0 2px var(--ink);transition:transform .24s cubic-bezier(.4,0,.2,1)}
.segctl.seg-wide[data-at="1"]::before{transform:translateX(calc(100% + 4px))}
.segctl.seg-wide[data-at="2"]::before{transform:translateX(calc(2*(100% + 4px)))}
.segctl.seg-wide[data-at="3"]::before{transform:translateX(calc(3*(100% + 4px)))}
.segctl.seg-wide .segctl-btn.active{background:transparent;box-shadow:none}
@media(prefers-reduced-motion:reduce){.segctl.seg-wide::before{transition:none}}
/* 3 crans en mobile: padding reduit pour que les libelles tiennent sur une ligne */
@media(max-width:700px){.segctl.seg-wide:not(.seg-sm) .segctl-btn{padding:8px 4px;font-size:13px}}
#dishModeSeg{margin-bottom:12px}
/* Variantes : seg-wide = pleine largeur (composer), seg-sm = compact (budget 3 crans). */
.segctl.seg-wide{display:flex;width:100%}
.seg-wide .segctl-btn{flex:1;text-align:center}
.segctl.seg-sm{padding:3px}
.seg-sm .segctl-btn{padding:7px 10px;font-size:12.5px}
/* Segments PUREMENT icone. Un segment plus etroit que haut voit son border-radius plafonne
   par sa LARGEUR (min(w,h)/2), donc sa courbe ne peut pas suivre celle du conteneur, dont
   le rayon vient de la HAUTEUR: a l'extremite de la pilule, les deux arrondis divergent.
   En le rendant carre, son rayon vaut la moitie de sa hauteur et l'arrondi devient
   exactement concentrique a celui du conteneur, au padding pres. */
.seg-icons .segctl-btn{aspect-ratio:1;padding-inline:0;display:grid;place-items:center;line-height:1}

:is(button,a,[role=button],[tabindex]):focus-visible{outline:3px solid var(--lime);outline-offset:2px}
.segctl-btn,.slot-add,.btn-ghost{min-height:42px}
.card-info{border:2px solid var(--ink);border-radius:var(--r-md);background:var(--paper);padding:var(--sp-2) 16px}
.slot-add{border:2px dashed var(--ink);border-radius:var(--r-pill);background:transparent;color:var(--ink);font:inherit;font-weight:900;padding:10px 16px;cursor:pointer}
.slot-add:hover{background:var(--lime-soft)}
.btn-ghost{border:2px solid var(--ink);border-radius:var(--r-pill);background:var(--paper);color:var(--ink);font:inherit;font-weight:900;padding:10px 14px;cursor:pointer;box-shadow:var(--sh-int);transition:transform .16s ease;text-decoration:none}
.btn-ghost:hover{transform:translateY(-2px)}
.ideo-chip{display:inline-grid;place-items:center;width:52px;height:52px;background:var(--lime);border:2px solid var(--ink);border-radius:14px;box-shadow:var(--sh-int);font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:32px;line-height:1}

.cc-vote{margin-top:10px;border:2px solid var(--ink);border-radius:999px;background:var(--paper);padding:8px 16px;font-weight:900;font-size:14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}.cc-vote.voted{background:var(--lime);}.cc-vote b{margin-left:4px}.cc-vote:disabled{opacity:.6;cursor:wait}

/* --- Chantier 1 : adoption du design system (vue Semaine + quick wins) --- */
/* Halo de fond : calme (.15) par defaut dans l'app ; les pages contenu/vitrine gardent le punch (.36). */
body.content-page,body.share-page{--halo:.36}

/* Vue Semaine : 1 seule action lime (Liste de courses), les autres en ghost largeur auto. */
.plan-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}
.plan-actions .primary,.plan-actions .btn-ghost{width:auto;margin:0}

/* Convention d'etat actif (retenue) : pastille lime + texte/icone ink. Un seul cri lime par zone. */
.tabbar a.active{color:var(--ink);background:var(--lime);border-radius:var(--r-md);box-shadow:inset 0 0 0 2px var(--ink)}
.tabbar a.active svg{stroke:var(--ink)}
/* Transition liquide : un pill lime glisse vers l'onglet actif (injecte par JS, initTabbarThumb).
   Sans JS, chaque onglet actif garde sa pastille lime (degradation propre). */
/* width/height ne sont PAS dans la transition: les animer relayoute a chaque frame et l'anim se
   fait doubler par le rendu de la vue d'arrivee. Les crans etant a largeur egale, transform suffit. */
.tabbar-thumb{position:absolute;top:0;left:0;width:0;height:0;border-radius:var(--r-md);background:var(--lime);box-shadow:inset 0 0 0 2px var(--ink);pointer-events:none;opacity:0;z-index:0;transition:transform .34s cubic-bezier(.22,1,.36,1),opacity .2s ease}
.tabbar.has-thumb a,.tabbar.has-thumb .tabbar-more{position:relative;z-index:1}
.tabbar.has-thumb a.active{background:transparent;box-shadow:none}
@media(prefers-reduced-motion:reduce){.tabbar-thumb{transition:opacity .2s ease}}
/* Hover unifie des boutons de controle clairs : un voile lime translucide monte du bas au survol.
   L'etat actif/selectionne reste lime PLEIN -> survol != selectionne. Place APRES les regles de
   base pour que background-image gagne sur le raccourci `background` des boutons (paper/#fff). */
.lib-filter,.filter-dd-btn,.sport-btn,.pref-pick,.account-btn,.icon-btn,.monde-ctrl button,.menu-days button,.apropos-btn,.tag-edit-btn{background-image:linear-gradient(rgba(201,255,59,.55),rgba(201,255,59,.55));background-repeat:no-repeat;background-position:50% 100%;background-size:100% 0;transition:background-size .22s cubic-bezier(.22,1,.36,1),transform .15s ease}
@media(hover:hover){.lib-filter:hover,.filter-dd-btn:hover,.sport-btn:hover,.pref-pick:hover,.account-btn:hover,.icon-btn:hover{background-size:100% 100%}}
@media(prefers-reduced-motion:reduce){.lib-filter,.filter-dd-btn,.sport-btn,.pref-pick,.account-btn,.icon-btn,.monde-ctrl button,.menu-days button,.apropos-btn,.tag-edit-btn{transition:none}}
/* --- Hovers des actions recette (grille .recipe-actions) --- */
/* Voile lime sur les actions neutres (exclut Remix/Favoris/Frichti/Sommelier + hero lime + upgrade cobalt, qui ont leur propre traitement). */
.recipe-actions .secondary:not(.remix-recipe):not(.fav-recipe):not(.frichti):not(.beverage):not(.cook):not(.act-hero):not(.upgrade){background-image:linear-gradient(rgba(201,255,59,.55),rgba(201,255,59,.55));background-repeat:no-repeat;background-position:50% 100%;background-size:100% 0;transition:background-size .22s cubic-bezier(.22,1,.36,1)}
/* Favoris : voile « love » (rouge tendre --love, pas le rouge alerte). Frichti : voile jaune frichti. */
.recipe-actions .secondary.fav-recipe:not(.on){background-image:linear-gradient(var(--love),var(--love));background-repeat:no-repeat;background-position:50% 100%;background-size:100% 0;transition:background-size .22s cubic-bezier(.22,1,.36,1)}
.recipe-actions .secondary.frichti{background-image:linear-gradient(var(--frichti),var(--frichti));background-repeat:no-repeat;background-position:50% 100%;background-size:100% 0;transition:background-size .22s cubic-bezier(.22,1,.36,1)}
/* Remix : voile lime PLEIN (bouton sombre) qui monte, comme les autres, pour qu'on comprenne que c'est cliquable. */
.recipe-actions .secondary.remix-recipe{background-image:linear-gradient(var(--lime),var(--lime));background-repeat:no-repeat;background-position:50% 100%;background-size:100% 0;transition:background-size .22s cubic-bezier(.22,1,.36,1)}
@media(hover:hover){
  .recipe-actions .secondary:not(.remix-recipe):not(.fav-recipe):not(.frichti):not(.beverage):not(.cook):not(.act-hero):not(.upgrade):hover,
  .recipe-actions .secondary.fav-recipe:not(.on):hover,
  .recipe-actions .secondary.frichti:hover{background-size:100% 100%;filter:none}
  /* Remix : voile lime + texte/icone ink (lisibles sur lime) + les curseurs du mixeur dansent (equalizer). */
  .recipe-actions .secondary.remix-recipe:hover{background-size:100% 100%;color:var(--ink)}
  .recipe-actions .secondary.remix-recipe:hover .kick-ic{stroke:var(--ink)}
  .recipe-actions .secondary.remix-recipe:hover .kick-ic circle{fill:var(--ink);animation:eqbob .5s ease-in-out infinite}
  .recipe-actions .secondary.remix-recipe:hover .kick-ic circle:nth-of-type(2){animation-delay:.12s}
  .recipe-actions .secondary.remix-recipe:hover .kick-ic circle:nth-of-type(3){animation-delay:.24s}
}
@keyframes eqbob{0%,100%{transform:translateY(1.4px)}50%{transform:translateY(-1.4px)}}
@media(prefers-reduced-motion:reduce){.recipe-actions .secondary{transition:none}.recipe-actions .secondary.remix-recipe:hover .kick-ic circle{animation:none}}
/* #exportRecipe et #remixBtn ont un override PAR ID plus haut (`background:` raccourci) qui reset
   background-image/size -> le voile disparaissait UNIQUEMENT sur ces 2 boutons. On re-pose le voile
   a specificite ID (memes selecteurs, plus bas -> gagnent). Ne touche pas la couleur de fond de repos. */
#exportRecipe.secondary{background-image:linear-gradient(rgba(201,255,59,.55),rgba(201,255,59,.55));background-repeat:no-repeat;background-position:50% 100%;background-size:100% 0;transition:background-size .22s cubic-bezier(.22,1,.36,1)}
#remixBtn.remix-recipe{background-image:linear-gradient(var(--lime),var(--lime));background-repeat:no-repeat;background-position:50% 100%;background-size:100% 0;transition:background-size .22s cubic-bezier(.22,1,.36,1)}
@media(hover:hover){#exportRecipe.secondary:hover{background-size:100% 100%}#remixBtn.remix-recipe:hover{background-size:100% 100%;color:var(--ink)}}

/* Composer : le CTA fixe « Generer la recette » ne doit plus recouvrir le champ/les suggestions de recherche.
   L'animation d'entree .panel laisse un transform (fill both) qui fait du panel un stacking context :
   la liste de suggestions y est piegee sous la barre fixe. On termine l'animation du panel composer sur
   transform:none (plus de stacking context), et on remonte la liste au-dessus de la barre (z-index 30). */
@keyframes slidein{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
#view-generate .panel.inputs{animation-name:slidein}
#view-generate .combo-list{z-index:31}

/* Celebration sobre d'un jalon poids: badge en grand + halo lime, motion douce */
.mc-overlay{position:fixed;inset:0;z-index:80;background:rgba(21,19,15,.45);display:grid;place-items:center;padding:24px}
.mc-card{position:relative;display:grid;justify-items:center;gap:10px;max-width:340px;width:100%;border:2px solid var(--ink);border-radius:22px;background:var(--paper);box-shadow:5px 5px 0 var(--ink);padding:28px 22px 20px;text-align:center;animation:mcPop .38s cubic-bezier(.34,1.4,.5,1) both}
.mc-halo{position:absolute;top:14px;width:130px;height:130px;border-radius:50%;background:var(--lime);filter:blur(26px);opacity:.55;animation:mcHalo 2.4s ease-in-out infinite}
.mc-badge{position:relative;width:104px;height:104px;border-radius:50%;border:2.5px solid var(--ink);background:var(--paper);object-fit:cover}
.mc-badge-svg{display:grid;place-items:center;color:var(--ink)}
.mc-badge-svg svg{width:52px;height:52px}
.mc-kg{position:relative;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:44px;line-height:.9;letter-spacing:0.01em}
.mc-title{position:relative;font-size:20px;font-weight:950;line-height:1.15;letter-spacing:-.01em}
.mc-sub{margin:0;font-size:13px;font-weight:850;color:var(--muted)}
.mc-btns{display:grid;gap:8px;width:100%;margin-top:6px}
.mc-share{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);font:inherit;font-weight:950;padding:11px 14px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.mc-close{border:2px solid var(--ink);border-radius:999px;background:var(--paper);color:var(--ink);font:inherit;font-weight:900;padding:9px 14px;cursor:pointer}
.mc-share:active,.mc-close:active{transform:translate(1px,1px);box-shadow:none}
@keyframes mcPop{from{transform:scale(.82);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes mcHalo{0%,100%{transform:scale(1);opacity:.55}50%{transform:scale(1.12);opacity:.4}}
@media(prefers-reduced-motion:reduce){.mc-card{animation:none}.mc-halo{animation:none}}

/* ============================================================
   Recipe page demo — image-first, calm actions, readable cooking
   ============================================================ */
.recipe-view .recipe-card{display:block;padding:0;border-radius:var(--r-lg);overflow:visible;background:var(--paper)}
.recipe-view .recipe-hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(360px,.92fr);border-bottom:2px solid var(--ink);min-width:0}
.recipe-view .recipe-overview{min-width:0;padding:34px 32px 30px;display:flex;flex-direction:column;align-items:flex-start}
.recipe-view .recipe-overview #recipeTitle{font-size:clamp(42px,4.8vw,68px);line-height:.88;max-width:13ch}
.recipe-view .recipe-overview #recipeDescription{max-width:58ch;margin:16px 0 0}
.recipe-view .recipe-overview .meta{margin-top:18px}
.recipe-view .image-panel{position:relative;top:auto;order:initial;display:grid;grid-template-rows:minmax(0,1fr) auto;gap:10px;align-self:stretch;padding:16px;border-right:2px solid var(--ink);min-width:0}
.recipe-view .image-slot{height:100%;min-height:520px;border-radius:var(--r-md);box-shadow:none;background:var(--ink)}
.recipe-view .image-carousel-main{height:100%;min-height:0;aspect-ratio:auto}
.recipe-view .image-slot.is-empty{position:relative;background:var(--soft) url('/static/heroes/hero-generique.webp') center/cover no-repeat;color:var(--ink)}
.recipe-view .image-slot.is-empty::after{content:"";position:absolute;inset:0;background:rgba(255,250,240,.18);pointer-events:none}
.recipe-view .image-slot.is-empty>*{position:relative;z-index:1}
.recipe-view .photo-style-block{margin:0;border:1px solid var(--line);border-radius:var(--r-md);box-shadow:none;background:var(--paper)}
.recipe-view .photo-style-block>summary{padding:10px 12px;text-transform:none;letter-spacing:0;font-size:12px}
.recipe-view .photo-style-block>summary::after{background:var(--paper);box-shadow:none;width:24px;height:24px;border-width:1px}

.recipe-view .recipe-actions{width:100%;display:grid;grid-template-columns:minmax(190px,1fr) auto;gap:10px;align-items:center;margin:auto 0 0;padding-top:22px;position:relative}
.recipe-view .recipe-actions #cookModeBtn{min-height:50px!important;width:100%!important;padding:12px 18px!important;border-radius:var(--r-pill)!important;background:var(--lime)!important;color:var(--ink)!important;box-shadow:var(--sh-int)!important;font-size:15px!important}
.recipe-view .recipe-quick-actions{position:relative;display:flex;align-items:center;justify-content:flex-end;gap:8px}
.recipe-view .recipe-quick-actions .recipe-icon-action,.recipe-view .recipe-more>summary{position:relative;width:44px!important;min-width:44px!important;height:44px!important;min-height:44px!important;padding:0!important;margin:0!important;border:2px solid var(--ink)!important;border-radius:50%!important;background:var(--paper)!important;color:var(--ink)!important;box-shadow:none!important;display:grid!important;place-items:center;cursor:pointer;list-style:none;font-size:0!important;transition:transform .18s cubic-bezier(.16,1,.3,1),background-color .18s ease}
.recipe-view .recipe-more>summary::-webkit-details-marker{display:none}
.recipe-view .recipe-quick-actions .recipe-icon-action .kick-ic,.recipe-view .recipe-more>summary .kick-ic{position:absolute;top:50%;left:50%;display:block;width:20px;height:20px;margin:0;transform:translate(-50%,-50%);justify-self:auto;align-self:auto}
.recipe-view .recipe-quick-actions .recipe-icon-action:hover,.recipe-view .recipe-more>summary:hover{background:var(--soft)!important;transform:translateY(-1px)!important}
.recipe-view .recipe-quick-actions .recipe-icon-action:active,.recipe-view .recipe-more>summary:active{transform:translateY(1px)!important}
.recipe-view .recipe-quick-actions #favRecipeBtn.on{background:var(--lime)!important}
.recipe-view .recipe-more{position:static}
.recipe-view .recipe-more[open]>summary{background:var(--ink)!important;color:var(--bone)!important}
.recipe-view .recipe-action-menu{position:absolute;z-index:12;right:0;bottom:54px;width:min(540px,calc(100vw - 40px));max-height:min(620px,72vh);overflow:auto;border:2px solid var(--ink);border-radius:var(--r-lg);background:var(--paper);box-shadow:var(--sh-card);padding:18px;display:grid;gap:18px;animation:recipeMenuIn .22s cubic-bezier(.16,1,.3,1) both}
.recipe-view .recipe-action-menu-head{display:grid;gap:2px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.recipe-view .recipe-action-menu-head small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.recipe-view .recipe-action-menu-head strong{font-size:23px;letter-spacing:-.035em}
.recipe-view .recipe-action-menu .act-group{gap:7px}
.recipe-view .recipe-action-menu .act-group>small{font-size:11px}
.recipe-view .recipe-action-menu .act-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.recipe-view .recipe-action-menu .secondary{min-height:42px!important;font-size:12.5px!important;padding:9px 8px!important;border-radius:var(--r-sm)!important}
.recipe-view .recipe-action-menu .act-group--util .act-row{grid-template-columns:1fr}
.recipe-view .recipe-action-menu .act-group--util button{justify-self:stretch;opacity:1;background:var(--paper)!important}
@keyframes recipeMenuIn{from{opacity:0;transform:translateY(-8px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(hover:hover){
  .recipe-view .recipe-quick-actions [data-tip]::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 9px);left:50%;transform:translate(-50%,4px);z-index:14;pointer-events:none;white-space:nowrap;border-radius:var(--r-sm);background:var(--ink);color:var(--bone);padding:6px 8px;font-size:11px;font-weight:850;line-height:1;opacity:0;transition:opacity .14s ease,transform .14s ease}
  .recipe-view .recipe-quick-actions [data-tip]:hover::after,.recipe-view .recipe-quick-actions [data-tip]:focus-visible::after{opacity:1;transform:translate(-50%,0)}
  .recipe-view .recipe-more[open]>summary::after{display:none}
}

.recipe-view .recipe-main{padding:32px}
.recipe-view .recipe-reading-grid{display:grid;grid-template-columns:minmax(300px,.78fr) minmax(0,1.22fr);gap:42px;align-items:start}
.recipe-view .recipe-reading-grid>section{border-top:2px solid var(--ink);padding-top:14px;min-width:0}
.recipe-view .recipe-reading-grid h3{margin:0 0 14px;font-size:30px;line-height:.95}
.recipe-view .recipe-steps #steps{margin:0;padding-left:28px}
.recipe-view .recipe-steps #steps li{padding:0 0 14px 4px;margin-bottom:14px;border-bottom:1px dashed var(--line)}
.recipe-view .recipe-steps #steps li:last-child{border-bottom:0}
.recipe-view .related-preps{margin:18px 0 24px;padding-top:16px;border-top:1px solid var(--line)}
.recipe-view .related-preps>header{display:flex;align-items:center;gap:10px;margin-bottom:11px}
.recipe-view .related-preps>header>span:last-child{display:grid;gap:1px;min-width:0}
.recipe-view .related-preps>header small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;line-height:1.2;font-weight:900;text-transform:uppercase;letter-spacing:.075em;color:var(--cobalt)}
.recipe-view .related-preps>header strong{font-size:18px;line-height:1.1;letter-spacing:-.025em}
.recipe-view .related-preps-mark{width:34px;height:34px;display:grid;place-items:center;flex:0 0 auto;border:2px solid var(--ink);border-radius:50%;background:var(--lime)}
.recipe-view .related-preps-mark svg{width:18px;height:18px}
.recipe-view .related-preps-list{display:grid;gap:10px}
.recipe-view .related-prep-item{border:2px solid var(--ink);border-radius:var(--r-md);background:var(--paper);box-shadow:var(--sh-card);overflow:hidden;transition:transform .18s cubic-bezier(.16,1,.3,1),box-shadow .18s cubic-bezier(.16,1,.3,1)}
.recipe-view .related-prep-item:has(.related-prep-card:hover){transform:translateY(-1px);box-shadow:5px 5px 0 var(--ink)}
.recipe-view .related-prep-item:has(.related-prep-card:active){transform:translate(1px,1px);box-shadow:2px 2px 0 var(--ink)}
.recipe-view .related-prep-card{display:grid;grid-template-columns:76px minmax(0,1fr) 34px;gap:12px;align-items:center;padding:8px;color:var(--ink);text-decoration:none}
.recipe-view .related-prep-card>img,.recipe-view .related-prep-fallback{display:block;width:76px;height:76px;border-radius:var(--r-sm);object-fit:cover;background:var(--soft)}
.recipe-view .related-prep-fallback{display:grid;place-items:center;color:var(--ink)}
.recipe-view .related-prep-fallback svg{width:31px;height:31px}
.recipe-view .related-prep-copy{display:grid;gap:3px;min-width:0}
.recipe-view .related-prep-copy small{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;font-weight:900;text-transform:uppercase;letter-spacing:.07em;color:var(--cobalt)}
.recipe-view .related-prep-copy strong{font-size:16px;line-height:1.12;letter-spacing:-.02em}
.recipe-view .related-prep-copy>span{font-size:11.5px;line-height:1.25;font-weight:800;color:var(--muted)}
.recipe-view .related-prep-open{width:32px;height:32px;display:grid;place-items:center;border:1px solid var(--ink);border-radius:50%;background:var(--paper)}
.recipe-view .related-prep-open svg{width:16px;height:16px}
.recipe-view .related-prep-express{border-top:1px solid var(--line);background:rgba(235,226,207,.28)}
.recipe-view .related-prep-express>summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;font-size:11.5px;font-weight:900}
.recipe-view .related-prep-express>summary::-webkit-details-marker{display:none}
.recipe-view .related-prep-express>summary>span:last-child{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.recipe-view .related-prep-express>summary::after{content:"+";font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:15px;margin-left:auto}
.recipe-view .related-prep-express[open]>summary::after{content:"\2013"}
.recipe-view .related-prep-express>ol{margin:0;padding:0 14px 12px 30px;font-size:12px;line-height:1.42;color:var(--ink)}
.recipe-view .related-prep-express>ol li+li{margin-top:5px}

/* Choix visuels du composer. Ces deux reglages vivaient dans le repli « Reglages avances »,
   que la plupart des gens n'ouvraient jamais: ils sortent a l'air libre, avant le bouton de
   generation, avec leurs valeurs par defaut inchangees. Vrais boutons radio, pas des div
   cliquables: navigation au clavier et lecteurs d'ecran fonctionnent sans code. */
.picks{display:grid;gap:var(--sp-2);margin:var(--sp-3) 0 var(--sp-2)}
/* Le fieldset reste un bloc simple et la GRILLE vit dans un div interne: un <legend> a
   l'interieur d'un fieldset en display:grid se place differemment selon les navigateurs. */
.pick{border:0;margin:0;padding:0;min-width:0}
.pick legend{padding:0 0 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.pick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.pick-tile{display:block;min-width:0;cursor:pointer}
.pick-tile input{position:absolute;opacity:0;width:1px;height:1px;margin:0}
.pick-body{display:grid;gap:3px;justify-items:center;text-align:center;border:2px solid var(--ink);border-radius:var(--r-md);background:var(--paper);box-shadow:2px 2px 0 var(--ink);padding:11px 8px;min-height:96px;align-content:center;transition:transform .12s ease,background .12s ease}
.pick-tile:hover .pick-body{transform:translateY(-2px)}
.pick-ic{width:28px;height:28px;color:var(--ink)}
.pick-body b{font-size:14px;font-weight:950;letter-spacing:-.01em;line-height:1.15}
.pick-body i{font-style:normal;font-size:11.5px;font-weight:750;line-height:1.25;color:var(--muted)}
.pick-tile input:checked + .pick-body{background:var(--lime)}
.pick-tile input:checked + .pick-body i{color:var(--ink)}
/* la bordure de focus doit rester visible: le radio lui-meme est masque */
.pick-tile input:focus-visible + .pick-body{box-shadow:0 0 0 4px rgba(201,255,59,.55),2px 2px 0 var(--ink)}
@media(max-width:520px){.pick-grid{grid-template-columns:1fr}.pick-body{min-height:0;grid-template-columns:24px 1fr;justify-items:start;text-align:left;gap:2px 10px;padding:10px 12px}.pick-ic{grid-row:1/3}.pick-body b,.pick-body i{grid-column:2}}

/* Image d'etape. Non scopee: elle doit tomber aussi bien dans l'app que sur les pages
   publiques, qui partagent desormais la racine .recipe-view. */
.step-shot{margin:12px 0 2px;max-width:460px;position:relative;border:2px solid var(--ink);border-radius:var(--r-md);overflow:hidden;background:var(--ink)}
/* gpt-image-2 rend un ratio different a chaque image: on recadre, sinon la colonne fait des marches. */
.step-shot img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover}
.step-shot figcaption{position:absolute;left:0;right:0;bottom:0;padding:9px 13px;background:linear-gradient(transparent,rgba(21,19,15,.88) 42%);color:var(--paper);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:850;text-transform:uppercase;letter-spacing:.05em;line-height:1.35}
.recipe-view .recipe-insights{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start;margin-top:34px;padding-top:18px;border-top:1px solid var(--line)}
.recipe-view .recipe-insights .budget-panel,.recipe-view .recipe-insights .nutrition-panel{margin:0;padding:0;display:block;border:1px solid var(--line);border-radius:var(--r-md);background:var(--paper);box-shadow:none;overflow:hidden}
.recipe-view .recipe-insights .stat-fold{border:0;padding:0}
.recipe-view .recipe-insights .stat-fold>summary{min-height:78px;padding:14px 15px;gap:10px}
.recipe-view .recipe-insights .stat-fold>summary::after{min-width:28px;width:28px;height:28px;border:1px solid var(--ink);background:var(--paper);box-shadow:none}
.recipe-view .recipe-insights .stat-fold[open]>summary{background:var(--paper);border-bottom:1px solid var(--line)}
.recipe-view .recipe-insights .budget-head,.recipe-view .recipe-insights .nutrition-head{gap:5px;min-width:0}
.recipe-view .recipe-insights .budget-head small,.recipe-view .recipe-insights .nutrition-head small{color:var(--ink);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;line-height:1.25}
.recipe-view .recipe-insights .budget-head strong,.recipe-view .recipe-insights .nutrition-head strong{font-size:18px;line-height:1.15;letter-spacing:-.025em}
.recipe-view .recipe-insights .budget-head strong{align-items:baseline;gap:5px}
.recipe-view .recipe-insights .budget-value{font-size:20px;color:var(--ink)}
.recipe-view .recipe-insights .budget-unit{font-size:12px;font-weight:850;letter-spacing:0;color:var(--ink)}
.recipe-view .recipe-insights .stat-fold-body{padding:0 15px 15px;margin-top:14px}
.recipe-view .recipe-insights .stat-fold-body,.recipe-view .recipe-insights .stat-fold-body summary{color:var(--ink)}
.recipe-view .recipe-insights .hscore{font-size:13px;padding:2px 6px;border-radius:var(--r-sm)}
.recipe-view .recipe-insights .nutri{width:24px;height:24px;border-radius:var(--r-sm);box-shadow:none}
.recipe-view .recipe-extras{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:14px}
.recipe-view .recipe-extra,.recipe-view .recipe-editor{border:1px solid var(--line);border-radius:var(--r-md);background:var(--paper);overflow:hidden}
.recipe-view .recipe-extra>summary,.recipe-view .recipe-editor>summary{cursor:pointer;list-style:none;padding:14px 16px;font-weight:900;display:flex;align-items:center;justify-content:space-between;gap:12px}
.recipe-view .recipe-extra>summary::-webkit-details-marker,.recipe-view .recipe-editor>summary::-webkit-details-marker{display:none}
.recipe-view .recipe-extra>summary::after,.recipe-view .recipe-editor>summary::after{content:"+";font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:18px;color:var(--ink)}
.recipe-view .recipe-extra[open]>summary::after,.recipe-view .recipe-editor[open]>summary::after{content:"\2013"}
.recipe-view .recipe-extra[open]>summary,.recipe-view .recipe-editor[open]>summary{border-bottom:1px solid var(--line);background:var(--paper)}
.recipe-view .recipe-extra #why,.recipe-view .recipe-extra #notes{margin:0;padding:16px;font-size:15px;color:var(--ink)}
.recipe-view .recipe-editor{margin-top:14px}
.recipe-view .recipe-editor .assistant{margin:0;border:0;border-radius:0;box-shadow:none;background:var(--paper);color:var(--ink)}
.recipe-view .recipe-editor .assist-sub{color:var(--ink)}

@media(max-width:960px){
  .recipe-view .recipe-hero{grid-template-columns:1fr}
  .recipe-view .image-panel{border-right:0;border-bottom:2px solid var(--ink);padding:12px}
  .recipe-view .image-slot{min-height:0;aspect-ratio:16/11;height:auto}
  .recipe-view .image-carousel-main{aspect-ratio:16/11}
  .recipe-view .recipe-overview{padding:24px 20px 22px}
  .recipe-view .recipe-overview #recipeTitle{font-size:clamp(40px,12vw,58px);max-width:15ch}
  .recipe-view .recipe-main{padding:24px 20px}
  .recipe-view .recipe-reading-grid{grid-template-columns:1fr;gap:30px}
  .recipe-view .related-preps{max-width:620px}
}
@media(max-width:620px){
  .recipe-view #recipeCard{animation:none;transform:none}
  .recipe-view .recipe-actions{grid-template-columns:1fr;padding-top:18px}
  .recipe-view .recipe-quick-actions{justify-content:flex-start}
  .recipe-view .recipe-action-menu{position:fixed;z-index:80;left:12px;right:12px;bottom:calc(76px + env(safe-area-inset-bottom));width:auto;max-height:calc(100dvh - 100px - env(safe-area-inset-top));overscroll-behavior:contain;padding:14px;border-radius:var(--r-lg);animation:recipeSheetIn .24s cubic-bezier(.16,1,.3,1) both}
  .recipe-view .recipe-action-menu .act-row{grid-template-columns:repeat(2,minmax(0,1fr))}
  .recipe-view .recipe-insights,.recipe-view .recipe-extras{grid-template-columns:1fr}
  .recipe-view .recipe-insights .stat-fold>summary{min-height:68px}
  .recipe-view .related-prep-card{grid-template-columns:64px minmax(0,1fr) 30px;gap:10px;padding:7px}
  .recipe-view .related-prep-card>img,.recipe-view .related-prep-fallback{width:64px;height:64px}
  .recipe-view .related-prep-open{width:28px;height:28px}
}
@media(prefers-reduced-motion:reduce){.recipe-view .related-prep-item{transition:none}}
@keyframes recipeSheetIn{from{opacity:0;transform:translateY(18px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(prefers-reduced-motion:reduce){.recipe-view .recipe-action-menu{animation:none}}

/* ===== Bilan de la semaine (pane Suivi) =======================================================
   Surfaces d'info en .card-info (bordure ink, PAS d'ombre): l'ombre est deja portee par le .panel
   du pane, empiler les deux donnait la soupe de la maquette v1. Data-viz sur --dv-a/b/c uniquement.
   Prefixe bs- obligatoire: .hero existe deja (min-height 480px) et ecrase toute tuile qui s'appelle
   comme lui. */
/* Le bilan est une colonne, pas un tableau de bord: etire sur 1440px, 7 barres et 7 cases se
   diluent dans le vide. On plafonne et on centre plutot que de tasser le contenu a gauche. */
#suivi-bilan{max-width:720px;margin-left:auto;margin-right:auto}
.bs-weekbar b{font-size:22px;min-width:190px;display:block}
.bs-weekbar .bs-when{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--cobalt);font-weight:850;margin-top:3px}
.bs-weekbar .day-nav[disabled]{opacity:.3;box-shadow:none;cursor:default}
.bs-empty{color:var(--muted);font-weight:750;line-height:1.4}

.bs-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
/* Sans pesee dans la semaine, la tuile Poids saute: la 3e occupe la ligne au lieu de laisser un trou. */
.bs-stats:has(>:nth-child(3):last-child)>:nth-child(3){grid-column:1/-1}
.bs-stat{padding:12px 14px}
.bs-stat.bs-hero{background:var(--cobalt);border-color:var(--ink);color:var(--paper)}
.bs-stat .k{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;font-weight:850;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.bs-stat.bs-hero .k{color:var(--paper);opacity:.82}
.bs-stat .v{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-weight:400;font-size:33px;line-height:.92;letter-spacing:.01em;margin-top:5px;white-space:nowrap}
.bs-stat .v u{text-decoration:none;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:850;margin-left:3px;color:var(--muted)}
.bs-stat.bs-hero .v u{color:var(--paper);opacity:.8}
.bs-stat .cap{font-size:11.5px;font-weight:750;color:var(--muted);margin-top:4px;line-height:1.3}
.bs-stat.bs-hero .cap{color:var(--paper);opacity:.85}

.bs-card{padding:14px 14px 12px;margin-bottom:12px}
.bs-card>.t{display:flex;align-items:baseline;justify-content:space-between;gap:10px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-weight:400;font-size:19px;text-transform:uppercase;letter-spacing:.01em}
.bs-card>.t em{font-style:normal;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;font-weight:900;color:var(--cobalt);white-space:nowrap}
.bs-legend{display:flex;gap:14px;margin-top:8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;font-weight:850;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.bs-legend i{display:inline-block;width:10px;height:10px;border:2px solid var(--ink);border-radius:3px;vertical-align:-1px;margin-right:5px}
.bs-legend .a i{background:var(--dv-a)}
.bs-legend .b i{background:var(--dv-b)}

.bs-bars{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-top:14px;border-bottom:2px solid var(--ink)}
.bs-col{display:flex;flex-direction:column;align-items:center;justify-content:flex-end}
.bs-pair{display:flex;align-items:flex-end;justify-content:center;gap:2px;height:104px;width:100%}
.bs-bar{width:11px;border:2px solid var(--ink);border-bottom:0;border-radius:4px 4px 0 0}
.bs-bar.a{background:var(--dv-a)}
.bs-bar.b{background:var(--dv-b)}
.bs-col .dow{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:900;margin-top:7px;text-transform:uppercase}
.bs-col .delta{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:850;color:var(--muted);line-height:1.2}
.bs-col.miss .void{width:24px;height:0;border-top:2px dashed var(--dv-c)}
.bs-col.miss .dow,.bs-col.miss .delta{color:var(--dv-c)}

.bs-avgs{display:grid;grid-template-columns:repeat(3,1fr);padding:0;overflow:hidden;margin-bottom:12px}
.bs-avg{padding:12px 10px;text-align:center;border-right:2px solid var(--ink)}
.bs-avg:last-child{border-right:0}
.bs-avg .k{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.bs-avg .v{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-weight:400;font-size:26px;line-height:.95;margin-top:4px}
.bs-avg .goal{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:850;color:var(--muted);margin-top:7px}
.bs-avg .stat-pill{font-size:10px;padding:3px 8px;margin-top:5px}

.bs-days{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-top:11px}
.bs-day{text-align:center}
.bs-day i{display:grid;place-items:center;height:30px;border:2px solid var(--ink);border-radius:var(--r-sm);background:var(--ink)}
.bs-day i svg{width:15px;height:15px;fill:none;stroke:var(--paper);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.bs-day.off i{background:transparent;border-style:dashed;border-color:var(--dv-c)}
.bs-day span{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;font-weight:850;color:var(--muted);margin-top:4px}
.bs-day.off span{color:var(--dv-c)}

.bs-coach{border:2px solid var(--ink);border-radius:var(--r-md);background:var(--ink);color:var(--paper);padding:14px 15px;margin-top:12px}
.bs-coach p{margin:0;font-size:13.5px;line-height:1.45;font-weight:650}
.bs-coach p + p{margin-top:7px}

/* Pastille du lundi sur l'onglet Bilan */
.suivi-tab-dot{display:inline-block;width:7px;height:7px;border-radius:var(--r-pill);background:var(--cobalt);vertical-align:2px;margin-left:5px}
@media(max-width:420px){.suivi-tabs .segctl-btn{padding:8px 2px;font-size:12px}}

/* Vider le frigo: volontairement discret (pas un bouton d'action, une sortie de secours en pied de
   liste). Souligne au survol pour rester atteignable sans crier. */
.frigo-clear{display:block;margin:18px auto 2px;border:0;background:none;color:var(--muted);font:inherit;font-size:12px;font-weight:850;letter-spacing:.02em;cursor:pointer;padding:8px 12px;min-height:42px}
.frigo-clear:hover{color:var(--red);text-decoration:underline}

.fridgepick-surprise{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px 14px;margin:8px 0 12px;padding:12px 0;border-top:2px dashed var(--ink);border-bottom:2px dashed var(--ink)}
.fridgepick-surprise-head{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:12px}
.fridgepick-surprise-head>b{font-size:16px;font-weight:950}
.fridgepick-surprise-head>span{font-size:12px;font-weight:850;color:var(--muted);white-space:nowrap}
.fridgepick-surprise input[type="range"]{width:100%;accent-color:var(--cobalt)}
.fridgepick-surprise .secondary{min-height:44px;padding:10px 16px;white-space:nowrap}
@media(max-width:520px){.fridgepick-list{max-height:42vh}}

/* ===== Play ================================================================================ */
#view-play{max-width:1120px;margin:0 auto;padding:28px 20px 80px}
.play-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:24px;margin:8px 0 28px;padding-bottom:20px;border-bottom:2px solid var(--ink)}
.play-kicker,.play-intro span,.play-titleline small,.play-complete small{display:block;font-size:11px;font-weight:950;letter-spacing:.12em;text-transform:uppercase;color:var(--cobalt)}
.play-head h1{margin:2px 0 0;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(58px,10vw,112px);line-height:.82;letter-spacing:.01em;text-transform:uppercase}
.play-head p{margin:13px 0 0;max-width:45ch;font-size:16px;font-weight:720;color:var(--muted)}
.play-streak{min-width:150px;display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:10px 0;text-align:right}
.play-streak b{font-family:"Bricolage Grotesque","Druk",Impact,sans-serif;font-size:44px;line-height:.8;color:var(--cobalt)}
.play-streak span{max-width:18ch;font-size:12px;font-weight:850;line-height:1.25;color:var(--muted)}
.play-stage{min-height:360px;transition:opacity .18s cubic-bezier(.16,1,.3,1)}
.play-stage.is-busy{opacity:.62;pointer-events:none}
.play-loading{height:260px;display:flex;align-items:center;justify-content:center;gap:7px}
.play-loading i{display:block;width:20px;height:20px;border:2px solid var(--ink);border-radius:5px;background:var(--lime);animation:playLoad .8s cubic-bezier(.16,1,.3,1) infinite alternate;animation-delay:calc(var(--i,0)*70ms)}
.play-loading i:nth-child(2){--i:1}.play-loading i:nth-child(3){--i:2}.play-loading i:nth-child(4){--i:3}.play-loading i:nth-child(5){--i:4}
@keyframes playLoad{to{transform:translateY(-14px) rotate(4deg);background:var(--cobalt)}}
.play-intro{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:12px}.play-intro b{font-size:12px;font-weight:850;color:var(--muted)}
.play-games{display:grid;grid-template-columns:minmax(0,1.28fr) minmax(300px,.72fr);grid-template-rows:repeat(2,minmax(230px,1fr));gap:18px;align-items:stretch}
.play-game-card{position:relative;isolation:isolate;min-height:250px;display:flex;align-items:flex-end;gap:20px;padding:28px;color:var(--paper);text-decoration:none;border:2px solid var(--ink);border-radius:24px;background:var(--ink);box-shadow:6px 6px 0 var(--ink);overflow:hidden;animation:playCardIn .3s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(var(--play-i)*70ms);transition:transform .2s cubic-bezier(.16,1,.3,1),box-shadow .2s cubic-bezier(.16,1,.3,1)}
.play-game-card:first-child{grid-row:1/3;min-height:518px}
.play-game-card:nth-child(2){transform:rotate(1deg)}
.play-game-card:hover{transform:translate(-2px,-3px) rotate(-.4deg);box-shadow:9px 10px 0 var(--ink)}
.play-game-card:nth-child(2):hover{transform:translate(-2px,-3px) rotate(.3deg)}
.play-game-card:active{transform:translate(3px,3px);box-shadow:2px 2px 0 var(--ink)}
.play-game-card.is-done::after{content:"✓";position:absolute;right:18px;top:16px;width:32px;height:32px;display:grid;place-items:center;border:2px solid currentColor;border-radius:50%;font-weight:950}
.play-game-art{position:absolute;z-index:-2;inset:0;overflow:hidden}.play-game-art::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(7,17,38,.03) 22%,rgba(7,17,38,.22) 50%,rgba(7,17,38,.94) 100%)}.play-game-art img{width:100%;height:100%;display:block;object-fit:cover;transition:transform .5s cubic-bezier(.16,1,.3,1),filter .3s ease}.play-game-card:hover .play-game-art img{transform:scale(1.035);filter:saturate(1.06)}
.play-game-icon{position:absolute;left:20px;top:20px;width:54px;height:54px;display:grid;place-items:center;border:2px solid var(--ink);border-radius:16px;background:rgba(255,250,240,.93);color:var(--ink);box-shadow:3px 3px 0 var(--ink);transform:rotate(-3deg);backdrop-filter:blur(5px)}
.play-game-icon svg{width:32px;height:32px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.play-game-copy{position:relative;z-index:1;display:flex;flex:1;min-width:0;flex-direction:column;text-shadow:0 2px 14px rgba(7,17,38,.55)}.play-game-copy small{font-size:10px;font-style:normal;font-weight:950;letter-spacing:.1em;text-transform:uppercase;color:var(--lime);opacity:1}.play-game-copy b{margin-top:5px;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(32px,4.5vw,58px);line-height:.9;letter-spacing:.02em;text-transform:uppercase}.play-game-copy em{margin-top:11px;max-width:32ch;font-size:14px;font-style:normal;font-weight:750;line-height:1.35;opacity:.88}.play-game-arrow{position:relative;z-index:1;font-size:34px;font-weight:900;text-shadow:0 2px 12px rgba(7,17,38,.65)}
.play-footnote{margin:40px 0 0;max-width:58ch;font-size:13px;font-weight:720;color:var(--muted)}
@keyframes playCardIn{from{opacity:0;transform:translateY(16px) rotate(-1deg)}to{opacity:1}}
.play-game-top{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:24px}.play-game-top>span{font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.play-back{display:inline-flex;min-height:44px;align-items:center;color:var(--ink);font-weight:900;text-decoration:none}.play-back:hover{text-decoration:underline}
.play-date-nav{width:min(100%,520px);display:grid;grid-template-columns:48px minmax(0,1fr) 48px;gap:8px;margin:0 0 22px}.play-date-nav>button{min-height:48px;border:2px solid var(--ink);border-radius:14px;background:var(--paper);color:var(--ink);font-family:inherit;font-size:22px;font-weight:950;line-height:1;box-shadow:3px 3px 0 var(--ink);cursor:pointer;transition:transform .14s cubic-bezier(.16,1,.3,1),box-shadow .14s cubic-bezier(.16,1,.3,1)}.play-date-nav>button:active:not(:disabled){transform:translate(3px,3px);box-shadow:none}.play-date-nav>button:disabled{opacity:.34;cursor:not-allowed;box-shadow:none}.play-date-nav label{position:relative;min-width:0;display:grid;place-items:center;padding:7px 14px;border:2px solid var(--ink);border-radius:14px;background:var(--bone);cursor:pointer}.play-date-nav label:focus-within{box-shadow:inset 0 0 0 3px var(--cobalt)}.play-date-nav label span{font-size:9px;font-weight:950;letter-spacing:.1em;text-transform:uppercase;color:var(--cobalt)}.play-date-nav label b{max-width:100%;overflow:hidden;font-size:14px;line-height:1.2;text-overflow:ellipsis;white-space:nowrap}.play-date-nav input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.play-archive-notice{max-width:720px;display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:center;margin:0 0 22px;padding:12px 15px;border:2px solid var(--ink);border-radius:14px;background:var(--bone);box-shadow:3px 3px 0 var(--ink);transform:rotate(-.3deg)}.play-archive-notice b{font-size:10px;font-weight:950;letter-spacing:.08em;text-transform:uppercase;color:var(--cobalt);white-space:nowrap}.play-archive-notice span{font-size:12px;font-weight:760;line-height:1.35;color:var(--muted)}
.play-game-layout{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:34px;align-items:start}.play-game-main{min-width:0}
.play-titleline{display:flex;align-items:center;gap:16px}.play-titleline>div{min-width:0}.play-titleline .play-game-icon{width:56px;height:56px;flex:0 0 auto;border-radius:15px;background:var(--lime);box-shadow:3px 3px 0 var(--ink)}.play-titleline .play-game-icon svg{width:32px;height:32px}.play-titleline h2{margin:2px 0 0;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;font-size:clamp(34px,6vw,64px);line-height:.9;letter-spacing:.01em;word-spacing:.1em;text-transform:uppercase}
.play-help{margin:15px 0 20px;max-width:56ch;font-size:14px;font-weight:720;color:var(--muted)}
.play-side{margin-top:76px;padding:18px;border:2px solid var(--ink);border-radius:18px;background:var(--bone);transform:rotate(1deg)}.play-side>b{font-size:12px;text-transform:uppercase;letter-spacing:.08em}.play-side>p{font-size:13px;line-height:1.45;color:var(--muted)}
.play-legend{display:grid;grid-template-columns:30px 1fr;align-items:center;gap:7px 9px;font-size:11px;font-weight:800}.play-legend span{width:28px;height:28px;display:grid;place-items:center;border:2px solid var(--ink);border-radius:5px;color:var(--ink)}
.play-word-grid{display:grid;gap:7px;width:max-content;margin:0 auto 18px}.play-word-row{display:flex;gap:7px}.play-letter{position:relative;width:clamp(38px,8vw,54px);aspect-ratio:1;display:grid;place-items:center;border:2px solid var(--ink);border-radius:8px;background:var(--paper);font-size:clamp(20px,5vw,30px);font-weight:950;text-transform:uppercase;transition:transform .14s cubic-bezier(.16,1,.3,1),background-color .2s ease,color .2s ease}.play-letter.has-letter{transform:scale(1.04);border-width:3px}.play-letter.is-correct,.play-legend .is-correct,.play-keyboard .is-correct{background:var(--lime)}.play-letter.is-present,.play-legend .is-present,.play-keyboard .is-present{background:#ffcf56}.play-letter.is-absent,.play-legend .is-absent,.play-keyboard .is-absent{background:#777268;color:var(--paper)}.play-letter[class*="is-"]{animation:playFlip .28s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(var(--letter-i)*45ms)}.play-letter-state{position:absolute;right:2px;bottom:1px;font:950 10px/1 "Schibsted Grotesk",sans-serif}
.play-letter.is-given{background:var(--bone);box-shadow:inset 0 -3px 0 rgba(26,26,22,.14)}
@keyframes playFlip{0%{transform:rotateX(0)}50%{transform:rotateX(86deg)}100%{transform:rotateX(0)}}@keyframes playShake{25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}.play-word-grid.is-wrong{animation:playShake .16s ease 2}
.play-keyboard{display:grid;gap:6px;max-width:620px;margin:0 auto}.play-keyboard>div{display:flex;justify-content:center;gap:5px}.play-keyboard button{position:relative;min-width:44px;height:48px;padding:0 7px;border:2px solid var(--ink);border-radius:7px;background:var(--bone);color:var(--ink);font:inherit;font-size:13px;font-weight:950;cursor:pointer;box-shadow:0 2px 0 var(--ink);transition:transform .12s ease}.play-keyboard button:active{transform:translateY(2px);box-shadow:none}.play-keyboard button.is-correct::after,.play-keyboard button.is-present::after,.play-keyboard button.is-absent::after{position:absolute;right:2px;bottom:1px;font-size:9px;line-height:1}.play-keyboard button.is-correct::after{content:"✓"}.play-keyboard button.is-present::after{content:"●"}.play-keyboard button.is-absent::after{content:"×"}.play-keyboard .key-wide{min-width:76px;font-size:10px;text-transform:uppercase}
.play-message{min-height:22px;margin:8px 0;text-align:center;font-size:13px;font-weight:850;color:var(--muted)}.play-message[data-tone="error"]{color:var(--red)}
.play-complete{display:grid;grid-template-columns:minmax(280px,.8fr) minmax(0,1.2fr);grid-template-areas:"copy actions" "rank rank";align-items:center;gap:18px;margin-top:18px;padding:18px;border:2px solid var(--ink);border-radius:18px;background:var(--bone);box-shadow:4px 4px 0 var(--ink)}.play-complete.is-win{background:var(--lime)}.play-complete-copy{grid-area:copy;min-width:0}.play-complete h3{display:block;margin:4px 0 0;font-family:"Bricolage Grotesque",sans-serif;font-size:24px;line-height:1}.play-complete h3:focus-visible{outline:3px solid var(--cobalt);outline-offset:5px;border-radius:3px}.play-complete-actions{grid-area:actions;min-width:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch;gap:9px}.play-complete .primary,.play-complete .secondary{width:100%;min-width:0;min-height:46px;margin:0;display:flex;align-items:center;justify-content:center;text-align:center;white-space:normal}.play-complete .secondary span{display:inline-block;margin-left:5px;transition:transform .16s cubic-bezier(.16,1,.3,1)}.play-complete .secondary:hover span{transform:translateX(3px)}.play-share{grid-column:1/-1;justify-self:end;min-height:44px;padding:7px 4px;border:0;border-bottom:1px solid currentColor;background:transparent;color:var(--ink);font:inherit;font-size:12px;font-weight:850;cursor:pointer}.play-share:hover{border-bottom-width:2px}
#playResultRank{grid-area:rank;min-width:0}
.play-replay{min-height:44px;padding:7px 4px;border:0;border-bottom:1px solid currentColor;background:transparent;color:var(--ink);font:inherit;font-size:12px;font-weight:850;cursor:pointer}.play-replay:hover{border-bottom-width:2px}
.play-error{max-width:520px;margin:60px auto;padding:24px;border:2px solid var(--ink);border-radius:20px;background:var(--paper);box-shadow:5px 5px 0 var(--ink)}.play-error b{font-size:22px}.play-error p{color:var(--red);font-weight:750}
.cw-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,360px);gap:28px;align-items:start}.cw-grid{display:grid;grid-template-columns:repeat(var(--cw-cols),var(--cw-cell));grid-auto-rows:var(--cw-cell);width:max-content;max-width:100%;margin:0 auto;padding:8px;border:2px solid var(--ink);border-radius:12px;background:var(--ink);gap:2px;overflow:hidden}.cw-block{background:var(--ink)}.cw-cell{position:relative;display:block;background:var(--paper);border-radius:2px;transition:transform .14s ease,background-color .18s ease}.cw-cell small{position:absolute;left:2px;top:1px;z-index:1;font-size:8px;font-weight:950;line-height:1;pointer-events:none}.cw-state{position:absolute;right:2px;bottom:1px;z-index:1;font-size:9px;font-weight:950;line-height:1;pointer-events:none}.cw-cell input{width:100%;height:100%;padding:4px 1px 0;border:0;outline:0;background:transparent;color:var(--ink);font:950 calc(var(--cw-cell)*.52)/1 "Bricolage Grotesque",sans-serif;text-align:center;text-transform:uppercase}.cw-cell:focus-within{background:#dbe6ff;box-shadow:inset 0 0 0 3px var(--cobalt)}.cw-cell.is-correct{background:var(--lime)}.cw-cell.is-wrong{background:#ffd7d2;animation:playShake .16s ease 2}
.cw-clues{display:grid;gap:20px}.cw-clue-group h3{display:block;margin:0 0 7px;font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--cobalt)}.cw-clue-group button{width:100%;min-height:44px;display:grid;grid-template-columns:26px minmax(0,1fr) auto;align-items:center;gap:8px;padding:9px 8px;border:0;border-top:1px solid var(--ink);background:transparent;color:var(--ink);font:inherit;font-size:12px;font-weight:750;line-height:1.35;text-align:left;cursor:pointer}.cw-clue-group button:last-child{border-bottom:1px solid var(--ink)}.cw-clue-group button span{font-weight:950}.cw-clue-group button i{font-size:12px;font-style:normal;font-weight:950}.cw-clue-group button.active{background:var(--bone);box-shadow:inset 4px 0 0 var(--cobalt)}.cw-clue-group button.is-correct{background:var(--lime)}.cw-actions{display:flex;justify-content:center;gap:9px;margin-top:16px}.cw-actions button{min-height:46px}
@media(max-width:760px){#view-play{padding:18px 14px 92px}.play-head{grid-template-columns:1fr;gap:8px;align-items:start}.play-head h1{font-size:72px}.play-streak{justify-content:flex-start;text-align:left}.play-games,.play-game-layout,.cw-layout{grid-template-columns:1fr}.play-games{grid-template-rows:none}.play-game-card,.play-game-card:first-child,.play-game-card:nth-child(2){grid-row:auto;min-height:250px;aspect-ratio:3/2;padding:20px;transform:none}.play-game-card:nth-child(2):hover{transform:translate(-2px,-3px)}.play-game-icon{left:16px;top:16px;width:48px;height:48px}.play-game-icon svg{width:28px;height:28px}.play-date-nav{width:100%}.play-archive-notice{grid-template-columns:1fr;gap:4px;transform:none}.play-side{display:none}.play-keyboard button{min-width:0;flex:1;height:46px;padding:0 3px}.play-keyboard .key-wide{flex:1.5}.play-complete{grid-template-columns:1fr;grid-template-areas:"copy" "actions" "rank";align-items:stretch}.play-complete-actions{grid-template-columns:1fr}.play-share,.play-replay{justify-self:start}.cw-clues{grid-template-columns:1fr 1fr}.cw-grid{margin-inline:auto}.cw-actions{position:sticky;bottom:78px;z-index:2;padding:8px;background:rgba(255,250,240,.94);border-radius:14px}}
@media(max-width:430px){.play-game-card{grid-template-columns:auto minmax(0,1fr)}.play-game-arrow{display:none}.play-game-copy b{font-size:32px}.play-letter{width:min(46px,calc((100vw - 56px)/7));border-radius:6px}.cw-clues{grid-template-columns:1fr}.play-titleline{gap:12px}.play-titleline h2{font-size:32px;word-spacing:.12em}}
@media(prefers-reduced-motion:reduce){.play-loading i,.play-game-card,.play-letter[class*="is-"],.play-word-grid.is-wrong,.cw-cell.is-wrong{animation:none}.play-game-card,.play-game-art img,.play-letter,.cw-cell,.play-stage,.play-date-nav>button,.play-complete .secondary span{transition:none}}
@media(forced-colors:active){.play-letter.is-correct,.play-keyboard .is-correct,.cw-cell.is-correct,.cw-clue-group button.is-correct{border:3px solid CanvasText}.play-letter.is-present,.play-keyboard .is-present{border:3px dashed CanvasText}.play-letter.is-absent,.play-keyboard .is-absent,.cw-cell.is-wrong{border:3px double CanvasText}.cw-clue-group button.active{outline:3px solid Highlight;outline-offset:-3px}}

/* --- Compagnon vocal du Mode Cuisine --- */
/* Le bouton flotte dans la nav sans la retrecir : Precedent et Suivant restent atteignables
   au pouce a tout moment, la recette ne depend jamais du compagnon. */
/* .cook-nav button porte flex:1 et une specificite superieure : sans la prefixer par
   .cook-nav, le bouton s'etirait en ellipse sur les larges ecrans. */
.cook-nav .cook-voice-btn{flex:0 0 auto;width:56px;height:56px;padding:0;border:2px solid var(--ink);border-radius:50%;background:var(--paper);box-shadow:3px 3px 0 var(--ink);cursor:pointer;display:grid;place-items:center;touch-action:none;-webkit-user-select:none;user-select:none}
.cook-voice-btn.hidden{display:none}
.cook-voice-btn svg{width:26px;height:26px;fill:none;stroke:var(--ink);stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
.cook-voice-btn[data-state="ecoute"]{background:var(--lime);box-shadow:none;transform:translate(2px,2px)}
.cook-voice-btn[data-state="pense"]{background:var(--soft)}
.cook-voice-btn[data-state="parle"]{background:var(--cobalt)}
.cook-voice-btn[data-state="parle"] svg{stroke:var(--paper)}
.cook-voice-btn[data-state="panne"]{background:var(--red)}
.cook-voice-btn[data-state="panne"] svg{stroke:#fff}
/* halo d'ecoute : anime seulement si l'utilisateur ne demande pas moins de mouvement */
@media(prefers-reduced-motion:no-preference){
  .cook-voice-btn[data-state="ecoute"]{animation:cvPulse 1.1s ease-out infinite}
  @keyframes cvPulse{0%{box-shadow:0 0 0 0 rgba(201,255,59,.9)}100%{box-shadow:0 0 0 14px rgba(201,255,59,0)}}
}
/* Chaque reponse s'affiche aussi en texte : a l'oral on execute sans relire, et la mascotte
   conseille des substitutions. C'est le garde-fou allergenes cote affichage. */
.cook-voice-transcript{flex:0 0 auto;max-height:104px;overflow-y:auto;margin:0 0 10px;padding:10px 12px;border:2px solid var(--ink);border-radius:var(--r-md);background:var(--paper);box-shadow:var(--sh-int)}
.cook-voice-transcript.hidden{display:none}
.cv-line{margin:0 0 6px;font-size:13px;line-height:1.35;font-weight:750}
.cv-line:last-child{margin-bottom:0}
.cv-moi{color:var(--muted)}
.cv-moi:before{content:"toi · ";font-family:ui-monospace,Menlo,monospace;font-size:10px;font-weight:900;text-transform:uppercase}
.cv-umay:before{content:"umay · ";font-family:ui-monospace,Menlo,monospace;font-size:10px;font-weight:900;text-transform:uppercase;color:var(--cobalt)}
/* Nom de la voix, cliquable pour cycler. Discret : c'est un reglage, pas une action. */
.cook-nav .cook-voice-name{flex:0 0 auto;border:2px solid var(--ink);border-radius:var(--r-pill);background:var(--paper);padding:0 12px;height:56px;font-family:ui-monospace,Menlo,monospace;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.04em;box-shadow:var(--sh-int);cursor:pointer}
.cook-voice-name.hidden{display:none}

/* Menu de voix. Aucun composant nouveau : bordure ink 2px, rayon r-md, ombre sh-card et
   pastille lime pour l'element actif, exactement comme .segctl-btn.active. */
.cook-voice-wrap{position:relative;flex:0 0 auto;display:flex}
.cook-voice-menu{position:absolute;bottom:calc(100% + 8px);right:0;z-index:5;display:flex;flex-direction:column;gap:4px;min-width:132px;border:2px solid var(--ink);border-radius:var(--r-md);background:var(--paper);box-shadow:var(--sh-card);padding:4px}
.cook-voice-menu.hidden{display:none}
.cook-voice-menu button{width:100%;flex:none;margin:0;border:0;background:transparent;border-radius:var(--r-sm);padding:9px 12px;font:inherit;font-weight:900;font-size:13px;text-align:left;color:var(--ink);cursor:pointer;box-shadow:none}
.cook-voice-menu button[aria-checked="true"]{background:var(--lime);box-shadow:inset 0 0 0 2px var(--ink)}

/* Pastille allergene. Rouge et en tete des pastilles : c'est la seule de la serie qui puisse
   envoyer quelqu'un aux urgences, elle ne doit pas se lire comme « De saison ». */
.tag-pill.allergen{background:var(--red);color:#fff;border-color:var(--ink)}
/* Bandeau de fiche. Le bandeau aversions existe deja (#recipeDislikes) ; l'allergene reprend
   sa place mais pas son ton : preference contre risque medical. */
.recipe-allergen{background:var(--red-soft);border:2px solid var(--ink);border-radius:16px;padding:11px 13px;font-weight:900;box-shadow:3px 3px 0 var(--ink)}

/* Marquage allergene sur l'ingredient lui-meme : la ou on l'achete (liste de courses) et la
   ou on le manipule (Mode Cuisine). Le verdict vient du serveur, pas d'un scan navigateur.
   Selecteurs PREFIXES par la ligne : .shopping-row em et .cook-ing-row em posent deja une
   couleur muette, et gagnaient en specificite -- la pastille sortait en gris sur rouge. */
.shopping-row .shop-allergen,.cook-ing-row .cook-ing-allergen{font-style:normal;display:inline-block;margin-left:8px;padding:2px 7px;border-radius:999px;background:var(--red);color:#fff;font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.05em;vertical-align:middle;white-space:nowrap}
.shopping-row.allergen>span,.cook-ing-row.allergen>span{color:var(--red)}
.cook-ing-row.allergen{border-left:3px solid var(--red);padding-left:8px}
/* --- Assistant vocal global -------------------------------------------------------------
   Il n'y a plus de bouton flottant : le micro reserve aux admins vivait en bas a droite, la ou
   le comptoir de la mascotte s'installe desormais, et il faisait double emploi avec elle. La
   mascotte est la seule porte du chat (bkTap, 31-barker.js) ; la gate reste cote serveur (403
   sur l'endpoint) pour ceux qui n'y ont pas droit. Ne reste ici que la feuille.
   Aucun composant nouveau : bordure ink 2px, ombre dure, lime pour l'ecoute, comme partout. */

/* --- L'encart de chat de la mascotte (32-chat.js) --------------------------------------------
   Il remplace l'ancienne feuille vocale : le meme dialogue s'y ecrit et s'y parle. Bottom sheet
   plutot que carte flottante, parce qu'un fil de conversation a besoin de hauteur -- l'ancienne
   feuille plafonnait la transcription a 150 px et n'en gardait que huit lignes.
   Le voile n'a PAS de flou : essaye puis reverte sur cette app, le rendu etait immonde.
   Un seul heros lime ici, et c'est le bouton Envoyer. */
.asst-sheet{position:fixed;inset:0;z-index:71;display:grid;align-items:end;justify-items:center}
/* Le Mode Cuisine est un plein ecran a z-100 : sans ce cran l'encart s'ouvrait DESSOUS et les
   chips « Minuteur » et « Etape suivante » etaient intouchables, alors que c'est justement en
   cuisson qu'on a les mains prises. On ne monte que la, et pas partout : l'interstitiel du filet
   gradue (z-90, allergenes) doit rester au-dessus de l'encart dans tous les autres cas, et il ne
   coexiste jamais avec la cuisson. */
body:has(#cookMode:not(.hidden)) .asst-sheet{z-index:101}
.asst-sheet.hidden{display:none}
.asst-scrim{position:absolute;inset:0;border:none;padding:0;background:rgba(21,19,15,.45);cursor:pointer}
/* min-width:0 et overflow:hidden ne sont pas decoratifs : la carte est un ELEMENT DE GRILLE, donc
   sa taille minimale automatique vaut son contenu min-content. Mesure a 390 px, elle sortait a
   508 px de large -- l'entete et sa rangee de boutons imposaient leur largeur a toute la feuille,
   qui debordait de l'ecran par la droite. */
.asst-card{position:relative;width:min(560px,100%);min-width:0;overflow:hidden;max-height:82dvh;
  display:flex;flex-direction:column;background:var(--paper);border:2px solid var(--ink);
  border-radius:20px 20px 0 0;box-shadow:0 -6px 0 rgba(21,19,15,.25)}
.asst-head{display:flex;align-items:center;gap:8px;min-width:0;padding:10px 12px;
  border-bottom:2px solid var(--ink);background:var(--ink);color:var(--bone);border-radius:18px 18px 0 0}
/* L'avatar a ses PROPRES vignettes (mascots/avatars/), pas la tete sticker : les quatre stickers
   sont cadres pour la niche, ou le noeud du bandana deborde a droite, le sifflet du coach pend
   sous le menton et le bob monte au-dessus des oreilles. En center/cover dans un disque de 40 px,
   « centre » vaut centre de l'IMAGE, donc le visage tombait de travers et les oreilles sortaient.
   Les vignettes sont recalees sur les YEUX (au centre du carre de 160), a echelle commune pour
   que les quatre personas fassent la meme taille de tete. */
.asst-ava{flex:0 0 40px;width:40px;height:40px;border-radius:999px;border:2px solid var(--bone);background:
  var(--bone) url("mascots/avatars/base.webp?v=avatars-v1") no-repeat center/cover}
.asst-idt{flex:1;min-width:0}
.asst-idt b{display:block;font-family:"Druk",Impact,"Anton",sans-serif;font-weight:400;text-transform:uppercase;font-size:19px;line-height:1}
.asst-idt small{display:block;font-family:ui-monospace,Menlo,monospace;font-size:10px;text-transform:uppercase;
  letter-spacing:.08em;font-weight:850;color:rgba(244,238,223,.65);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.asst-hbtn{border:2px solid var(--bone);border-radius:999px;background:transparent;color:var(--bone);
  font:inherit;font-weight:900;font-size:12px;padding:5px 10px;cursor:pointer;flex:0 0 auto}
.asst-hist{max-height:180px;overflow-y:auto;display:grid;gap:6px;padding:10px 14px;border-bottom:1px solid var(--line)}
.asst-hist.hidden{display:none}
.ch-hitem{text-align:left;border:2px solid var(--ink);border-radius:var(--r-md);background:var(--soft);
  color:var(--ink);font:inherit;font-weight:850;font-size:13px;padding:8px 11px;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.asst-log{flex:1;overflow-y:auto;padding:16px 14px 8px;display:grid;gap:12px;align-content:start;min-height:180px}

/* Les bulles : papier decoupe pour elle, cobalt pour la personne, rotations opposees. C'est la
   meme grammaire que les bulles de la mascotte a l'ecran, en fil. */
.ch-msg{max-width:84%;filter:drop-shadow(3px 3px 0 var(--ink))}
.ch-msg.bot{justify-self:start;transform:rotate(-.6deg)}
.ch-msg.me{justify-self:end;transform:rotate(.6deg)}
.ch-msg>div{background:var(--ink);padding:2.5px;
  clip-path:polygon(2% 10%,97% 0%,100% 42%,98% 88%,55% 96%,30% 100%,24% 88%,6% 92%,0% 55%)}
.ch-msg>div>span{display:block;background:var(--paper);padding:10px 15px 15px;
  clip-path:polygon(2.4% 10.6%,96.7% .8%,99.7% 42%,97.7% 87.4%,54.8% 95.2%,30.4% 99%,24.2% 87.4%,6.4% 91.3%,.4% 55%);
  font-weight:800;font-size:14.5px;line-height:1.35;color:var(--ink)}
.ch-msg.me>div{clip-path:polygon(98% 10%,3% 0%,0% 42%,2% 88%,45% 96%,70% 100%,76% 88%,94% 92%,100% 55%)}
.ch-msg.me>div>span{background:var(--cobalt);color:#fff;
  clip-path:polygon(97.6% 10.6%,3.3% .8%,.3% 42%,2.3% 87.4%,45.2% 95.2%,69.6% 99%,75.8% 87.4%,93.6% 91.3%,99.6% 55%)}
@media(prefers-reduced-motion:no-preference){
  .ch-msg{animation:chPop .2s cubic-bezier(.2,1.5,.4,1) both}
  @keyframes chPop{from{opacity:0;transform:scale(.9)}}
}

.asst-chips{display:flex;flex-wrap:wrap;gap:8px;padding:0 14px 10px}
.ch-chip{border:2px solid var(--ink);border-radius:999px;background:var(--soft);color:var(--ink);
  font:inherit;font-weight:900;font-size:12.5px;padding:7px 11px;cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
/* Les chips d'ACTION font le geste tout de suite : on les distingue de celles qui ne font
   qu'ecrire un message, sinon les deux familles se confondent dans la meme rangee. */
.ch-chip.act{background:rgba(36,87,255,.12)}
.asst-input{display:flex;gap:8px;align-items:center;padding:10px 14px calc(14px + env(safe-area-inset-bottom));
  border-top:1px solid var(--line)}
.asst-input input{flex:1;min-width:0;border:2px solid var(--ink);background:var(--paper);color:var(--ink);
  border-radius:999px;padding:11px 15px;outline:none;font:inherit}
.asst-mic{flex:0 0 44px;width:44px;height:44px;display:grid;place-items:center;border:2px solid var(--ink);
  border-radius:999px;background:var(--paper);color:var(--ink);cursor:pointer;box-shadow:2px 2px 0 var(--ink)}
.asst-mic svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
/* Les etats du micro sont ceux du vocal : c'est le meme bouton, la meme machine, et le rig de la
   mascotte lit cet attribut pour animer sa bouche. */
.asst-mic[data-state="ecoute"]{background:var(--lime);box-shadow:none;transform:translate(2px,2px)}
.asst-mic[data-state="pense"]{background:var(--soft)}
.asst-mic[data-state="parle"]{background:var(--cobalt);color:var(--paper)}
.asst-mic[data-state="panne"]{background:var(--red);color:#fff}
@media(prefers-reduced-motion:no-preference){
  .asst-mic[data-state="ecoute"]{animation:cvPulse 1.1s ease-out infinite}
}
.asst-send{border:2px solid var(--ink);border-radius:999px;background:var(--lime);color:var(--ink);
  font:inherit;font-weight:950;padding:10px 17px;cursor:pointer;box-shadow:3px 3px 0 var(--ink);flex:0 0 auto}
.asst-send:disabled,.asst-input input:disabled{opacity:.55;cursor:default}
/* La bulle d'attente : trois points, pas un spinner -- c'est une replique qui arrive. */
.ch-msg.wait>div>span{color:var(--muted);letter-spacing:.18em}

/* Pilule : un outil vient de changer l'ecran DESSOUS, la feuille s'efface pour laisser voir ce
   qu'on a demande. Le fil est CONSERVE, on le retrouve entier d'un appui. */
.asst-sheet.mini{pointer-events:none;justify-items:end}
.asst-sheet.mini .asst-scrim,.asst-sheet.mini .asst-hist,.asst-sheet.mini .asst-log,
.asst-sheet.mini .asst-chips,.asst-sheet.mini .asst-input{display:none}
.asst-sheet.mini .asst-card{pointer-events:auto;width:auto;margin:0 10px 10px 0;cursor:pointer;
  border-radius:999px;box-shadow:4px 4px 0 var(--ink)}
.asst-sheet.mini .asst-head{border-radius:999px;border-bottom:none;padding:7px 12px 7px 7px}
.asst-sheet.mini .asst-ava{flex-basis:30px;width:30px;height:30px}
.asst-sheet.mini .asst-idt b{font-size:15px}
.asst-sheet.mini .asst-idt small,.asst-sheet.mini .asst-hist,.asst-sheet.mini #asstHist,
.asst-sheet.mini #asstMini,.asst-sheet.mini #asstPersona{display:none}

/* --- Page Profil (ex modale de preferences) -------------------------------------------------
   Classes prefixees pfp- : .pf-row et .da-resume existent deja pour le planificateur et le bloc
   activite du Suivi, les reprendre aurait recouvert deux ecrans sans qu'on le voie.
   Composants reutilises tels quels : .da-card / .da-head / .da-ico, .streak-hero, .badge-grid,
   .badge-card, .wrapped-entry, .prefs-group / .prefs-label / .prefs-hint, .btn-ghost, .primary. */
.pfp-id{display:grid;grid-template-columns:auto 1fr;gap:14px;align-items:center;border:2px solid var(--ink);
  border-radius:var(--r-lg);background:var(--ink);color:var(--bone);box-shadow:7px 7px 0 var(--ink);padding:18px 20px}
.pfp-id img.me{width:64px;height:64px;border-radius:999px;border:2px solid var(--bone);object-fit:cover;background:var(--soft)}
.pfp-id img.me.empty{visibility:hidden}
.pfp-idtext{min-width:0}
.pfp-name{font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;text-transform:uppercase;
  font-size:clamp(26px,5vw,38px);line-height:.92;font-weight:400;margin:0;overflow-wrap:anywhere}
.pfp-meta{display:block;font-size:12.5px;color:rgba(244,238,223,.72);font-weight:850;margin-top:6px}
.pfp-foyer{display:flex;margin-top:10px}
.pfp-foyer .hh-avatar{margin-right:-8px;border:2px solid var(--ink)}
.pfp-acts{display:flex;flex-wrap:wrap;gap:10px;align-items:center;grid-column:1/-1}
.pfp-acts .btn-ghost{width:auto;margin:0;min-height:40px;background:transparent;color:var(--bone);border-color:var(--bone);box-shadow:none}

.pfp-show{display:grid;gap:14px;margin-top:20px}
.pfp-show .badge-grid{grid-template-columns:repeat(auto-fit,minmax(130px,1fr))}
.pfp-show .badge-card{grid-template-rows:auto 1fr auto}
.pfp-show .badge-card b{align-self:start}
.pfp-more{display:flex;justify-content:flex-end;margin-top:14px}
.pfp-more .btn-ghost{width:auto;margin:0;min-height:36px;padding:6px 12px;font-size:12.5px;box-shadow:2px 2px 0 var(--ink)}
/* Surface d'information: filet, pas d'ombre. Elle informe, c'est son bouton qui agit. */
.pfp-info{display:flex;flex-direction:column;border:2px solid var(--line);border-radius:var(--r-md);
  background:var(--paper);padding:14px 16px}
.pfp-info h3{font-size:14px;font-family:inherit;text-transform:none;letter-spacing:0;margin:0 0 8px;font-weight:950}
.pfp-figs{display:flex;flex-wrap:wrap;gap:10px 26px;align-content:center}
.pfp-figs b{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:16px;font-weight:850}
.pfp-figs small{font-size:11px;color:var(--muted);font-weight:850}
.pfp-figs .neg b{color:var(--red)}
.pfp-info .btn-ghost{align-self:flex-start;width:auto;margin:10px 0 0;min-height:36px;padding:6px 12px;font-size:12.5px;box-shadow:2px 2px 0 var(--ink)}
/* .page-sub est un composant d'EN-TETE DE PAGE: reutilise en legende sur un fond teinte il tombe
   sous le seuil AA. Meme graphie, encre a 72%. */
small.pfp-cap,.badge-card small.pfp-cap,.section-head small.pfp-cap{display:block;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;text-transform:uppercase;
  letter-spacing:.06em;color:rgba(21,19,15,.72);font-weight:850;margin-top:3px}

.pfp-sub{border:2px solid var(--ink);border-radius:var(--r-lg);background:var(--paper);
  box-shadow:4px 4px 0 var(--ink);padding:18px;margin-top:20px}
.pfp-subhead{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:14px}
.pfp-subhead h3{margin:0;font-family:"Druk",Impact,"Anton",Haettenschweiler,"Arial Narrow Bold",sans-serif;
  text-transform:uppercase;font-size:26px;line-height:.9;font-weight:400}
.pfp-subhead .btn-ghost{width:auto;margin:0;min-height:36px;padding:6px 12px;font-size:12.5px}
.pfp-line{display:flex;align-items:center;gap:12px;border:2px solid var(--line);border-radius:var(--r-md);
  background:var(--paper);padding:10px 12px;margin-top:8px}
.pfp-line b{font-size:14px;display:block}
.pfp-line .who{display:block;font-size:12.5px;color:var(--muted);font-weight:850;margin-top:2px}
.pfp-line .grow{flex:1;min-width:0}

.pfp-set{display:grid;gap:12px;margin-top:20px}
.pfp-row{width:100%;background:none;border:0;padding:0;text-align:left;font-family:inherit;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:12px}
.pfp-row .da-head{padding:14px;flex:1;min-width:0}
.pfp-text{flex:1;min-width:0}
.pfp-text b{display:block;font-size:16px;font-weight:950;letter-spacing:-.02em}
.pfp-resume{display:block;color:var(--muted);font-weight:800;font-size:12px;margin-top:2px}
.pfp-chevron{flex:none;width:10px;height:10px;margin-right:18px;border-right:2px solid var(--ink);
  border-bottom:2px solid var(--ink);transform:rotate(45deg) translate(-2px,-2px);transition:transform .18s ease}
.pfp-row[aria-expanded="true"] .pfp-chevron{transform:rotate(225deg) translate(-1px,-1px)}
/* Le repli anime grid-template-rows (0fr -> 1fr): pas de hauteur a mesurer en JS, et le contenu
   garde sa hauteur naturelle quand il change (une allergie ajoutee ne coince pas la porte). */
.pfp-fold{display:grid;grid-template-rows:0fr;transition:grid-template-rows .24s cubic-bezier(.32,.72,0,1)}
.pfp-fold.open{grid-template-rows:1fr}
.pfp-fold>.pfp-body{overflow:hidden;border-top:0;padding:0 16px}
.pfp-fold.open>.pfp-body{border-top:2px solid var(--ink);padding-top:16px;padding-bottom:16px}
.pfp-fold .prefs-group{margin:0 0 16px}
.pfp-fold .prefs-group:last-child{margin-bottom:0}

.pfp-save{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:14px;margin-top:22px}
.pfp-save .status{margin:0;flex:1;min-width:160px}
.pfp-save .primary{width:auto;margin:0}
@media(max-width:640px){
  .pfp-id{grid-template-columns:auto 1fr;padding:16px}
  .pfp-id img.me{width:52px;height:52px}
  .pfp-figs{gap:10px 18px}
  .pfp-save .primary{width:100%}
}
@media(prefers-reduced-motion:reduce){.pfp-fold{transition:none}.pfp-chevron{transition:none}}

/* Ligne de succes en pied d'accueil: surface d'information (filet, pas d'ombre), tout le bloc
   est cliquable et ouvre la vitrine du profil. */
.home-badges{display:flex;align-items:center;gap:14px;flex-wrap:wrap;width:100%;text-align:left;
  border:2px solid var(--line);border-radius:var(--r-md);background:var(--paper);padding:12px 14px;
  margin:28px 0 0;font:inherit;cursor:pointer}
.home-badges .ideo-chip{flex:0 0 44px;width:44px;height:44px;font-size:26px}
.home-badges .hb-text{flex:1;min-width:150px}
.home-badges .hb-text b{display:block;font-size:15px}
.home-badges .hb-text small{display:block;font-size:12.5px;color:var(--muted);font-weight:850;margin-top:2px}
.home-badges .hb-row{display:flex;flex:none}
.home-badges .hb-row img{width:40px;height:40px;margin-right:-10px}
/* quand la ligne passe a deux rangees, le bouton part a DROITE: a gauche il tombe sous la
   bulle de chat, qui est en position fixe en bas d'ecran. */
.home-badges .btn-ghost{width:auto;margin:0 0 0 auto;min-height:38px;padding:8px 13px;font-size:12.5px;box-shadow:2px 2px 0 var(--ink)}
@media(max-width:480px){
  /* les medaillons sont decoratifs, le compte est dans le texte: sous 480 px la place va au texte */
  .home-badges .hb-row{display:none}
}

/* Composer: les trois lignes de reglage (energie / envie / materiel). Reutilise .lc-pill,
   l'etat actif suit la convention maison (fond lime, texte ink, cf design.html #actif). */
/* 18px sous le bloc et pas 4: ses propres lignes sont espacees de 10, donc 4 px dessous le
   collait a ce qui suit plus fort qu'il ne tient ses lignes ensemble. Ce 4 px n'avait jamais
   servi tant que le bloc etait suivi de .quick-row (20px) ou de details.advanced (16px), dont
   la marge haute l'ecrasait en fusionnant. Ses voisins d'aujourd'hui n'apportent rien. */
.mood{display:grid;gap:10px;margin:18px 0 18px}
.mood-row{display:grid;gap:6px}
.mood-chips{display:flex;gap:8px;flex-wrap:wrap}
.mood-chips .lc-pill.on{background:var(--lime)}
.mood-chips .lc-pill[data-v="more"]{border-style:dashed;color:var(--muted)}

/* D5 (18/08) -- contraste AA: --muted (#766f62) sur --bone (#f4eedf) ne fait que 4.30:1, sous le
   seuil AA de 4.5:1. Le token de marque ne bouge pas: meme technique que .page-sub, encre a 62%,
   qui donne 4.94:1 sur bone. Ne sont corriges que les usages poses sur un fond --bone avere (le
   fond body, ou les composants ci-dessous dont le fond est explicitement --bone). Sur --paper,
   --muted fait 4.78:1 et reste conforme: ces usages-la ne sont pas touches. */
.section-head small,.status,.meta,.src,.masthead p,.home-section-head p,
.prepared-accordion summary b,.atlas-txt i,.ocean-bubble p,.ocean-bubble-later,
.play-side>p,.play-archive-notice span,.cook-ing-row em,.cook-ing-empty{color:rgba(21,19,15,.62)}

/* --- Le barker : la mascotte Tanuki ANCREE AU CHROME (31-barker.js) --------------------------
   v1 la faisait flotter et se garer dans un coin au doigt : « trop gros et pas assez integre ».
   Elle ne flotte plus. Deux domiciles, et la bascule est une seule media query :
   au-dessus de 961 px son comptoir en BAS A DROITE, sous 961 sa case dans la tabbar.

   La v2 la mettait a gauche et faisait dependre le comptoir de la gouttiere du .shell
   (min(1400px, 100vw - 32px), donc (100vw - 1400) / 2, qui n'atteint ses ~110 px qu'a 1620) :
   entre 961 et 1619 il n'y avait pas de mur, la tete flottait seule dans le bord bas. Deux
   defauts constates en prod. Elle n'etait plus TENUE par rien, et surtout le bas-gauche est
   l'endroit ou le navigateur peint son apercu d'URL au survol d'un lien : il la recouvrait.
   On l'assume donc en bas a DROITE, comme un meuble de type FAB : le comptoir vit a toutes les
   largeurs desktop, sur le bord bas et non sur une gouttiere qui n'existe qu'au-dela de 1620,
   et il chevauche le contenu comme n'importe quel bouton flottant. Le coin est libre depuis que
   le bouton micro de l'assistant a disparu -- la mascotte est la seule porte du chat.

   Le rig est le meme partout : positions en POURCENTAGES de la boite base-head (785x591),
   mesurees sur les pieces (bbox des yeux blancs 164/416,260 sur 126x103, nez centre x=347.5 bas
   y=391, trait de la paupiere a 79,3 % de sa piece). Ne pas les arrondir « pour faire propre ».
   Le liseré et l'ombre sont CALIBRES APP (1,5 px de liseré, 2 px d'ombre a 14 %) : le traitement
   sticker plein format de v1 est ce qui faisait « trop gros ». Aucun lime nulle part. */
.bk-rig{display:block;position:relative;width:100%;aspect-ratio:785/591;
  transition:transform 1.4s cubic-bezier(.22,.61,.36,1)}
.bk-rig>*{position:absolute}
/* PAS de width:100% ici : `.bk-rig img` (0,1,1) battrait `.bk-lid` / `.bk-brow` / `.bk-shut`
   (0,1,0) et etirerait chaque calque sur toute la tete -- mesure, les sourcils faisaient 96 px de
   large au lieu de 15 et barraient le visage. Seule la piece de fond veut 100 %. */
.bk-rig img{display:block;pointer-events:none;-webkit-user-drag:none}
.bk-base{inset:0;width:100%}
.bk-eye{top:43.993%;width:16.051%;height:17.428%;overflow:hidden;border-radius:50%}
.bk-eye.l{left:20.892%}
.bk-eye.r{left:52.994%}
.bk-pup{position:absolute;width:44%;left:calc(50% + var(--gx,0%));top:calc(52% + var(--gy,0%));
  transform:translate(-50%,-50%);transition:left .22s ease-out,top .22s ease-out}
.bk-lid{width:19.903%;top:41.762%}
.bk-shut{width:19.261%;top:50.006%;visibility:hidden}
.bk-brow{width:16.051%;bottom:54.480%}
.bk-lid,.bk-shut,.bk-brow,.bk-mouth{transform:translateX(-50%)}
.bk-lid.l,.bk-shut.l,.bk-brow.l{left:28.917%}
.bk-lid.r,.bk-shut.r,.bk-brow.r{left:61.019%}
.bk-brow.r{transform:translateX(-50%) scaleX(-1)}
.bk-mouth{left:44.268%;top:69.543%}
.bk-rig.wide .bk-lid{visibility:hidden}
.bk-rig.shut .bk-eye,.bk-rig.shut .bk-lid{visibility:hidden}
.bk-rig.shut .bk-shut{visibility:visible}
@media(prefers-reduced-motion:reduce){.bk-rig,.bk-pup{transition:none}}

/* Deguisement (34-personas.js) : le rig cede la place a UNE image, dans la meme enveloppe. Les
   expressions, les moustaches et les lunettes sont dessinees dedans -- aucun calque du rig ne
   peut s'aligner dessus, et on n'essaie pas.
   Calee sur le BAS de la boite : les trois panoplies n'ont pas le meme cadrage (200x178, 151 et
   167 pour la meme largeur de tete), et c'est le menton qui doit rester en place d'un persona a
   l'autre. Le bob et la perruque debordent donc par le haut, ou il n'y a rien. */
.bk-face{bottom:0;left:0;width:100%;height:auto;
  transition:transform .3s cubic-bezier(.22,.61,.36,1)}
/* La vie qui reste : le meme jaillissement que le rig (porte par .parle sur le domicile) plus
   une inclinaison le temps de la replique. Pas de bouche a animer, donc c'est la tete entiere
   qui accuse la parole. */
.bk-niche.parle .bk-face,.bk-case.parle .bk-face{transform:rotate(-3deg)}
/* La case de la tabbar est le seul domicile ou la tete n'a PAS le droit de deborder : au repos
   elle doit tenir entierement dedans, sinon la coiffe coupe le liseré du haut de la barre
   (mesure : 5 px pour le bandeau du coach, 3 pour la perruque de mamie). On y cale donc le
   sticker sur la HAUTEUR de la boite et la largeur suit -- les quatre tetes occupent alors la
   meme place, quelle que soit la coiffe. */
.bk-tete-m .bk-face{left:50%;width:auto;height:100%;transform:translateX(-50%)}
.bk-case.parle .bk-tete-m .bk-face{transform:translateX(-50%) rotate(-3deg)}
@media(prefers-reduced-motion:reduce){.bk-face{transition:none}
  .bk-niche.parle .bk-face{transform:none}
  .bk-case.parle .bk-tete-m .bk-face{transform:translateX(-50%)}}

/* Domicile 1 : le comptoir, en bas a droite. Masque par defaut, la media query ci-dessous
   l'allume. z-61 : au-dessus de la tabbar (60), sous la feuille de l'assistant (70) et sous le
   Mode Cuisine (100). */
/* pointer-events:none sur l'ENVELOPPE, auto sur la tete : la niche est une colonne de 112 px (la
   largeur du comptoir) pour une tete de 88, et elle hit-testait sur toute sa boite, gouttieres
   vides comprises. A z-61 elle passe devant .cta-bar (z-30), qui glisse sous elle en dessous de
   1140 px : 12 px de « Generer la recette » ouvraient alors le chat sans que rien ne soit
   dessine dessus. Le comptoir etait deja transparent au clic, la tete est le seul controle --
   rien d'autre n'ecoute sur la niche (31-barker.js ne lui pose que .parle et le retrait au
   demontage). Detail dans le bloc « Voisinage » plus bas. */
.bk-niche{display:none;position:fixed;right:14px;bottom:0;z-index:61;pointer-events:none;
  flex-direction:column;align-items:center;transition:transform .3s cubic-bezier(.22,.61,.36,1)}
.bk-tete{border:none;background:none;padding:0;cursor:pointer;position:relative;z-index:1;
  pointer-events:auto;
  filter:drop-shadow(1.5px 0 0 var(--paper)) drop-shadow(-1.5px 0 0 var(--paper))
         drop-shadow(0 1.5px 0 var(--paper)) drop-shadow(0 -1.5px 0 var(--paper))
         drop-shadow(2px 2px 0 rgba(21,19,15,.14))}

/* >= 961 px : le comptoir. Un vrai petit mur diegetique -- carte paper, liseré encre, arrondi EN
   HAUT seulement puisqu'il sort du bas de l'ecran. La tete passe derriere lui (marge negative),
   donc ses « pieds » n'existent plus a expliquer, et c'est LUI qui la tient, plus le bord bas de
   la fenetre : le contrat ne depend donc plus de la largeur disponible et vaut d'un seul tenant
   jusqu'a la tabbar. L'enseigne vient d'un attribut : changer de persona n'aura qu'a la reecrire. */
@media(min-width:961px){
  .bk-niche{display:flex}
  .bk-tete{width:88px;margin-bottom:-16px}
  .bk-niche.parle{transform:translateY(-10px)}
}
.bk-comptoir{position:relative;z-index:2;width:112px;height:38px;background:var(--paper);
  border:2px solid var(--ink);border-bottom:none;border-radius:12px 12px 0 0;
  box-shadow:2px -2px 0 rgba(21,19,15,.10);pointer-events:none}
.bk-comptoir::after{content:attr(data-enseigne);position:absolute;top:6px;left:0;right:0;
  text-align:center;font-family:ui-monospace,Menlo,monospace;font-size:8px;letter-spacing:.12em;
  font-weight:900;color:rgba(21,19,15,.55)}
.bk-comptoir::before{content:'';position:absolute;top:20px;left:9px;right:9px;height:2px;
  background:repeating-linear-gradient(90deg,rgba(21,19,15,.22) 0 9px,transparent 9px 18px)}

/* Domicile 2, <= 960 px : sa case dans la tabbar, en premiere position. 60 px fixes, les cinq
   onglets gardent leur flex:1. PAS d'etat actif : c'est une action, pas une destination, et elle
   n'a pas de data-nav -- le pill lime ne glissera donc jamais dessous. position:relative + z-1
   reprend ce que .tabbar.has-thumb donne aux onglets, sinon elle peindrait SOUS le pill. */
.bk-case{display:none;flex:0 0 60px;position:relative;z-index:1;overflow:visible;
  border:none;background:none;padding:0;cursor:pointer;font-family:inherit;
  justify-items:center;align-content:center;gap:2px}
.bk-tete-m{display:block;width:38px;transition:transform .28s cubic-bezier(.2,1.5,.4,1);
  filter:drop-shadow(1px 0 0 var(--paper)) drop-shadow(-1px 0 0 var(--paper))
         drop-shadow(0 1px 0 var(--paper)) drop-shadow(0 -1px 0 var(--paper))}
.bk-lbl{font-size:10px;font-weight:900;letter-spacing:.01em;color:var(--muted)}
/* Le jaillissement : elle sort de la barre LE TEMPS de la bulle, puis redescend. Au repos la tete
   tient entierement dans sa case, la ligne de nav reste nette. */
.bk-case.parle .bk-tete-m{transform:translateY(-30px) scale(1.5)}
@media(max-width:960px){
  .bk-niche{display:none}
  .bk-case{display:grid}
}
/* Sous 360 px, les cinq onglets se partagent ce qui reste et « Provisions » se met a tronquer :
   le nom du personnage saute avant son etiquette de navigation. */
@media(max-width:359px){.bk-lbl{display:none}}
@media(prefers-reduced-motion:reduce){
  /* Pas de jaillissement : la bulle seule porte le moment. */
  .bk-tete-m,.bk-niche{transition:none}
  .bk-case.parle .bk-tete-m{transform:none}
}

/* Dock Mode Cuisine : elle vit DANS #cookMode, posee au-dessus de la barre du bas, pieds masques
   par elle. Ce sont les barres qui montent d'un cran pour peindre par-dessus ses pieds et rester
   cliquables ; sans ca elle recouvrait « Precedent » et « Suivant ». */
.bk-dock{position:absolute;left:20px;z-index:1;display:flex;flex-direction:column;align-items:flex-start}
.bk-dock.dragging .bk-bubble{display:none}
.bk-tete-d{width:96px;border:none;background:none;padding:0;cursor:ew-resize;touch-action:none;
  filter:drop-shadow(1.5px 0 0 var(--paper)) drop-shadow(-1.5px 0 0 var(--paper))
         drop-shadow(0 1.5px 0 var(--paper)) drop-shadow(0 -1.5px 0 var(--paper))
         drop-shadow(2px 3px 0 rgba(21,19,15,.18))}
#cookMode #cookTimersBar,#cookMode .cook-nav,#cookMode #cookVoiceTranscript{position:relative;z-index:1}
@media(max-width:640px){.bk-tete-d{width:68px}}

/* Bulles Persona : papier decoupe, deux clip-path emboites (l'encre deborde de 3 px, ce qui fait
   le liseré). Elles restent des overlays transitoires -- c'est la seule chose qui a le droit de
   passer par-dessus le monde, et seulement le temps d'une replique. */
/* bottom cale sur la tete QUAND ELLE SE HAUSSE, pas au repos : a 96 px la queue de la bulle
   retombait de 2 px sur son visage des qu'elle jaillissait (mesure : tete a 852, bulle a 854). */
.bk-bubble{position:fixed;right:110px;bottom:110px;z-index:63;max-width:min(300px,58vw);cursor:pointer;
  filter:drop-shadow(4px 4px 0 var(--ink));transform:rotate(-2deg)}
.bk-bubble.hidden{display:none}
.bk-clip{display:block;background:var(--ink);padding:3px;
  clip-path:polygon(2% 10%,97% 0%,100% 42%,98% 88%,55% 96%,30% 100%,24% 88%,6% 92%,0% 55%)}
.bk-clip>span{display:block;background:var(--paper);padding:12px 16px 15px;
  clip-path:polygon(2.4% 10.6%,96.7% .8%,99.7% 42%,97.7% 87.4%,54.8% 95.2%,30.4% 99%,24.2% 87.4%,6.4% 91.3%,.4% 55%);
  font-weight:900;font-size:14px;line-height:1.3;color:var(--ink)}
/* La queue de la bulle est dessinee DANS le trace : la pointe est au tiers gauche du bord bas
   (30% 100%), elle vise donc une tete posee a gauche. Le comptoir ayant change de cote, ce seul
   trace-la est retourne (chaque x devient 100 - x, sur l'encre ET sur le papier interieur, sinon
   le liseré ne suit plus). Vise par l'id et pas par la classe : #bkDockBub, en Mode Cuisine, vit
   au-dessus d'une tete qu'on peut trainer et garde sa pointe d'origine, et sous 961 la case est
   a gauche de la tabbar. Le :not(.burst) laisse l'etoile de l'eclat tranquille -- elle n'a pas
   de queue, et sans lui cette regle (1,1,1) battrait `.bk-bubble.burst .bk-clip` (0,2,0). */
@media(min-width:961px){
  #bkBub:not(.burst) .bk-clip{
    clip-path:polygon(98% 10%,3% 0%,0% 42%,2% 88%,45% 96%,70% 100%,76% 88%,94% 92%,100% 55%)}
  #bkBub:not(.burst) .bk-clip>span{
    clip-path:polygon(97.6% 10.6%,3.3% .8%,.3% 42%,2.3% 87.4%,45.2% 95.2%,69.6% 99%,75.8% 87.4%,93.6% 91.3%,99.6% 55%)}
}
/* L'eclat : meme papier, decoupe en etoile et typo Druk. Reserve aux moments ou elle CRIE (fin de
   cuisson), sinon l'effet ne veut plus rien dire. */
.bk-bubble.burst{transform:rotate(2deg)}
.bk-bubble.burst .bk-clip{clip-path:polygon(50% 0%,61% 12%,78% 4%,80% 20%,100% 18%,90% 36%,100% 52%,84% 58%,92% 78%,72% 74%,68% 96%,54% 82%,38% 100%,34% 80%,14% 88%,22% 68%,0% 62%,14% 48%,2% 30%,20% 28%,16% 8%,34% 14%)}
.bk-bubble.burst .bk-clip>span{clip-path:polygon(50% 1.5%,60.8% 13.2%,77.4% 5.5%,79.4% 21%,98.5% 19.2%,89% 36.4%,98.5% 51.6%,83.2% 57.6%,90.8% 76.8%,71.6% 73%,67.8% 94%,54.2% 81%,38.6% 98%,34.8% 79.2%,15.6% 86.6%,23.2% 67.6%,2% 61.4%,15.6% 48.4%,3.5% 30.6%,20.6% 28.6%,17% 9.5%,34.4% 15%);
  padding:24px 28px;text-align:center;font-family:"Druk",Impact,"Anton",sans-serif;font-weight:400;
  text-transform:uppercase;font-size:22px;line-height:.9}
@media(prefers-reduced-motion:no-preference){
  .bk-bubble{animation:bkPop .26s cubic-bezier(.2,1.6,.4,1) both}
  @keyframes bkPop{from{opacity:0;transform:scale(.6) rotate(-8deg)}to{opacity:1;transform:scale(1) rotate(-2deg)}}
  .bk-bubble.burst{animation-name:bkPopBurst}
  @keyframes bkPopBurst{from{opacity:0;transform:scale(.6) rotate(8deg)}to{opacity:1;transform:scale(1) rotate(2deg)}}
}
/* Sous 961 la tete est dans la tabbar : la bulle se cale au-dessus de la barre, du cote de sa
   case (a gauche). env() et pas une constante : la barre elle-meme reserve la safe-area. */
@media(max-width:960px){
  /* right:auto explicite : la regle de base pose desormais `right`, et deux insets opposes sur
     une boite a max-width ne se neutralisent pas -- c'est la direction d'ecriture qui tranche,
     ce qu'on ne veut pas laisser decider du placement. */
  .bk-bubble{left:12px;right:auto;bottom:calc(100px + env(safe-area-inset-bottom));max-width:min(260px,62vw)}
  /* Pas de tete, pas de bulle. La tabbar est masquee tant que personne n'est connecte
     (09-panels.js:1094) et la case avec elle, mais la bulle vit sur le body : une recette
     partagee declenchait sa replique d'arrivee et le texte parlait au-dessus du vide. */
  body:has(.tabbar.hidden) .bk-bubble{display:none}
  .bk-bubble .bk-clip>span{font-size:13.5px;padding:11px 14px 14px}
  .bk-bubble.burst .bk-clip>span{font-size:20px;padding:22px 26px}
}
/* Celle du dock vit dans le flux de #bkDock, au-dessus de la tete : une bulle en position fixed
   posee sur le body serait purement invisible sous le plein ecran de la cuisson (z-100). */
.bk-dock .bk-bubble{position:static;margin:0 0 14px;max-width:min(280px,66vw)}

/* Voisinage. Le comptoir a demenage a droite : le FAB « Donner un avis » (#ideaboxFab, left:14
   bottom:76) garde le coin bas-gauche pour lui seul, et les deux ecartements que la mascotte lui
   imposait a gauche (128 px au-dela de 961, 140 au-dela de 1620) sont partis avec elle. Restent
   DEUX voisins a droite, tous les deux traites plus bas et aucun par un ecartement :
   - La pilule du chat reduit (.asst-sheet.mini) se gare exactement la, en bas a droite avec 10 px
     de marge, et a z-71 elle peint PAR-DESSUS la tete (mesure : 28 des 38 px du comptoir
     recouverts). On efface la niche tant que l'encart est ouvert, reduit compris -- meme
     traitement que la feuille « Plus », et le seul qui tienne : la mascotte et sa pilule sont
     deux representations du meme personnage, les montrer ensemble n'a aucun sens.
   - La barre d'action (.cta-bar, z-30) est centree sur une largeur de min(888px, 100vw - 28px) :
     en dessous de 1140 px elle passe SOUS la niche (mesure a 1000 : « Generer la recette » va
     de 70 a 930, la niche de 874 a 986, donc 56 px communs ; 90 a 961 px). La tete y est
     VISIBLE et prend le clic comme n'importe quel FAB pose sur du contenu -- c'etait le reste
     qui n'allait pas : la niche fait la largeur du comptoir (112) pour une tete de 88, et ses
     deux gouttieres vides de 12 px hit-testaient comme le reste de la boite. Le bouton perdait
     donc une colonne de 12 px sans que rien ne soit dessine dessus (verifie en balayant le
     bouton point par point : 76 colonnes mortes avant, 64 apres, soit les 12 de la gouttiere).
     La niche ne prend donc plus le pointeur, seule la tete le prend (le comptoir etait deja
     transparent au clic).
   En tabbar (<= 960) rien ne change : la tete est DANS la barre (case a 792..840, FAB a
   728..768) mais son jaillissement mord 7 px du coin du FAB, qu'on remonte donc.
   Une position deja choisie par l'utilisateur est en style inline (makeFabDraggable ecrit
   left/top) et bat ce selecteur : elle ne bouge pas, sans qu'on ait a la tester. */
@media(max-width:960px){body.bk-on #ideaboxFab{bottom:120px}}
/* La feuille « Plus » et ses jumelles posent un scrim plein ecran a z-59, sous la niche (z-61) :
   sans cette ligne la mascotte intercepte le tap qui les ferme. L'encart du chat, lui, n'a pas de
   scrim en mode reduit : c'est le CHEVAUCHEMENT qu'on evite, la pilule se garant sur le comptoir.
   `:not(.hidden)` couvre les deux etats de l'encart, ouvert et reduit -- `mini` est une classe a
   part, la feuille reduite n'est pas `hidden` (32-chat.js). Seulement en desktop : sous 961 la
   case vit DANS la tabbar, qui peint deja au-dessus du scrim comme tous les autres onglets.
   Consequence assumee, la meme que pour « Plus » : sans tete a l'ecran, emOrigin() ne trouve
   plus de rig mesurable et les emotes se taisent le temps de l'encart (33-emotes.js rend null
   et sort). En Mode Cuisine, ou elles servent le plus, c'est le dock qui les porte. */
@media(min-width:961px){
  body:has(.more-sheet:not(.hidden)) .bk-niche,
  body:has(.more-sheet:not(.hidden)) .bk-bubble,
  body:has(.asst-sheet:not(.hidden)) .bk-niche,
  body:has(.asst-sheet:not(.hidden)) .bk-bubble{display:none}
}

/* --- Les emotes volantes (33-emotes.js) ------------------------------------------------------
   La ponctuation des gestes forts : une a trois vignettes partent de la tete, montent en
   derivant, s'effacent. Pas de moteur de particules -- une classe et des variables par emote,
   tout en transform/opacity, donc composite GPU et aucun layout pendant le vol.
   z-101 : c'est la SEULE couche au-dessus du Mode Cuisine (z-100), parce que la moitie des
   gestes ponctues (etape cochee, minuteur, fin de cuisson) s'y passent. Elle ne prend jamais le
   doigt (pointer-events:none) et `contain:strict` la sort du calcul de mise en page du reste. */
#emLayer{position:fixed;inset:0;z-index:101;pointer-events:none;overflow:hidden;contain:strict}
.em-fly{position:absolute;width:var(--s);will-change:transform,opacity;
  animation:emRise var(--d) cubic-bezier(.33,.66,.44,1) var(--delay) both}
@keyframes emRise{
  0%{transform:translate3d(0,0,0);opacity:0}
  9%{opacity:1}
  70%{opacity:1}
  100%{transform:translate3d(0,calc(-1 * var(--rise)),0);opacity:0}
}
/* Trois animations empilees sur trois elements plutot qu'une seule composee : la montee (sur
   l'enveloppe), la derive laterale (sur le calque du milieu, en boucle) et le pop d'entree (sur
   l'image). Les composer a la main aurait demande de recalculer la matrice a chaque frame. */
.em-fly .em-dr{display:block;will-change:transform;
  animation:emDrift var(--dd) ease-in-out var(--delay) infinite}
@keyframes emDrift{
  0%{transform:translate3d(0,0,0)}
  25%{transform:translate3d(var(--amp),0,0)}
  50%{transform:translate3d(0,0,0)}
  75%{transform:translate3d(calc(-1 * var(--amp)),0,0)}
  100%{transform:translate3d(0,0,0)}
}
.em-fly img{display:block;width:100%;will-change:transform;
  filter:drop-shadow(2px 3px 0 rgba(21,19,15,.20));
  animation:emPop var(--d) cubic-bezier(.2,1.5,.4,1) var(--delay) both}
@keyframes emPop{
  0%{transform:scale(.3) rotate(var(--r0))}
  20%{transform:scale(1.1) rotate(var(--r1))}
  32%{transform:scale(1) rotate(var(--r1))}
  100%{transform:scale(1) rotate(var(--r2))}
}
/* En mouvement reduit il n'y a pas d'emote du tout : 33-emotes.js rend la main avant de creer
   quoi que ce soit. Rien a neutraliser ici, donc aucune regle -- une variante immobile serait du
   code mort qui laisse croire que la couche vit encore. */

@media(max-width:420px){
  .asst-idt b{font-size:16px}
  .asst-hbtn{font-size:11px;padding:5px 8px}
  #asstMini{display:none}
}
/* La porte des deguisements dans l'entete du chat. Une icone et pas un libelle : l'entete porte
   deja trois boutons de texte et le quatrieme faisait deborder la carte sous 420 px, la ou
   « Historique » ne peut pas sauter. */
.asst-hbtn.ico{padding:0;width:30px;height:30px;display:grid;place-items:center}
.asst-hbtn.ico svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round}

/* --- Les deguisements (34-personas.js) --------------------------------------------------------
   Une petite feuille, meme grammaire que le reste : papier, encre, ombres dures, aucun flou.
   Un seul heros lime -- la panoplie PORTEE. Les trois autres restent en papier : si tout est mis
   en avant, plus rien ne l'est, et c'est le choix courant qu'on doit voir d'un coup d'oeil. */
.ps-sheet{position:fixed;inset:0;z-index:110;display:grid;place-items:center;padding:16px}
.ps-sheet.hidden{display:none}
.ps-scrim{position:absolute;inset:0;border:none;padding:0;background:rgba(21,19,15,.45);cursor:pointer}
.ps-card{position:relative;width:min(420px,100%);background:var(--paper);border:2px solid var(--ink);
  border-radius:18px;box-shadow:6px 6px 0 var(--ink);padding:14px 16px 18px}
.ps-head{display:flex;align-items:center;gap:8px}
.ps-head b{flex:1;font-family:"Druk",Impact,"Anton",sans-serif;font-weight:400;text-transform:uppercase;
  font-size:22px;line-height:1;color:var(--ink)}
.ps-close{flex:0 0 auto;border:2px solid var(--ink);border-radius:999px;background:var(--paper);
  color:var(--ink);font:inherit;font-weight:900;font-size:16px;line-height:1;width:30px;height:30px;cursor:pointer}
.ps-hint{margin:6px 0 12px;font-size:13px;font-weight:750;line-height:1.35;color:var(--muted)}
.ps-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.ps-pick{display:grid;justify-items:center;gap:6px;padding:10px 6px 8px;cursor:pointer;
  border:2px solid var(--ink);border-radius:14px;background:var(--soft);color:var(--ink);
  font:inherit;font-weight:900;font-size:12.5px;box-shadow:3px 3px 0 var(--ink)}
/* Les quatre tetes n'ont pas le meme cadrage (le bob et la perruque montent plus haut) : une
   hauteur commune et object-fit:contain les alignent sans deformer aucune des quatre. */
.ps-pick img{display:block;width:auto;height:56px;max-width:100%;object-fit:contain}
.ps-pick.on{background:var(--lime);box-shadow:none;transform:translate(3px,3px)}
/* Le bouton de l'amorce se glisse DANS le fil du chat, qui est une grille : sans ce calage il
   s'etirait sur toute la largeur de la colonne. */
.ps-amorce{justify-self:start}
