/* Hum · Mandala. Paper, saffron, indigo, madder. The mandala is the interface:
   it is the progress bar, the visualiser, the breathing guide and the reward.
   Everything else stays quiet so it can be loud. */
:root{
  --paper:#f3eadb; --paper-2:#ebe0cd; --card:#fbf6ec; --line:#e3d6bf;
  --ink:#1f1a14; --ink-2:#5f5548; --ink-3:#8f8474;
  --saffron:#d9782a; --indigo:#2d3a8c; --madder:#b8412e;
  --sans:'Onest',system-ui,sans-serif; --head:'Bricolage Grotesque',sans-serif; --mono:'JetBrains Mono',ui-monospace,monospace;
  --ease:cubic-bezier(.22,.61,.36,1);
}
*{box-sizing:border-box;margin:0;padding:0}
html{overflow-x:clip;-webkit-text-size-adjust:100%}
body{background:var(--paper);color:var(--ink);font:400 16px/1.5 var(--sans);min-height:100svh;-webkit-font-smoothing:antialiased}
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:50;opacity:.55;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='.85' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 .35 0 0 0 0 .28 0 0 0 0 .2 0 0 0 .07 0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E")}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
a{color:inherit}
button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--indigo);outline-offset:3px;border-radius:6px}
.k{font:500 10.5px/1 var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--ink-2);text-decoration:none}
[hidden]{display:none!important}

.screen{min-height:100svh;padding:max(env(safe-area-inset-top),16px) 22px max(env(safe-area-inset-bottom),22px);max-width:640px;margin:0 auto}
.screen:not(.is-on){display:none}
.bar{display:flex;justify-content:space-between;align-items:center;min-height:40px}
.bar .k{padding:8px 0}

/* ---------- home ---------- */
.hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,44%);gap:12px;align-items:center;margin:22px 0 18px}
.hero h1{font:700 clamp(64px,17vw,104px)/.86 var(--head);letter-spacing:-.055em}
.hero p{font:300 clamp(18px,4.6vw,22px)/1.28 var(--head);color:var(--ink-2);margin-top:12px;max-width:17ch}
.hero canvas{width:100%;aspect-ratio:1}
.start{display:flex;align-items:center;gap:14px;width:100%;text-align:left;padding:12px 14px 12px 12px;border-radius:22px;background:var(--ink);color:var(--paper);box-shadow:0 18px 40px -26px rgba(31,26,20,.8);transition:transform .3s var(--ease)}
.start:hover{transform:translateY(-2px)}
.start canvas{width:62px;height:62px;border-radius:50%;background:var(--paper);flex:0 0 auto;padding:3px}
.start-text{display:flex;flex-direction:column;gap:3px;min-width:0}
.start .k{color:#e0b27c}
.start b{font:500 20px/1.1 var(--head);letter-spacing:-.015em}
.start-text>span:last-child{font-size:13.5px;color:rgba(243,234,219,.72)}
.start .go{margin-left:auto;width:44px;height:44px;border-radius:50%;background:var(--saffron);color:var(--ink);display:grid;place-items:center;font-size:14px;flex:0 0 auto}
.sec{display:flex;justify-content:space-between;align-items:baseline;margin:32px 0 12px}
.sec h2{font:500 22px/1 var(--head);letter-spacing:-.02em}
.strip{display:flex;gap:10px;overflow-x:auto;scrollbar-width:none;padding-bottom:4px}
.strip::-webkit-scrollbar{display:none}
.strip canvas{width:64px;height:64px;flex:0 0 auto;border-radius:50%;background:var(--card);border:1px solid var(--line)}
.empty{font-size:14.5px;color:var(--ink-2);padding:14px 16px;border-radius:16px;background:var(--paper-2)}
.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.card{display:flex;flex-direction:column;gap:6px;text-align:left;padding:12px 12px 14px;border-radius:22px;background:var(--card);border:1px solid var(--line);transition:transform .35s var(--ease),box-shadow .35s var(--ease)}
.card:hover{transform:translateY(-3px);box-shadow:0 16px 30px -22px rgba(31,26,20,.45)}
.card canvas{width:100%;aspect-ratio:1;border-radius:16px;background:#f6ecda;margin-bottom:4px}
.card b{font:500 17px/1.15 var(--head);letter-spacing:-.01em}
.card .meta{display:flex;gap:8px;align-items:center}
.card .meta span{font:500 10.5px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2)}
.card .meta .tag{color:var(--saffron)}
.card .bar-p{height:2px;border-radius:2px;background:var(--line);position:relative;margin-top:2px}
.card .bar-p i{position:absolute;left:0;top:0;bottom:0;background:var(--saffron);border-radius:2px}
.legal{margin:32px 0 6px;font:500 10.5px/1.6 var(--mono);color:var(--ink-3)}

/* ---------- player ---------- */
.player{display:flex;flex-direction:column;align-items:center}
.player:not(.is-on){display:none}
.player .bar{width:100%}
.stage{position:relative;width:min(88vw,62svh,560px);aspect-ratio:1;margin-top:1.5svh}
.stage canvas{width:100%;height:100%}
.breath-cue{position:absolute;left:0;right:0;bottom:-6px;text-align:center;font:500 11px/1 var(--mono);letter-spacing:.3em;text-transform:uppercase;color:var(--saffron);min-height:11px}
.ptitle{text-align:center;margin-top:14px}
.ptitle h2{font:500 clamp(28px,7vw,36px)/1.08 var(--head);letter-spacing:-.03em}
.ptitle p{font-size:14.5px;color:var(--ink-2);margin-top:6px}
.ptitle .drawn{font:500 10.5px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--saffron);margin-top:10px}
.scrub{width:100%;max-width:440px;margin-top:auto;padding-top:18px}
.scrub input{width:100%;-webkit-appearance:none;appearance:none;height:22px;background:transparent}
.scrub input::-webkit-slider-runnable-track{height:2px;background:linear-gradient(90deg,var(--ink) var(--p,0%),var(--line) var(--p,0%));border-radius:2px}
.scrub input::-moz-range-track{height:2px;background:var(--line)}
.scrub input::-moz-range-progress{height:2px;background:var(--ink)}
.scrub input::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--ink);margin-top:-6px}
.scrub input::-moz-range-thumb{width:14px;height:14px;border:0;border-radius:50%;background:var(--ink)}
.tt{display:flex;justify-content:space-between;font:500 11px/1 var(--mono);color:var(--ink-2)}
.tt #resumeNote{color:var(--saffron)}
.ctl{display:flex;align-items:center;gap:34px;margin-top:14px}
.ctl button{font:500 12px/1 var(--mono);color:var(--ink-2);padding:12px 6px}
.ctl .play{width:72px;height:72px;border-radius:50%;background:var(--ink);color:var(--paper);font-size:20px;display:grid;place-items:center;padding:0;box-shadow:0 0 0 8px rgba(31,26,20,.06);transition:transform .2s}
.ctl .play:active{transform:scale(.96)}
.extras{display:flex;gap:8px;margin-top:16px}
.extras button{padding:9px 14px;border-radius:99px;border:1px solid var(--line);font-size:13px;color:var(--ink-2);background:var(--card)}
.extras button[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.timer-menu{position:fixed;left:50%;bottom:calc(max(env(safe-area-inset-bottom),16px) + 10px);transform:translateX(-50%);width:min(calc(100vw - 32px),420px);padding:16px;border-radius:22px;background:var(--ink);color:var(--paper);z-index:20;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.timer-menu .k{color:#e0b27c}
.timer-menu div{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.timer-menu button{padding:9px 13px;border-radius:99px;border:1px solid rgba(243,234,219,.25);font-size:13.5px}
.timer-menu button.on{background:var(--saffron);color:var(--ink);border-color:var(--saffron)}
.wake{margin-top:10px;font:500 10px/1 var(--mono);letter-spacing:.08em;color:var(--ink-3)}

/* immersive: only the mandala */
body.immersive .player>*:not(.stage){opacity:0;pointer-events:none;transition:opacity .8s}
body.immersive.peek .player>*:not(.stage):not(.timer-menu){opacity:1;pointer-events:auto}
body.immersive .player{justify-content:center}
body.immersive .stage{width:min(94vw,86svh);margin:0}
body.immersive{cursor:none}
body.immersive.peek{cursor:auto}

/* ---------- done ---------- */
.done{display:flex;flex-direction:column;align-items:center;text-align:center}
.done:not(.is-on){display:none}
.done .bar{width:100%}
.done canvas{width:min(86vw,58svh,560px);aspect-ratio:1;margin-top:3svh;animation:land 1.4s var(--ease)}
@keyframes land{from{transform:scale(.94) rotate(-6deg);opacity:0}to{transform:none;opacity:1}}
.done-text h2{font:500 30px/1.1 var(--head);letter-spacing:-.03em;margin-top:16px}
.done-text p{color:var(--ink-2);margin-top:8px;max-width:30ch}
.done-text .ddate{font:500 11px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--saffron);margin-top:10px}
.done-ctl{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:auto;padding-top:22px}
.done-ctl button,dialog button{padding:13px 20px;border-radius:99px;border:1px solid var(--line);background:var(--card);font:500 15px/1 var(--sans)}
.primary{background:var(--ink)!important;color:var(--paper);border-color:var(--ink)!important}

/* ---------- collection ---------- */
.coll-h{font:700 44px/.95 var(--head);letter-spacing:-.045em;margin-top:18px}
.coll-p{color:var(--ink-2);margin-top:8px}
.coll-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:22px}
.coll-grid button{display:flex;flex-direction:column;gap:6px;text-align:left}
.coll-grid canvas{width:100%;aspect-ratio:1;border-radius:50%;background:var(--card);border:1px solid var(--line)}
.coll-grid span{font:500 10px/1.3 var(--mono);letter-spacing:.06em;color:var(--ink-2);text-transform:uppercase}

dialog{margin:auto;border:0;border-radius:26px;padding:26px 22px 20px;max-width:min(460px,calc(100vw - 32px));background:var(--card);color:var(--ink);box-shadow:0 30px 80px rgba(31,26,20,.35)}
dialog::backdrop{background:rgba(31,26,20,.4);backdrop-filter:blur(4px)}
dialog h2{font:500 26px/1.1 var(--head);letter-spacing:-.02em;margin-bottom:12px}
dialog p{font-size:15px;color:var(--ink-2);margin-bottom:12px}
dialog p b{color:var(--ink)}

@media (min-width:900px){
  .screen{max-width:760px}
  .grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .hero{grid-template-columns:minmax(0,1fr) 40%;margin-top:40px}
  .coll-grid{grid-template-columns:repeat(5,minmax(0,1fr))}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
