  /* Valores de fábrica. BRAND (data.js) sobrescreve --bg, --accent e --accent-2
     em runtime; o resto é derivado deles ou neutro o bastante para servir a
     qualquer marca. Trocar cor não exige tocar em CSS. */
  :root{
    --bg:#160F0A; --bg-soft:#1E150E; --card:rgba(26,19,13,.9); --card-2:rgba(43,31,21,.82);
    --line:rgba(227,190,130,.18); --text:#F3E8D8; --muted:#C1B29D; --dim:#8C7D6A;
    --accent:#E4A85F; --accent-2:#B67C3C; --accent-soft:rgba(228,168,95,.16);
    --ok:#9CBB6E; --radius:18px; --shadow:0 16px 36px rgba(0,0,0,.5);
    --font-disp:'Fahkwang',Georgia,serif;
    font-size:16px;
  }
  *{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
  html,body{margin:0;min-height:100%}
  html{background:var(--bg)}
  /* sem foto de fundo por padrão. Se BRAND.fundo apontar para uma imagem,
     o app.js a aplica por cima com o véu escuro. */
  body{
    background:var(--bg);
    color:var(--text);font-family:'Jost',-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
    -webkit-font-smoothing:antialiased;display:flex;justify-content:center;
  }
  .app{width:100%;max-width:460px;min-height:100vh;position:relative;
    padding:calc(16px + env(safe-area-inset-top)) calc(16px + env(safe-area-inset-right)) calc(28px + env(safe-area-inset-bottom)) calc(16px + env(safe-area-inset-left))}
  header.top{display:flex;align-items:center;gap:12px;margin-bottom:18px}
  body.brewing header.top{display:none}          /* durante o preparo a marca não é útil */
  body.brewing .app{padding-top:calc(12px + env(safe-area-inset-top))}
  .logo{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;
    background:linear-gradient(160deg,var(--accent),var(--accent-2));color:#1a1008;font-weight:800;font-size:20px;box-shadow:var(--shadow)}
  .brand h1{font-size:1.05rem;margin:0;letter-spacing:.2px}
  .brand p{font-size:.72rem;margin:2px 0 0;color:var(--muted);letter-spacing:.4px;text-transform:uppercase}

  .screen{display:none;animation:fade .35s ease}
  .screen.active{display:block}
  @keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  .lead{color:var(--muted);font-size:.92rem;line-height:1.5;margin:0 0 18px}

  .method{width:100%;text-align:left;border:1px solid var(--line);background:linear-gradient(160deg,var(--card),var(--card-2));
    color:var(--text);border-radius:var(--radius);padding:18px;margin-bottom:14px;cursor:pointer;display:flex;gap:16px;align-items:center;transition:transform .15s,border-color .15s}
  .method:active{transform:scale(.985)} .method:hover{border-color:var(--accent-2)}
  .method .ic{font-size:30px} .method .mt{flex:1}
  .method .mt strong{display:block;font-size:1.06rem}
  .method .mt span{display:block;color:var(--muted);font-size:.82rem;margin-top:3px;line-height:1.4}
  .method .arw{color:var(--dim);font-size:1.3rem}
  .badge{display:inline-block;font-size:.58rem;letter-spacing:.2px;color:var(--accent);
    background:var(--accent-soft);border:1px solid var(--accent-2);padding:3px 9px;border-radius:20px;
    margin-top:8px;white-space:nowrap}

  .saved-card{width:100%;text-align:left;border:1px dashed var(--line);background:var(--card);color:var(--text);
    border-radius:14px;padding:14px 16px;margin-bottom:10px;cursor:pointer;display:flex;align-items:center;gap:12px}
  .saved-card:hover{border-color:var(--accent-2)}
  .saved-card .si{font-size:20px}
  .saved-card .st{flex:1}
  .saved-card .st b{display:block;font-size:.95rem}
  .saved-card .st span{color:var(--muted);font-size:.76rem}
  .saved-card .del{color:var(--dim);font-size:1.1rem;padding:4px 8px;border-radius:8px}
  .saved-card .del:hover{color:#e08a7a;background:rgba(224,138,122,.1)}

  .section-label{font-size:.72rem;text-transform:uppercase;letter-spacing:1px;color:var(--dim);margin:22px 0 10px;display:flex;justify-content:space-between;align-items:center}

  /* árvore: tipos de coador e receitas */
  .famcard{border:1px solid var(--line);background:var(--card);border-radius:var(--radius);padding:16px;margin-bottom:14px}
  .famhead b{font-size:1rem;display:block}
  .famhead small{color:var(--dim);font-size:.72rem;text-transform:uppercase;letter-spacing:.8px}
  .famnote{color:var(--muted);font-size:.83rem;line-height:1.5;margin:10px 0 12px;
    border-left:2px solid var(--accent-2);padding-left:11px}
  .famnote b{color:var(--accent)}
  .recipe{width:100%;display:flex;align-items:center;gap:10px;text-align:left;cursor:pointer;
    border:1px solid var(--line);background:var(--card-2);color:var(--text);
    border-radius:12px;padding:12px 14px;margin-top:7px}
  .recipe:hover{border-color:var(--accent-2)}
  .recipe .rt{flex:1;min-width:0}
  .recipe .rt b{display:block;font-size:.92rem;line-height:1.3}
  .recipe .rb{display:inline-block;margin-top:6px;font-size:.58rem;text-transform:uppercase;
    letter-spacing:.5px;color:var(--accent);background:var(--accent-soft);
    border:1px solid var(--accent-2);padding:2px 8px;border-radius:20px;white-space:nowrap}
  /* cabeçalho do autor */
  .autorbar{display:flex;align-items:center;gap:10px;margin:16px 0 4px;padding-top:12px;
    border-top:1px solid var(--line)}
  .autorbar:first-of-type{border-top:none;padding-top:0;margin-top:10px}
  .autorbar .ab{flex:1;min-width:0}
  .autorbar .ab b{display:block;font-size:.86rem}
  .autorbar .ab small{display:block;color:var(--dim);font-size:.68rem;
    text-transform:uppercase;letter-spacing:.5px;margin-top:1px}
  .saibamais{background:transparent;border:1px solid var(--line);color:var(--muted);
    font-size:.68rem;padding:5px 11px;border-radius:20px;cursor:pointer;white-space:nowrap}
  .saibamais:hover{border-color:var(--accent-2);color:var(--accent)}
  .autorbio{color:var(--muted);font-size:.81rem;line-height:1.6;margin:8px 0 4px;
    background:var(--card-2);border:1px solid var(--line);border-radius:12px;padding:13px 15px;
    animation:fade .3s ease}
  .autorbio b{color:var(--accent)}
  /* receita livre: café + água lado a lado, atalhos de perfil */
  .duo{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;margin-bottom:10px}
  .duo .row{margin-bottom:0;padding:13px 12px;flex-direction:column;align-items:stretch;gap:9px;min-width:0;text-align:center}
  .duo .row .lab b{font-size:1rem}
  .duo .stepper{gap:6px;justify-content:center}
  .duo .stepper button{width:30px;height:30px;font-size:1.05rem}
  .duo .stepper .num{min-width:44px} .duo .stepper .num b{font-size:1.15rem}
  .perfis{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
  .pf{border:1px solid var(--line);background:var(--card);color:var(--muted);
    border-radius:12px;padding:11px 6px;font-size:.8rem;font-weight:600;cursor:pointer;transition:.15s}
  .pf:hover{border-color:var(--accent-2)}
  .pf.sel{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
  /* veredito de tempo ao final */
  .verd{border-radius:14px;padding:13px 16px;margin:14px 0 4px;font-size:.84rem;line-height:1.55;text-align:left}
  .verd b{font-weight:700}
  .verd.bom{background:var(--accent-soft);border:1px solid var(--accent-2);color:#e3e3e3}
  .verd.bom b{color:var(--accent)}
  .verd.ruim{background:rgba(200,120,80,.12);border:1px solid #8a5a3c;color:#e0cbbd}
  .verd.ruim b{color:#d59468}
  /* conversor */
  select.sel{width:100%;background:var(--card-2);color:var(--text);border:1px solid var(--line);
    border-radius:10px;padding:11px 12px;font-size:.92rem;outline:none}
  .convres{background:linear-gradient(160deg,var(--card),var(--card-2));border:1px solid var(--accent-2);
    border-radius:var(--radius);padding:20px;text-align:center;margin:14px 0}
  .convres .crn{font-size:3rem;font-weight:800;color:var(--accent);line-height:1}
  .convres .crl{color:var(--text);font-size:.9rem;margin-top:4px}
  .convres .crf{color:var(--dim);font-size:.76rem;margin-top:6px}
  /* ajuste do moedor na tela de receita */
  .grindres{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;
    background:var(--accent-soft);border:1px solid var(--accent-2);border-radius:12px;
    padding:12px 14px;margin:10px 0 8px}
  .grindres .gv{font-size:1.8rem;font-weight:800;color:var(--accent);line-height:1}
  .grindres .gl{color:var(--text);font-size:.84rem;flex:1}
  .grindres .gw{font-size:.6rem;text-transform:uppercase;letter-spacing:.6px;color:var(--dim);
    border:1px solid var(--line);border-radius:20px;padding:2px 8px}
  /* avatar do autor (iniciais estilizadas) */
  .av{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;
    color:#141008;font-weight:800;letter-spacing:.5px;flex-shrink:0;vertical-align:middle;
    box-shadow:0 2px 6px rgba(0,0,0,.4)}
  #setupTitle .autor{display:block;font-size:.72rem;font-weight:400;color:var(--dim);
    text-transform:uppercase;letter-spacing:1px;margin-top:4px}
  .gnota{display:flex;gap:9px;align-items:flex-start;margin-top:10px;padding-top:10px;
    border-top:1px solid var(--line);color:var(--muted);font-size:.78rem;line-height:1.5}
  .gnota b{color:var(--accent)}

  .roast-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
  /* caixa de destaque: usada pelo café selecionado e pelo estado da torra */
  .nota{background:var(--accent-soft);border:1px solid var(--accent-2);border-radius:14px;padding:13px 15px;margin-bottom:4px}
  .nota>b{color:var(--accent);font-size:.92rem}
  .nota p{font-size:.82rem;color:var(--text);margin:7px 0 0;line-height:1.55}
  .nota p b{color:var(--accent)}
  .nota .sec{color:var(--muted)} .nota .sec b{color:var(--text)}
  .recbtn{width:100%;display:flex;align-items:center;gap:12px;background:var(--accent-soft);
    border:1px solid var(--accent-2);border-radius:14px;padding:12px 14px;margin-top:10px;
    cursor:pointer;font-family:inherit;text-align:left;color:var(--text)}
  .recbtn .rs{font-size:1.1rem;color:var(--accent)}
  .recbtn b{display:block;font-size:.88rem;color:var(--accent)}
  .recbtn span{font-size:.74rem;color:var(--muted)}
  .chip{width:100%;border:1px solid var(--line);background:var(--card);color:var(--text);
    font-family:inherit;font-size:.88rem;border-radius:14px;padding:14px 8px;text-align:center;
    cursor:pointer;transition:.15s}
  .chip .bean{display:block;width:100%;max-width:74px;margin:0 auto 7px;line-height:0}
  .chip .bean svg{display:block;width:100%;height:auto}
  .chip.sel .bean{transform:scale(1.06);transition:transform .18s}
  .chip small{color:var(--muted);font-size:.7rem;display:block;margin-top:3px}
  .chip.sel{border-color:var(--accent);background:var(--accent-soft)} .chip.sel small{color:var(--accent)}

  .row{display:flex;align-items:center;gap:14px;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 16px;margin-bottom:10px}
  .row .lab{flex:1} .row .lab b{font-size:.95rem} .row .lab small{display:block;color:var(--muted);font-size:.74rem;margin-top:2px}
  .stepper{display:flex;align-items:center;gap:10px}
  .stepper button{width:34px;height:34px;border-radius:9px;border:1px solid var(--line);background:var(--card-2);color:var(--text);font-size:1.2rem;cursor:pointer}
  .stepper button:active{background:var(--accent-soft)}
  .stepper .num{min-width:58px;text-align:center} .stepper .num b{font-size:1.25rem} .stepper .num small{color:var(--muted);font-size:.72rem}

  .field{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin-bottom:10px}
  .field .flab{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}
  .field .flab b{font-size:.9rem} .field .flab .fv{color:var(--accent);font-weight:700}
  input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:6px;
    background:linear-gradient(90deg,var(--accent-2),var(--accent));outline:none;margin:2px 0}
  input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;border-radius:50%;
    background:var(--text);border:3px solid var(--accent-2);cursor:pointer;box-shadow:0 2px 6px rgba(0,0,0,.4)}
  input[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:var(--text);border:3px solid var(--accent-2);cursor:pointer}
  .ticks{display:flex;justify-content:space-between;color:var(--dim);font-size:.68rem;margin-top:6px}

  .seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:6px;background:var(--card-2);border:1px solid var(--line);border-radius:12px;padding:5px}
  .seg button{border:none;background:transparent;color:var(--muted);padding:10px 4px;border-radius:9px;cursor:pointer;
    font-family:inherit;font-size:.84rem;font-weight:500;transition:.15s}
  .seg button:active{transform:scale(.97)}
  .seg button.sel{background:var(--accent);color:#1B1206;font-weight:600;box-shadow:0 2px 10px rgba(0,0,0,.35)}

  .toggle-adv{width:100%;background:transparent;border:1px solid var(--line);color:var(--muted);border-radius:12px;padding:12px;cursor:pointer;font-size:.85rem;font-weight:600;margin:6px 0 4px;display:flex;justify-content:center;gap:8px;align-items:center}
  .adv{overflow:hidden;max-height:0;transition:max-height .35s ease}
  .adv.open{max-height:1400px}

  .why{background:var(--accent-soft);border:1px solid var(--accent-2);border-radius:14px;padding:14px 16px;margin-top:14px;font-size:.84rem;line-height:1.55;color:#e3e3e3}
  .why b{color:var(--accent)}

  .btn{width:100%;border:none;border-radius:16px;padding:17px;font-size:1.05rem;font-weight:700;cursor:pointer;
    background:linear-gradient(160deg,var(--accent),var(--accent-2));color:#1a1008;box-shadow:var(--shadow);margin-top:18px}
  .btn:active{transform:scale(.99)}
  .btn.ghost{background:transparent;border:1px solid var(--line);color:var(--muted);box-shadow:none;font-weight:600;font-size:.9rem;padding:13px;margin-top:10px}
  .back{background:none;border:none;color:var(--accent);font-size:1rem;font-weight:700;cursor:pointer;padding:10px 0;margin-bottom:4px}
  .back:active{opacity:.7}

  .brewhead{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
  .brewhead h2{margin:0;font-size:1.15rem} .brewhead span{color:var(--muted);font-size:.8rem}
  .timerwrap{position:relative;width:176px;height:176px;margin:6px auto 2px}
  .timerwrap svg{transform:rotate(-90deg)}
  .timerwrap .center{position:absolute;inset:0;display:flex;flex-direction:column;
    align-items:center;justify-content:center;text-align:center}
  .timerwrap .center .t{font-family:'Fahkwang',Georgia,serif;font-size:1.95rem;font-weight:300;font-variant-numeric:tabular-nums;letter-spacing:.5px}
  .timerwrap .center .lbl{color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:1px;margin-top:2px}
  .timerwrap .center .t.cd{font-size:2.8rem;font-weight:300;color:var(--accent);animation:cbeat .85s ease-out}
  @keyframes cbeat{0%{transform:scale(1.6);opacity:.2}45%{transform:scale(1);opacity:1}}
  /* aviso dos 5s: entra, informa e sai. Sem piscar. */
  .prep{display:none;align-items:center;justify-content:center;gap:9px;
    background:var(--accent-soft);border:1px solid var(--accent-2);border-radius:12px;
    padding:9px 14px;margin-bottom:10px;text-align:center}
  .prep.show{display:flex;animation:prepin .25s ease}
  @keyframes prepin{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
  .prep span{color:var(--text);font-size:.84rem}
  .prep b{color:var(--accent);font-size:1.15rem;font-weight:800;line-height:1}
  /* painel unificado: timer + instrução + linha do tempo */
  .console{background:linear-gradient(170deg,var(--card),var(--card-2));border:1px solid var(--line);
    border-radius:20px;padding:8px 15px 10px;margin-bottom:11px;box-shadow:var(--shadow)}
  .act{text-align:center;margin:0 0 7px;min-height:54px;display:flex;flex-direction:column;justify-content:center}
  .act .verb{font-size:.7rem;letter-spacing:2.5px;text-transform:uppercase;font-weight:800;color:var(--accent)}
  .act .mv{font-size:.98rem;line-height:1.35;margin-top:5px;color:var(--text)}
  .act .mv b{color:var(--accent)}
  .act.pour .verb{color:var(--accent);animation:verbpulse 1.5s ease-in-out infinite}
  .act.wait .verb{color:var(--muted);letter-spacing:3px}
  .act.wait .mv{color:var(--muted);font-size:.96rem}
  @keyframes verbpulse{0%,100%{opacity:1}50%{opacity:.55}}
  .wline{display:flex;align-items:baseline;justify-content:center;gap:7px;color:var(--muted);font-size:.8rem;margin-bottom:2px}
  .wline b{color:var(--accent);font-size:1.4rem;font-weight:800;line-height:1}
  .rate{display:flex;justify-content:center;gap:6px;align-items:center;min-height:22px;margin:4px 0 2px}
  .rate .pill{border:1px solid var(--line);background:var(--card-2);border-radius:20px;
    padding:5px 13px;font-size:.86rem;color:var(--muted);white-space:nowrap}
  .rate .pill b{color:var(--accent);font-weight:700;font-size:.95rem}
  .rate .pill.on{border-color:var(--accent-2);background:var(--accent-soft)}
  .rate .bar{flex:1;max-width:120px;height:5px;border-radius:4px;background:var(--card-2);
    border:1px solid var(--line);overflow:hidden}
  .rate .bar i{display:block;height:100%;background:var(--accent);width:0;transition:width .12s linear}
  /* aviso de super-extração no coado */
  .alerta{display:none;margin:6px 0 2px;padding:10px 13px;border-radius:12px;font-size:.79rem;
    line-height:1.45;text-align:left;color:#f0d9c8;background:rgba(200,110,70,.16);
    border:1px solid #9c5a38;animation:alertapulse 1.4s ease-in-out infinite}
  .alerta.on{display:block}
  .alerta b{color:#e8a06a}
  @keyframes alertapulse{0%,100%{box-shadow:0 0 0 0 rgba(200,110,70,0)}
    50%{box-shadow:0 0 0 4px rgba(200,110,70,.18)}}
  .ctip{text-align:center;color:var(--muted);font-size:.79rem;line-height:1.45;
    border-top:1px solid var(--line);margin-top:4px;padding-top:8px;min-height:18px}
  .ctip b{color:var(--accent)}
  /* linha do tempo dos despejos */
  .tbar{margin:6px 2px 2px}
  .tb-track{position:relative;height:106px}
  .tb-rail{position:absolute;left:0;right:0;top:18px;height:14px;border-radius:8px;
    background:var(--card-2);border:1px solid var(--line);overflow:hidden;
    box-shadow:inset 0 1px 3px rgba(0,0,0,.5)}
  .tb-fill{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:8px;
    background:linear-gradient(90deg,var(--accent-2),var(--accent));transition:width .12s linear}
  .tb-fill::after{content:"";position:absolute;inset:0;
    background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);
    animation:flow 1.9s linear infinite}
  @keyframes flow{0%{transform:translateX(-101%)}100%{transform:translateX(101%)}}
  .tb-fill.paused::after{animation-play-state:paused;opacity:.25}
  /* passou do fim da linha: escoamento em curso, barra pulsa devagar e a cabeça some */
  .tb-fill.fim::after{animation-duration:3.2s;opacity:.5}
  .tb-head.oculto{opacity:0;transform:scale(.6);pointer-events:none;transition:opacity .3s,transform .3s}
  .tb-dot{position:absolute;top:13px;width:24px;height:24px;border-radius:50%;z-index:2;
    background:var(--bg-soft);border:2px solid var(--line);margin-left:-12px;transition:.2s;
    display:grid;place-items:center}
  .tb-dot i{display:block;width:11px;height:11px;border-radius:50%;background:var(--line);transition:.2s}
  .tb-dot.done{border-color:var(--accent);background:var(--bg-soft)}
  .tb-dot.done i{background:var(--accent)}
  .tb-dot.near{border-color:var(--accent);animation:mkpulse .55s ease-in-out infinite}
  /* a chaleira viaja junto com a cabeça durante o despejo */
  .tb-head .kettle{display:none;width:26px;height:26px;color:var(--bg)}
  .tb-head.pour{width:38px;height:38px;top:6px;margin-left:-19px;
    background:var(--accent);border-color:var(--accent);display:grid;place-items:center;
    box-shadow:0 0 0 5px var(--accent-soft),0 3px 10px rgba(0,0,0,.5)}
  .tb-head .kettle{transform-origin:50% 50%}
  .tb-head.pour .kettle{display:block;animation:ktilt 1.6s ease-in-out infinite}
  @keyframes ktilt{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(3deg)}}
  /* gotas caindo do bico até a poça */
  .kettle .gota{animation:kgota 1s linear infinite;opacity:0}
  .kettle .g2{animation-delay:.33s} .kettle .g3{animation-delay:.66s}
  @keyframes kgota{
    0%{transform:translate(0,0);opacity:0}
    14%{opacity:1}
    50%{transform:translate(-0.4px,6.5px);opacity:1}
    86%{opacity:1}
    100%{transform:translate(2.8px,13px);opacity:0}}
  .kettle .poca{animation:kpoca 1s ease-out infinite;transform-origin:10.4px 38.2px;transform-box:view-box}
  @keyframes kpoca{0%,55%{transform:scaleX(.8);opacity:.5}70%{transform:scaleX(1.15);opacity:1}
    100%{transform:scaleX(.8);opacity:.5}}
  .kettle .vp{animation:kvapor 2.1s ease-in-out infinite;opacity:0}
  .kettle .vp2{animation-delay:.7s}
  .kettle .vp3{animation-delay:1.4s}
  @keyframes kvapor{
    0%{opacity:0;transform:translateY(2.5px)}
    25%{opacity:.95}
    60%{opacity:.7}
    100%{opacity:0;transform:translateY(-5px)}}
  /* chaleira no centro do cronômetro, só na fase de despejo */
  /* a chaleira faz parte do bloco central: chaleira + relógio ficam
     centralizados juntos no círculo. O espaço é sempre reservado para
     que o relógio não pule ao começar e terminar o despejo. */
  .kcenter{width:38px;height:38px;color:var(--accent);margin-bottom:1px;
    visibility:hidden;pointer-events:none;flex-shrink:0}
  .timerwrap.pouring .kcenter{visibility:visible}
  .kcenter svg{width:100%;height:100%;transform-origin:50% 50%}
  .timerwrap.pouring .kcenter svg{animation:ktilt 1.6s ease-in-out infinite}
  @keyframes mkpulse{0%,100%{box-shadow:0 0 0 0 rgba(224,164,88,.55)}50%{box-shadow:0 0 0 7px rgba(224,164,88,0)}}
  .tb-dot.hit{animation:mkhit 1.1s ease-out}
  @keyframes mkhit{0%{transform:scale(2.1);box-shadow:0 0 0 0 rgba(224,164,88,.9)}
    60%{transform:scale(1.15)}100%{transform:scale(1);box-shadow:0 0 0 16px rgba(224,164,88,0)}}
  .tb-lbl.hit b{animation:lblhit 1.1s ease-out}
  @keyframes lblhit{0%{transform:scale(1.5)}100%{transform:scale(1)}}
  .tb-head{position:absolute;top:14px;width:22px;height:22px;border-radius:50%;z-index:3;margin-left:-11px;
    background:var(--text);border:3px solid var(--accent-2);box-shadow:0 0 8px rgba(224,164,88,.45);transition:left .12s linear}
  .tb-lbl{position:absolute;top:42px;font-size:.78rem;line-height:1.4;color:var(--dim);
    text-align:center;transform:translateX(-50%);white-space:nowrap;transition:color .2s}
  .tb-lbl.done{color:var(--accent)} .tb-lbl b{display:block;font-size:.9rem;font-weight:700;color:var(--muted)}
  .tb-lbl.done b{color:var(--accent)}
  .tb-lbl i{display:block;font-style:normal;font-size:.74rem;opacity:.7;margin-top:2px}
  .tb-lbl.s{transform:none;text-align:left} .tb-lbl.e{transform:translateX(-100%);text-align:right}
  .next{color:var(--dim);font-size:.82rem;text-align:center;margin-bottom:16px}
  .controls{display:grid;grid-template-columns:1fr 1fr;gap:12px}
  .controls button{border:none;border-radius:14px;padding:14px;font-size:1rem;font-weight:700;cursor:pointer}
  .controls .play{background:linear-gradient(160deg,var(--accent),var(--accent-2));color:#1a1008}
  .controls .reset{background:var(--card-2);color:var(--muted);border:1px solid var(--line)}
  .timeline{margin-top:20px}
  .tl{display:flex;gap:12px;padding:10px 0;opacity:.5;transition:.2s}
  .tl .time{font-variant-numeric:tabular-nums;color:var(--muted);font-size:.8rem;width:42px;flex-shrink:0;padding-top:1px}
  .tl .dot{width:10px;height:10px;border-radius:50%;background:var(--line);margin-top:5px;flex-shrink:0}
  .tl.active{opacity:1} .tl.active .dot{background:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
  .tl.done{opacity:.4} .tl.done .dot{background:var(--ok)}
  .tl .txt{font-size:.86rem} .tl .txt small{display:block;color:var(--dim);font-size:.76rem}
  .done-msg{text-align:center;padding:30px 0}
  .done-msg .em{font-size:44px} .done-msg h2{margin:12px 0 6px} .done-msg p{color:var(--muted);margin:0}
  footer{text-align:center;color:var(--dim);font-size:.7rem;margin-top:30px;line-height:1.5}
  /* só quando BRAND.fundo traz uma foto: o texto solto sobre ela precisa de
     sombra para continuar legível. Sem foto, essas regras não se aplicam. */
  body.temfundo header.top .brand h1{color:#F4ECE2;text-shadow:0 1px 10px rgba(0,0,0,.65)}
  body.temfundo header.top .brand p{color:#DDD2C4;text-shadow:0 1px 8px rgba(0,0,0,.7)}
  body.temfundo .screen>.lead{color:#ECE3D6;text-shadow:0 1px 10px rgba(0,0,0,.7)}
  body.temfundo .section-label{color:#ECE3D6;text-shadow:0 1px 8px rgba(0,0,0,.65)}
  body.temfundo .back,body.temfundo .done-msg p{text-shadow:0 1px 8px rgba(0,0,0,.6)}
  body.temfundo footer{color:#CDC2B4;text-shadow:0 1px 8px rgba(0,0,0,.65)}
  /* ===== ESPRESSO ===== */
  .es-alvo{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}
  .es-alvo div{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 8px;text-align:center}
  .es-alvo b{display:block;font-family:var(--font-disp);font-size:1.35rem;color:var(--accent);line-height:1.15}
  .es-alvo span{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
  .es-clock{font-family:var(--font-disp);font-size:2.6rem;text-align:center;padding:14px 0 4px;color:var(--text);transition:color .2s}
  .es-clock.ok{color:var(--ok)} .es-clock.late{color:#E08A5F}
  .es-faixa{text-align:center;font-size:.76rem;color:var(--muted);margin-bottom:12px}
  .es-ctrl{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
  .es-ctrl button{border:1px solid var(--line);background:var(--card);color:var(--text);border-radius:12px;
    padding:13px;font-family:inherit;font-size:.92rem;font-weight:500;cursor:pointer}
  .es-ctrl button.pri{background:var(--accent);border-color:var(--accent);color:#1B1206;font-weight:600}
  .passos{counter-reset:p;margin:4px 0 0;padding:0;list-style:none}
  .passos li{counter-increment:p;position:relative;padding:9px 0 9px 34px;font-size:.88rem;line-height:1.55;
    border-bottom:1px solid var(--line);color:var(--text)}
  .passos li:last-child{border-bottom:none}
  .passos li::before{content:counter(p);position:absolute;left:0;top:9px;width:22px;height:22px;border-radius:50%;
    background:var(--accent-soft);color:var(--accent);font-size:.72rem;font-weight:600;display:grid;place-items:center}
  .passos li b{color:var(--accent)}
  .diag-btns{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .diag-btns button{border:1px solid var(--line);background:var(--card);color:var(--text);border-radius:12px;
    padding:11px 10px;font-family:inherit;font-size:.8rem;cursor:pointer;text-align:left;line-height:1.35}
  .diag-btns button.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
  .diag-res{background:var(--card-2);border:1px solid var(--line);border-left:3px solid var(--accent);
    border-radius:0 12px 12px 0;padding:12px 14px;margin-top:10px;font-size:.86rem;line-height:1.6}
  .diag-res b{color:var(--accent)}

  /* ===== BARRA INFERIOR ===== */
  /* acompanha a largura do app: uma barra de ponta a ponta fica estranha no desktop */
  .tabbar{position:fixed;left:50%;transform:translateX(-50%);bottom:0;width:100%;max-width:460px;
    z-index:40;display:grid;grid-template-columns:repeat(4,1fr);
    background:rgba(16,11,7,.94);backdrop-filter:blur(12px);border-top:1px solid var(--line);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom))}
  .tabbar button{background:none;border:none;color:var(--dim);font-family:inherit;font-size:.64rem;
    letter-spacing:.3px;cursor:pointer;padding:6px 2px;display:flex;flex-direction:column;align-items:center;gap:3px}
  .tabbar button svg{width:21px;height:21px;stroke:currentColor;fill:none;stroke-width:1.6;
    stroke-linecap:round;stroke-linejoin:round}
  .tabbar button.on{color:var(--accent)}
  body.brewing .tabbar{display:none}
  .app{padding-bottom:calc(84px + env(safe-area-inset-bottom))}
  body.brewing .app{padding-bottom:calc(28px + env(safe-area-inset-bottom))}

  /* ===== FORMULÁRIO (estoque) ===== */
  input[type=text],input[type=date]{width:100%;background:var(--card-2);color:var(--text);
    border:1px solid var(--line);border-radius:10px;padding:11px 12px;font-size:.92rem;
    font-family:inherit;outline:none}
  input[type=text]:focus,input[type=date]:focus{border-color:var(--accent-2)}
  input[type=date]::-webkit-calendar-picker-indicator{filter:invert(.7)}

  /* ===== ESTOQUE ===== */
  .cafecard{border:1px solid var(--line);background:var(--card);border-radius:var(--radius);
    padding:15px 16px;margin-bottom:12px}
  .cafecard .ch{display:flex;align-items:flex-start;gap:11px}
  .cafecard .ch b{flex:1;font-size:1rem;line-height:1.3;min-width:0;overflow-wrap:anywhere}
  .cafecard .meta{color:var(--muted);font-size:.78rem;margin-top:5px;line-height:1.5}
  .cafecard .acts{display:flex;gap:8px;margin-top:12px}
  .cafecard .acts button{flex:1;border-radius:11px;padding:10px;font-family:inherit;font-size:.82rem;
    font-weight:600;cursor:pointer;border:1px solid var(--line);background:var(--card-2);color:var(--muted)}
  .cafecard .acts button.pri{background:var(--accent);border-color:var(--accent);color:#1B1206}
  .cafecard .lixo{background:none;border:none;color:var(--dim);font-size:1.05rem;cursor:pointer;
    padding:2px 6px;border-radius:8px;flex-shrink:0}
  .cafecard .lixo:hover{color:#e08a7a;background:rgba(224,138,122,.1)}
  /* estado do descanso: a cor comunica antes do texto */
  .estado{display:inline-block;font-size:.6rem;text-transform:uppercase;letter-spacing:.7px;
    font-weight:700;padding:3px 9px;border-radius:20px;white-space:nowrap;margin-top:7px}
  .estado.gas{color:#E8B06A;background:rgba(232,176,106,.14);border:1px solid #8a6a3c}
  .estado.ponto{color:var(--ok);background:rgba(156,187,110,.14);border:1px solid #5f7442}
  .estado.bom{color:var(--accent);background:var(--accent-soft);border:1px solid var(--accent-2)}
  .estado.caindo{color:#C1B29D;background:rgba(193,178,157,.1);border:1px solid var(--line)}
  .estado.velho{color:#d59468;background:rgba(200,120,80,.12);border:1px solid #8a5a3c}

  /* ===== RECOMENDAÇÃO ===== */
  .reccard{width:100%;text-align:left;border:1px solid var(--line);background:var(--card);
    color:var(--text);border-radius:14px;padding:14px 15px;margin-bottom:10px;cursor:pointer;
    font-family:inherit;display:flex;gap:12px;align-items:flex-start}
  .reccard:hover{border-color:var(--accent-2)}
  .reccard.top{border-color:var(--accent);background:linear-gradient(160deg,var(--accent-soft),var(--card))}
  .reccard .pos{font-family:var(--font-disp);font-size:1.5rem;color:var(--accent);line-height:1;
    width:26px;flex-shrink:0;text-align:center}
  .reccard .rc{flex:1;min-width:0}
  .reccard .rc b{display:block;font-size:.95rem;line-height:1.3}
  .reccard .rc .por{color:var(--muted);font-size:.79rem;line-height:1.5;margin-top:5px}
  .reccard .rc .por i{font-style:normal;color:var(--accent)}

  /* ===== HISTÓRICO ===== */
  .hcard{border:1px solid var(--line);background:var(--card);border-radius:14px;
    padding:13px 15px;margin-bottom:10px}
  .hcard .hh{display:flex;align-items:baseline;gap:9px}
  .hcard .hh b{flex:1;font-size:.92rem;min-width:0}
  .hcard .hh time{color:var(--dim);font-size:.72rem;white-space:nowrap}
  .hcard .hp{color:var(--muted);font-size:.78rem;margin-top:5px;line-height:1.5}
  .hcard .hf{display:flex;align-items:center;gap:10px;margin-top:10px}
  .stars{display:flex;gap:3px;flex:1}
  .stars button{background:none;border:none;color:var(--dim);font-size:1.15rem;cursor:pointer;
    padding:0 1px;line-height:1}
  .stars button.on{color:var(--accent)}
  .hcard .rep{background:none;border:1px solid var(--line);color:var(--muted);font-family:inherit;
    font-size:.72rem;padding:6px 12px;border-radius:20px;cursor:pointer}
  .hcard .rep:hover{border-color:var(--accent-2);color:var(--accent)}

  .vazio{text-align:center;color:var(--dim);font-size:.86rem;line-height:1.6;
    border:1px dashed var(--line);border-radius:var(--radius);padding:28px 20px;margin-top:6px}

  /* idade do café: 5 faixas lado a lado, com o intervalo de dias como legenda */
  .idades{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}
  .idades .pf{padding:9px 3px;font-size:.7rem;line-height:1.15}
  .idades .pf small{display:block;font-weight:400;font-size:.58rem;color:var(--dim);margin-top:4px;white-space:nowrap}
  .idades .pf.sel small{color:var(--accent)}
