:root{
  --paper:#f2f4ee;--surface:#fff;--ink:#10130e;--body:#454a42;--mute:#656a60;--line:#dfe3d9;
  --lime:#9fe870;--forest:#163300;--warn:#b42318;
  --r:18px;--font:ui-rounded,"SF Pro Rounded",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  color-scheme:light dark;
}
@media (prefers-color-scheme:dark){
  :root{--paper:#0e110c;--surface:#171b14;--ink:#eef2e9;--body:#b9bfb2;--mute:#9aa095;--line:#2a3025;--forest:#163300;--warn:#ff8a7a}
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--body);font:16px/1.5 var(--font);font-variant-numeric:tabular-nums;overflow-x:hidden}
h2,h3{color:var(--ink);margin:0;font-weight:700;letter-spacing:-.01em}
button,input,a{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:3px solid var(--lime);outline-offset:2px}

.top{display:flex;align-items:center;justify-content:space-between;gap:12px;max-width:1180px;margin:0 auto;padding:16px 20px}
.mark{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--ink);font-weight:700;font-size:18px}
.mark svg{width:28px;height:28px}
.pay-link{font-size:14px;font-weight:600;color:var(--ink);text-decoration:none;padding:8px 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface)}
.pay-link:hover{border-color:var(--ink)}
body.pro .pay-link,body.pro .pitch{display:none}

.layout{max-width:1180px;margin:0 auto;padding:4px 16px 48px;display:grid;gap:16px}
.timer,.history,.pitch{background:var(--surface);border:1px solid var(--line);border-radius:24px;padding:20px;min-width:0}

/* dial */
.dial{container-type:inline-size;position:relative;width:min(100%,320px);margin:4px auto 8px;aspect-ratio:1}
.ring{width:100%;height:100%;transform:rotate(-90deg)}
.ring-track{fill:none;stroke:var(--line);stroke-width:14}
.ring-fill{fill:none;stroke:var(--lime);stroke-width:14;stroke-linecap:round;transition:stroke-dasharray .6s ease}
.tk{stroke:var(--line);stroke-width:1.2}
.tk.major{stroke:var(--mute);stroke-width:1.6}
body:not(.fasting) .ring-fill{opacity:0}
.reached .ring-fill{stroke:var(--forest)}
@media (prefers-color-scheme:dark){body:not(.fasting) .ring-fill{opacity:0}
.reached .ring-fill{stroke:#c8f5a6}}
.readout{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 12%}
.readout p{margin:0}
.state{font-size:15px;font-weight:600;color:var(--ink);background:var(--paper);padding:3px 12px;border-radius:999px}
.fasting .state{background:var(--lime);color:var(--forest)}
.clock{font-size:clamp(30px,14cqw,52px);font-weight:700;color:var(--ink);letter-spacing:-.03em;line-height:1.1;margin-top:6px!important}
.sub{font-size:14px;color:var(--mute)}

.times{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:8px 0 14px}
.times[hidden]{display:none}
.time-cell{display:flex;flex-direction:column;align-items:flex-start;gap:1px;text-align:left;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:var(--paper);min-width:0}
button.time-cell:hover{border-color:var(--ink)}
.time-cell .k{font-size:13px;color:var(--mute)}
.time-cell .v{font-weight:650;color:var(--ink);font-size:15px;max-width:100%;overflow-wrap:anywhere}
.time-cell .hint{font-size:13px;color:var(--body)}
button.time-cell .hint{text-decoration:underline;text-underline-offset:3px}

.plans{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:6px 0 14px}
.fasting .plans{opacity:.85}
.plan{display:flex;flex-direction:column;align-items:center;padding:9px 4px;border:1px solid var(--line);border-radius:14px;background:var(--surface);min-width:0}
.plan strong{color:var(--ink);font-size:16px}
.plan span{font-size:12px;color:var(--mute);white-space:nowrap}
.plan:hover{border-color:var(--ink)}
.plan[aria-checked=true]{background:var(--ink);border-color:var(--ink)}
.plan[aria-checked=true] strong,.plan[aria-checked=true] span{color:var(--paper)}

.primary{display:block;width:100%;border:0;border-radius:999px;background:var(--lime);color:var(--forest);font-weight:700;font-size:17px;padding:15px 20px;text-align:center;text-decoration:none}
.primary:hover{filter:brightness(.96)}
.fasting #main-btn{background:var(--ink);color:var(--paper)}
.primary.small{display:inline-block;width:auto;font-size:15px;padding:10px 20px}
.trial-note{font-size:14px;text-align:center;color:var(--mute);margin:8px 0 0;min-height:1.5em}

.stages{list-style:none;margin:18px 0 0;padding:0;border-top:1px solid var(--line)}
.stages li{display:grid;grid-template-columns:44px 1fr;column-gap:10px;padding:10px 0;border-bottom:1px solid var(--line);color:var(--mute)}
.stages .at{grid-row:span 2;font-size:13px;padding-top:2px}
.stages .nm{font-weight:650;color:var(--body)}
.stages .tx{font-size:14px}
.stages li.done .nm{color:var(--ink)}
.stages li.now{background:linear-gradient(90deg,color-mix(in srgb,var(--lime) 28%,transparent),transparent 80%);border-radius:10px;padding-left:8px;margin:0 -8px;padding-right:8px}
.stages li.now .tx{color:var(--body)}
.fine{font-size:12.5px;color:var(--mute);margin:10px 0 0}

/* history */
.h-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.h-head h2{font-size:22px}
.ghost{border:1px solid var(--line);background:transparent;border-radius:999px;padding:8px 14px;font-size:14px;font-weight:600;color:var(--ink)}
.ghost:hover{border-color:var(--ink)}
.ghost.locked::after{content:"";display:inline-block;width:7px;height:7px;margin-left:7px;border-radius:50%;background:var(--lime);vertical-align:middle}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:16px 0 8px}
.stats div{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:10px 12px;min-width:0}
.stats dt{font-size:13px;color:var(--mute)}
.stats dd{margin:0;font-size:20px;font-weight:700;color:var(--ink);white-space:nowrap}
.chart{margin:12px 0 4px}
.chart svg{width:100%;height:150px;display:block;overflow:visible}
.chart figcaption{font-size:13px;color:var(--mute);margin-top:4px}
.bar{fill:var(--line)}
.bar.met{fill:var(--lime)}
.gl{stroke:var(--ink);stroke-width:1;stroke-dasharray:4 4;opacity:.5;vector-effect:non-scaling-stroke}
.gt,.dl{fill:var(--mute);font-size:11px}
.log{list-style:none;margin:14px 0 0;padding:0;max-height:440px;overflow:auto}
.entry{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:2px 12px;width:100%;text-align:left;background:none;border:0;border-top:1px solid var(--line);padding:12px 2px}
.entry:hover{background:var(--paper)}
.e-dur{font-weight:700;color:var(--ink);font-size:17px;min-width:84px}
.e-when{font-size:13.5px;color:var(--mute);min-width:0;line-height:1.3}
.e-goal{font-size:12.5px;padding:2px 9px;border-radius:999px;background:var(--paper);color:var(--body);white-space:nowrap}
.e-goal.met{background:var(--lime);color:var(--forest);font-weight:600}
.e-bar{grid-column:1/-1;height:4px;background:var(--paper);border-radius:4px;overflow:hidden;margin-top:6px}
.e-bar i{display:block;height:100%;background:var(--mute);opacity:.5;border-radius:4px}
.empty{color:var(--mute);font-size:14px;padding:18px 0 4px;margin:0}
.empty[hidden]{display:none}
.backup{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.file{position:relative;overflow:hidden;cursor:pointer}
.file input{position:absolute;inset:0;opacity:0;cursor:pointer}

/* pitch */
.pitch{background:#10130e;border-color:#2a3025;color:#c9cec3}
.pitch h2{color:#fff;font-size:22px}
.pitch p{margin:8px 0 16px;max-width:60ch}
.pitch .primary{max-width:280px}

/* dialogs */
.sheet{border:0;border-radius:22px;padding:22px;width:min(440px,calc(100vw - 24px));background:var(--surface);color:var(--body);box-shadow:0 20px 60px rgba(0,0,0,.25)}
.sheet::backdrop{background:rgba(16,19,14,.45)}
.sheet h3{font-size:20px;margin-bottom:12px}
.sheet label{display:block;font-size:14px;color:var(--mute);margin-bottom:12px}
.sheet label[hidden]{display:none}
.sheet input{display:block;width:100%;margin-top:4px;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:var(--paper);color:var(--ink);font-size:16px}
.row{display:flex;align-items:center;gap:8px;margin-top:8px}
.grow{flex:1}
.danger{background:none;border:0;color:var(--warn);font-weight:600;padding:8px 4px}
.danger[hidden]{display:none}
.err{color:var(--warn);font-size:14px;min-height:1.2em;margin:0}
.gets{margin:12px 0;padding-left:20px;color:var(--ink)}
.gets li{margin:4px 0}

.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);background:var(--ink);color:var(--paper);padding:11px 18px;border-radius:999px;font-size:15px;opacity:0;pointer-events:none;transition:.25s;max-width:calc(100vw - 32px)}
.toast.on{opacity:1;transform:translate(-50%,0)}

@media (min-width:900px){
  .layout{grid-template-columns:minmax(0,420px) minmax(0,1fr);grid-template-rows:auto 1fr;align-items:start;gap:20px;padding-top:8px}
  .timer{grid-row:span 2;padding:28px}
  .history{padding:28px}
  .plans{grid-template-columns:repeat(4,1fr)}
  .pitch{grid-column:2;display:flex;flex-wrap:wrap;align-items:center;align-content:start;gap:6px 28px;padding:24px 28px}
  .pitch h2{flex-basis:100%}
  .pitch p{flex:1;margin:0;min-width:260px}
  .pitch .primary{width:auto;flex:none}
}
@media (max-width:360px){.stats{grid-template-columns:repeat(2,1fr)}}
@media (max-width:420px){.stats dd{font-size:17px}.stats div{padding:9px 10px}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
.pay-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px}
.pitch #restore{background:none;border:0;color:#c9cec3;text-decoration:underline;font-size:14px;padding:6px 0;cursor:pointer}
.foot{text-align:center;font-size:13px;color:var(--mute);padding:18px 16px 28px}
.foot a{color:inherit}

.faq{margin:36px 0 0;padding:0}
.faq h2{margin:0 0 10px}
.faq details{border-top:1px solid rgba(128,128,128,.4);padding:12px 0}
.faq details:last-child{border-bottom:1px solid rgba(128,128,128,.4)}
.faq summary{cursor:pointer;font-weight:600;line-height:1.4}
.faq p{margin:8px 0 0;line-height:1.55;overflow-wrap:anywhere}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
