/* Mini App shell. Brand colors come from brand.json as --primary / --accent / --ink / --paper (injected into index.html). */
:root{--bg:var(--paper);--card:#fff;--text:var(--ink);--hint:#8a857d;--line:rgba(22,23,27,.09);--chip:#f1ede6;--in:#2f8a4e;--out:#d0453b;
  --on-primary:#fff;--hero:var(--ink);--hero-text:#f7f3ec;--hero-hint:rgba(247,243,236,.66);
  --font:var(--text-font),-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;--disp:var(--display),-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --r:20px;--ease:cubic-bezier(.2,.8,.2,1);--spring:cubic-bezier(.2,1.4,.4,1)}
.dark{--bg:#0f1013;--card:#1a1b20;--text:#f3f0ea;--hint:#8d8a84;--line:rgba(255,255,255,.08);--chip:#25262c;--in:#5cc282;--out:#ff7d70;--hero:#1b1c22}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;background:var(--bg);color:var(--text);font:16px/1.38 var(--font);-webkit-font-smoothing:antialiased}
button{font:inherit;color:inherit;cursor:pointer}
a{color:var(--primary)}
main{padding:0 12px calc(92px + env(safe-area-inset-bottom));max-width:640px;margin:0 auto}
.view{display:none}.view.on{display:block;animation:fade .3s var(--ease) both}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes pop{0%{transform:scale(.6)}60%{transform:scale(1.12)}100%{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){*{animation:none !important;transition:none !important}}

/* intro: the sun rises once, ≤1 s, never blocks content */
.intro{position:fixed;inset:0;z-index:60;background:var(--hero);display:grid;place-items:center;pointer-events:none;animation:introOut .5s .75s var(--ease) forwards}
.intro-sun{width:84px;height:84px;border-radius:50%;background:radial-gradient(circle at 50% 60%,var(--accent),var(--primary));box-shadow:0 0 60px color-mix(in srgb,var(--accent) 60%,transparent);animation:sunUp .8s var(--ease) both}
.intro-name{position:absolute;top:calc(50% + 62px);color:var(--hero-text);font:600 22px var(--disp);letter-spacing:.01em;animation:rise .55s .2s var(--ease) both}
@keyframes sunUp{from{transform:translateY(60px) scale(.6);opacity:0}to{transform:none;opacity:1}}
@keyframes introOut{to{opacity:0;visibility:hidden}}
.intro.skip{display:none}

/* tab bar — built from the enabled blocks */
.tabs{position:fixed;left:0;right:0;bottom:0;z-index:15;display:flex;justify-content:center;background:color-mix(in srgb,var(--card) 90%,transparent);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-top:1px solid var(--line);padding:6px 4px calc(6px + env(safe-area-inset-bottom))}
.tabs button{flex:1;max-width:110px;min-width:0;border:0;background:none;display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10.5px;color:var(--hint);padding:4px 0;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tabs.many button{font-size:9.5px;letter-spacing:-.02em}
.tabs svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;transition:transform .25s var(--spring)}
.tabs button.on{color:var(--primary)}.tabs button.on svg{transform:translateY(-2px) scale(1.08)}
.tabs button::after{content:"";position:absolute;top:-6px;left:50%;width:18px;height:3px;border-radius:0 0 3px 3px;background:var(--primary);transform:translateX(-50%) scaleX(0);transition:transform .3s var(--ease)}
.tabs button.on::after{transform:translateX(-50%) scaleX(1)}
.tabs .badge{position:absolute;left:calc(50% + 6px);top:0;min-width:16px;height:16px;border-radius:8px;background:var(--out);color:#fff;font-size:10px;line-height:16px;padding:0 4px}

/* hero of «Сегодня» */
.hero{position:relative;overflow:hidden;margin:10px 0 14px;border-radius:26px;padding:18px 18px 18px;background:var(--hero);color:var(--hero-text);isolation:isolate}
.dark .hero{border:1px solid rgba(255,255,255,.06)}
.hero .glow{position:absolute;right:-70px;bottom:-110px;width:260px;height:260px;border-radius:50%;z-index:-1;background:radial-gradient(circle at 50% 40%,color-mix(in srgb,var(--accent) 85%,transparent),color-mix(in srgb,var(--primary) 55%,transparent) 45%,transparent 70%);opacity:.55;animation:sunrise 1.4s .1s var(--ease) both}
.hero .rays{position:absolute;right:-30px;bottom:-70px;width:180px;height:180px;border-radius:50%;z-index:-1;border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);box-shadow:0 0 0 22px color-mix(in srgb,var(--accent) 6%,transparent),0 0 0 46px color-mix(in srgb,var(--accent) 4%,transparent);animation:sunrise 1.4s .2s var(--ease) both}
@keyframes sunrise{from{transform:translateY(60px);opacity:0}to{transform:none}}
.hero .top{display:flex;align-items:center;gap:8px}
.mark{width:22px;height:22px;border-radius:7px;background:linear-gradient(140deg,var(--accent),var(--primary));display:inline-block}
.mark.img{background:none}
.brandname{font:600 13px var(--disp);letter-spacing:.02em;color:var(--hero-hint)}
.gear{margin-left:auto;width:36px;height:36px;border-radius:50%;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.06);display:grid;place-items:center;color:var(--hero-text);transition:transform .3s var(--ease),background .2s}
.gear:active{transform:rotate(60deg) scale(.92)}
.gear svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.hi{font:600 30px/1.1 var(--disp);margin:14px 0 4px;animation:rise .6s .05s both;letter-spacing:-.01em}
.hi b{color:var(--accent);font-weight:700}
.dt{color:var(--hero-hint);font-size:15px;animation:rise .6s .15s both}
.hrow{display:flex;align-items:center;gap:16px;margin-top:16px;animation:rise .6s .28s both}
.ring{flex:none;width:80px;height:80px;position:relative}
.ring svg{width:80px;height:80px;transform:rotate(-90deg)}
.ring circle{fill:none;stroke-width:7}
.ring .bg{stroke:rgba(255,255,255,.12)}.ring .fg{stroke:var(--accent);stroke-linecap:round;transition:stroke-dashoffset 1s var(--ease)}
.ring .n{position:absolute;inset:0;display:grid;place-items:center;font:600 21px var(--disp);color:#fff;text-align:center}
.ring .n small{display:block;font:400 10px var(--font);color:var(--hero-hint);margin-top:-2px}
.phrase{font-size:16px;line-height:1.35;color:var(--hero-text);opacity:.92}

/* sections & cards */
.sh{display:flex;align-items:baseline;gap:10px;margin:22px 2px 8px}
.sh h2{margin:0;font:600 20px var(--disp)}
.sh .ct{color:var(--hint);font-size:14px;font-variant-numeric:tabular-nums}
.sh .sp{flex:1;height:1px;background:var(--line);align-self:center}
.sh .lnk{border:0;background:none;color:var(--primary);font-size:14px;padding:4px 0;font-weight:600}
.card{background:var(--card);border-radius:var(--r);border:1px solid var(--line);overflow:hidden;animation:rise .45s var(--ease) both}
.card+.card{margin-top:10px}
.card.tap{cursor:pointer;transition:transform .2s var(--ease)}.card.tap:active{transform:scale(.985)}
.empty{padding:14px 16px;color:var(--hint);font-size:15px}
.bar{position:sticky;top:0;z-index:5;background:var(--bg);padding:12px 0 8px;display:flex;align-items:center;gap:8px}
.bar h1{flex:1;margin:0;font:600 22px var(--disp)}
.bar h1.c{text-align:center;font-size:19px}
.nav{border:1px solid var(--line);background:var(--card);border-radius:999px;min-width:40px;height:38px;font-size:18px;padding:0 12px;transition:transform .15s}
.nav:active{transform:scale(.92)}
.nav.sm{font-size:14px}
.seg{display:flex;background:var(--chip);border-radius:999px;padding:3px;gap:2px}
.seg button{flex:1;border:0;background:none;padding:8px 10px;border-radius:999px;font-size:14px;white-space:nowrap;transition:background .2s}
.seg button.on{background:var(--card);box-shadow:0 1px 3px rgba(0,0,0,.14);font-weight:600}

/* item rows */
.it{--c:var(--primary);display:flex;align-items:flex-start;gap:12px;padding:11px 14px;border-top:1px solid var(--line)}
.it:first-child{border-top:0}
.ck{flex:none;width:28px;height:28px;border-radius:50%;border:2px solid var(--c);background:transparent;margin-top:-2px;display:grid;place-items:center;padding:0;transition:transform .15s,background .2s}
.ck:active{transform:scale(.84)}
.ck svg{width:16px;height:16px;stroke:#fff;stroke-width:3;fill:none;stroke-linecap:round;stroke-linejoin:round;opacity:0;transform:scale(.4);transition:all .3s var(--spring)}
.done>.ck{background:var(--c)}.done>.ck svg{opacity:1;transform:none}
.done>.ck{animation:pop .35s var(--spring)}
.tx{flex:1;min-width:0;cursor:pointer}
.ti{overflow-wrap:anywhere}
.it.done .ti{text-decoration:line-through;text-decoration-color:color-mix(in srgb,var(--hint) 70%,transparent);color:var(--hint)}
.tm{font-weight:700;margin-right:6px;font-variant-numeric:tabular-nums}
.meta{margin-top:2px;font-size:13px;color:var(--hint)}
.nt{margin-top:3px;font-size:14px;color:var(--hint);white-space:pre-wrap;overflow-wrap:anywhere}
.clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.mini{flex:none;border:1px solid var(--line);background:var(--chip);border-radius:999px;padding:5px 11px;font-size:13px;white-space:nowrap;align-self:center;transition:transform .15s}
.mini:active{transform:scale(.94)}
.kind{margin-right:4px}
.hint2{font-size:13px;color:var(--hint);margin-top:6px}

/* week / month */
.day{--c:#888;margin:0 0 12px;border-radius:var(--r);overflow:hidden;background:color-mix(in srgb,var(--c) 7%,var(--card));border-left:6px solid var(--c);animation:rise .45s var(--ease) both}
.dark .day{background:color-mix(in srgb,var(--c) 12%,var(--card))}
.dh{display:flex;align-items:center;gap:10px;padding:10px 14px;background:color-mix(in srgb,var(--c) 18%,var(--card))}
.dark .dh{background:color-mix(in srgb,var(--c) 30%,var(--card))}
.dn{font-size:16px;font-weight:700;color:color-mix(in srgb,var(--c) 75%,var(--text))}
.dark .dn{color:color-mix(in srgb,var(--c) 45%,#fff)}
.dn em{font-style:normal;font-weight:500;font-size:13px;opacity:.85}
.day.past{opacity:.78}
.pr{margin-left:auto;white-space:nowrap;font-size:13px;color:var(--hint);display:flex;align-items:center;gap:6px}
.pb{width:54px;height:6px;border-radius:3px;background:color-mix(in srgb,var(--c) 22%,transparent);overflow:hidden}
.pb i{display:block;height:100%;background:var(--c);transition:width .6s var(--ease)}
.sec{padding:6px 14px 0;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--hint)}
.day .it{border-top:0;padding:9px 14px}
.add{display:block;width:100%;border:0;background:none;color:color-mix(in srgb,var(--c) 75%,var(--text));text-align:left;padding:8px 14px 12px;font-size:15px}
.dark .add{color:color-mix(in srgb,var(--c) 45%,#fff)}
.mgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-top:4px}
.mgrid .wd{text-align:center;font-size:12px;color:var(--hint);padding:4px 0}
.mc{--c:#888;aspect-ratio:1/1.08;border-radius:14px;background:var(--card);border:1px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:7px 2px 4px;gap:4px;animation:rise .4s var(--ease) both}
.mc .d{font-size:16px;font-variant-numeric:tabular-nums}
.mc.has{background:color-mix(in srgb,var(--c) 12%,var(--card));border-color:color-mix(in srgb,var(--c) 35%,transparent)}
.mc.today{outline:2px solid var(--primary);outline-offset:1px}
.mc.today .d{font-weight:700;color:var(--primary)}
.mc.past{opacity:.6}
.mc .dd{display:flex;gap:3px;flex-wrap:wrap;justify-content:center;max-width:36px}
.mc .dd i{width:6px;height:6px;border-radius:50%;background:var(--c)}
.mc .dd i.ok{opacity:.35}
.mc.blank{visibility:hidden}
.legend{display:flex;gap:14px;justify-content:center;color:var(--hint);font-size:13px;margin:12px 0}

/* habits */
.hb{display:flex;align-items:center;gap:12px;padding:12px 14px;border-top:1px solid var(--line)}
.hb:first-child{border-top:0}
.hb .ck{--c:var(--primary)}
.fire{flex:none;font-size:13px;color:var(--primary);font-weight:700;white-space:nowrap}
.dots{display:flex;gap:5px;margin-top:8px}
.dots i{width:22px;height:6px;border-radius:3px;background:var(--line);transition:background .3s}
.dots i.due{background:color-mix(in srgb,var(--accent) 35%,transparent)}
.dots i.ok{background:var(--accent)}
.dots i.today{outline:1.5px solid var(--primary);outline-offset:1px}
.hstat{display:grid;grid-template-columns:repeat(3,1fr)}
.hstat>div{padding:14px 12px;border-left:1px solid var(--line)}
.hstat>div:first-child{border-left:0}
.hstat .v{font:600 26px/1.1 var(--disp);font-variant-numeric:tabular-nums}
.hstat .l{font-size:12px;color:var(--hint);margin-top:2px}

/* cash */
.chero{margin:10px 0 14px;border-radius:26px;padding:18px;background:var(--hero);color:var(--hero-text);position:relative;overflow:hidden;isolation:isolate;animation:rise .5s both}
.chero .glow{position:absolute;left:-80px;top:-120px;width:240px;height:240px;border-radius:50%;z-index:-1;background:radial-gradient(circle,color-mix(in srgb,var(--primary) 50%,transparent),transparent 70%);opacity:.5}
.chero .lbl{font:600 12px var(--disp);letter-spacing:.08em;text-transform:uppercase;color:var(--hero-hint);margin-bottom:6px}
.bal{display:flex;align-items:baseline;justify-content:space-between;padding:7px 0;border-top:1px solid rgba(255,255,255,.08)}
.lbl+.bal{border-top:0}
.bal span{color:var(--hero-hint);font-size:15px}
.bal b{font:600 24px var(--disp);font-variant-numeric:tabular-nums}
.bal b.neg{color:#ff9b91}
.mrow{display:flex;padding:14px;gap:0}
.mrow>div{flex:1;min-width:0}
.mrow .v{font:600 18px var(--disp);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mrow .l{font-size:12px;color:var(--hint)}
.vin{color:var(--in)}.vout{color:var(--out)}
.split{display:flex;height:8px;border-radius:4px;overflow:hidden;margin:0 14px 14px;background:var(--line)}
.split i{display:block;height:100%;transition:width .8s var(--ease)}
.cat{padding:7px 14px}
.cat .r{display:flex;justify-content:space-between;font-size:14px;gap:8px}
.cat .b{height:6px;border-radius:3px;background:var(--line);margin-top:5px;overflow:hidden}
.cat .b i{display:block;height:100%;background:var(--accent);border-radius:3px;transition:width .8s var(--ease)}
.acts2{display:flex;gap:10px;margin:14px 0 4px}
.acts2 button{flex:1;border:0;border-radius:999px;height:46px;font-size:16px;font-weight:600;transition:transform .15s}
.acts2 button:active{transform:scale(.96)}
.p-in{background:color-mix(in srgb,var(--in) 14%,var(--card));color:var(--in);border:1px solid color-mix(in srgb,var(--in) 30%,transparent) !important}
.p-out{background:color-mix(in srgb,var(--out) 12%,var(--card));color:var(--out);border:1px solid color-mix(in srgb,var(--out) 30%,transparent) !important}
.ce{display:flex;align-items:center;gap:12px;padding:11px 14px;border-top:1px solid var(--line);cursor:pointer}
.ce:first-child{border-top:0}
.amt{flex:none;font-variant-numeric:tabular-nums;font-weight:600;text-align:right}
.amt small{display:block;font-weight:400;font-size:12px;color:var(--hint)}
.dl{margin:14px 4px 6px;font-size:13px;color:var(--hint)}
.xl{display:flex;gap:10px;margin:16px 0 4px}
.xl button{flex:1;border:1px solid var(--line);background:var(--card);border-radius:999px;height:44px;font-size:15px;transition:transform .15s}
.xl button:active{transform:scale(.96)}

/* notes */
.search{position:relative;margin:2px 0 12px}
.search input{padding-left:38px}
.search svg{position:absolute;left:12px;top:50%;width:18px;height:18px;transform:translateY(-50%);stroke:var(--hint);fill:none;stroke-width:2;stroke-linecap:round}
.ngrid{columns:2;column-gap:10px}
.note{break-inside:avoid;margin:0 0 10px;padding:13px 14px 12px;border-radius:18px;background:var(--card);border:1px solid var(--line);cursor:pointer;position:relative;animation:rise .45s var(--ease) both;transition:transform .2s var(--ease)}
.note:active{transform:scale(.97)}
.note h4{margin:0 0 4px;font:600 16px/1.25 var(--disp);overflow-wrap:anywhere}
.note p{margin:0;font-size:14px;color:color-mix(in srgb,var(--text) 78%,transparent);white-space:pre-wrap;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:8;-webkit-box-orient:vertical;overflow:hidden}
.note .pin{position:absolute;right:10px;top:9px;font-size:13px}
.note.c-sun{background:color-mix(in srgb,#ffc23d 22%,var(--card))}.note.c-sky{background:color-mix(in srgb,#4aa3ff 18%,var(--card))}
.note.c-mint{background:color-mix(in srgb,#3cc39a 18%,var(--card))}.note.c-rose{background:color-mix(in srgb,#ff6b8b 16%,var(--card))}.note.c-lilac{background:color-mix(in srgb,#9b7bff 18%,var(--card))}
.swatches{display:flex;gap:10px}
.swatches button{width:32px;height:32px;border-radius:50%;border:2px solid var(--line);padding:0;transition:transform .2s var(--spring)}
.swatches button.on{border-color:var(--text);transform:scale(1.12)}
mark{background:color-mix(in srgb,var(--accent) 45%,transparent);color:inherit;border-radius:3px;padding:0 1px}

/* settings */
.set{background:var(--card);border-radius:var(--r);border:1px solid var(--line);overflow:hidden;animation:rise .45s var(--ease) both}
.set+.set{margin-top:12px}
.srow{display:flex;align-items:center;gap:12px;padding:12px 14px;border-top:1px solid var(--line);min-height:52px}
.srow:first-child{border-top:0}
.srow .ic{flex:none;width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:color-mix(in srgb,var(--primary) 12%,var(--card));color:var(--primary)}
.srow .ic svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.srow .lb{flex:1;min-width:0}
.srow .lb small{display:block;color:var(--hint);font-size:13px}
.srow select,.srow input{width:auto;max-width:52%;padding:8px 10px;font-size:15px}
.srow.locked .lb,.srow.locked .ic{opacity:.55}
.lock{font-size:12px;color:var(--hint);white-space:nowrap;display:flex;align-items:center;gap:4px}
.ord{display:flex;gap:4px}
.ord button{width:32px;height:32px;border-radius:50%;border:1px solid var(--line);background:var(--chip);padding:0;font-size:14px;transition:transform .15s}
.ord button:active{transform:scale(.9)}
.ord button:disabled{opacity:.3}
.planbox{padding:16px;display:flex;align-items:center;gap:14px}
.planbox .badge2{flex:none;padding:6px 12px;border-radius:999px;background:linear-gradient(120deg,var(--accent),var(--primary));color:#fff;font-weight:700;font-size:14px}
.planbox .tx2{flex:1;font-size:14px;color:var(--hint)}
.planbox .tx2 b{display:block;color:var(--text);font-size:16px;font-weight:600}

/* sheet (bottom editor) */
.sheet{position:fixed;inset:0;z-index:30;background:rgba(10,10,12,.45);display:none;align-items:flex-end;opacity:0;transition:opacity .22s}
.sheet.on{display:flex}.sheet.vis{opacity:1}
.pane{width:100%;max-width:640px;margin:0 auto;max-height:92vh;overflow:auto;background:var(--card);border-radius:24px 24px 0 0;padding:8px 16px calc(18px + env(safe-area-inset-bottom));transform:translateY(40px);transition:transform .3s var(--ease)}
.sheet.vis .pane{transform:none}
.grab{width:40px;height:5px;border-radius:3px;background:var(--line);margin:4px auto 10px}
.pane h3{margin:0 0 12px;font:600 21px var(--disp)}
label{display:block;font-size:13px;color:var(--hint);margin:12px 0 5px}
textarea,input,select{width:100%;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:14px;padding:11px 12px;outline:none;transition:border-color .2s}
textarea:focus,input:focus,select:focus{border-color:var(--primary)}
textarea{resize:vertical;min-height:48px}
.big{font:600 30px var(--disp);padding:8px 12px;font-variant-numeric:tabular-nums}
.row{display:flex;gap:10px}.row>div{flex:1;min-width:0}
.chips{display:flex;flex-wrap:wrap;gap:7px}
.chips button{border:1px solid var(--line);background:var(--chip);border-radius:999px;padding:7px 12px;font-size:14px;transition:background .2s,transform .15s}
.chips button:active{transform:scale(.95)}
.chips button.on{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}
.tg{display:flex;align-items:center;justify-content:space-between;margin-top:14px;font-size:15px;gap:10px}
.sw{flex:none;width:50px;height:30px;border-radius:15px;background:var(--line);border:0;position:relative;transition:background .2s}
.sw::after{content:"";position:absolute;left:3px;top:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform .25s var(--spring)}
.sw.on{background:var(--primary)}.sw.on::after{transform:translateX(20px)}
.sw:disabled{opacity:.4}
.acts{display:flex;gap:10px;margin-top:18px}
.acts button{flex:1;border:0;border-radius:999px;height:48px;font-size:16px;transition:transform .15s}
.acts button:active{transform:scale(.97)}
.save{background:var(--primary);color:var(--on-primary);font-weight:600}
.cancel{background:var(--chip)}
.del{flex:0 0 auto !important;background:none;color:var(--out);padding:0 6px}

.toast{position:fixed;left:50%;bottom:calc(90px + env(safe-area-inset-bottom));transform:translateX(-50%) translateY(10px);background:var(--ink);color:#f7f3ec;padding:10px 16px;border-radius:14px;font-size:14px;opacity:0;pointer-events:none;transition:all .25s var(--ease);z-index:40;max-width:90vw;text-align:center;box-shadow:0 8px 30px rgba(0,0,0,.2)}
.dark .toast{background:#2a2b31}
.toast.on{opacity:1;transform:translateX(-50%)}
.err{padding:60px 20px;text-align:center;color:var(--hint)}
.err b{display:block;font:600 22px var(--disp);color:var(--text);margin-bottom:8px}
.skel{height:120px;border-radius:var(--r);background:linear-gradient(90deg,var(--card),var(--chip),var(--card));background-size:200% 100%;animation:sk 1.2s infinite;margin:12px 0}
@keyframes sk{to{background-position:-200% 0}}
.conf{position:fixed;top:-12px;z-index:50;width:8px;height:14px;border-radius:2px;pointer-events:none;animation:fall linear forwards}
@keyframes fall{to{transform:translate3d(var(--dx),110vh,0) rotate(var(--r));opacity:.9}}
.fab{position:fixed;right:16px;bottom:calc(84px + env(safe-area-inset-bottom));z-index:14;height:50px;padding:0 20px;border:0;border-radius:999px;background:var(--primary);color:var(--on-primary);font-size:16px;font-weight:600;box-shadow:0 8px 24px color-mix(in srgb,var(--primary) 40%,transparent);display:none;transition:transform .15s}
.fab:active{transform:scale(.95)}
.fab.on{display:block;animation:rise .35s var(--spring) both}
@media (hover:hover) and (pointer:fine){
  .card.tap:hover,.note:hover{transform:translateY(-2px)}
  .nav:hover,.mini:hover,.chips button:hover,.xl button:hover{border-color:var(--primary)}
  .tabs button:hover{color:var(--primary)}
}
