@font-face{font-family:"Inter";font-style:normal;font-display:swap;font-weight:100 900;src:url(fonts/inter-cyr.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Inter";font-style:normal;font-display:swap;font-weight:100 900;src:url(fonts/inter-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

:root{
  --bg:#0b0b10; --bg2:#12121a;
  --card:rgba(22,22,32,.62); --card-brd:rgba(255,255,255,.08);
  --item:rgba(255,255,255,.035); --item-h:rgba(255,255,255,.06); --item-brd:rgba(255,255,255,.06);
  --fg:#f2f2f7; --fg2:#a1a1b5; --fg3:#6b6b80;
  --a1:#8b5cf6; --a2:#06b6d4; --ok:#22c55e; --danger:#f43f5e;
  --blob1:#6d28d9; --blob2:#0891b2; --blob3:#db2777;
  --shadow:0 30px 80px -20px rgba(0,0,0,.6),0 0 0 1px var(--card-brd);
  --r:22px; --ease:cubic-bezier(.22,1,.36,1); --spring:cubic-bezier(.34,1.56,.64,1);
  color-scheme:dark;
}
@media (prefers-color-scheme:light){:root:not([data-theme="dark"]){
  --bg:#f6f5fb; --bg2:#ffffff;
  --card:rgba(255,255,255,.72); --card-brd:rgba(20,20,40,.08);
  --item:rgba(20,20,40,.025); --item-h:rgba(20,20,40,.05); --item-brd:rgba(20,20,40,.06);
  --fg:#15151f; --fg2:#5d5d72; --fg3:#9a9aae;
  --blob1:#c4b5fd; --blob2:#a5f3fc; --blob3:#fbcfe8;
  --shadow:0 30px 70px -25px rgba(60,40,120,.25),0 0 0 1px var(--card-brd);
  color-scheme:light;
}}
:root[data-theme="light"]{
  --bg:#f6f5fb; --bg2:#ffffff;
  --card:rgba(255,255,255,.72); --card-brd:rgba(20,20,40,.08);
  --item:rgba(20,20,40,.025); --item-h:rgba(20,20,40,.05); --item-brd:rgba(20,20,40,.06);
  --fg:#15151f; --fg2:#5d5d72; --fg3:#9a9aae;
  --blob1:#c4b5fd; --blob2:#a5f3fc; --blob3:#fbcfe8;
  --shadow:0 30px 70px -25px rgba(60,40,120,.25),0 0 0 1px var(--card-brd);
  color-scheme:light;
}

*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}
body{min-height:100dvh;background:var(--bg);color:var(--fg);font:15px/1.45 "Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;font-feature-settings:"cv11","ss01","ss03";-webkit-font-smoothing:antialiased;overflow-x:hidden}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
svg{display:block}
::selection{background:color-mix(in srgb,var(--a1) 40%,transparent)}
:focus-visible{outline:2px solid var(--a1);outline-offset:3px;border-radius:10px}

/* ---------- background ---------- */
.bg{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;contain:strict}
.blob{position:absolute;width:52vmax;height:52vmax;border-radius:50%;filter:blur(90px);opacity:.38;will-change:transform}
.b1{background:var(--blob1);top:-22vmax;left:-14vmax;animation:drift1 38s ease-in-out infinite alternate}
.b2{background:var(--blob2);bottom:-26vmax;right:-16vmax;animation:drift2 44s ease-in-out infinite alternate}
.b3{background:var(--blob3);top:30%;left:45%;width:30vmax;height:30vmax;opacity:.18;animation:drift3 50s ease-in-out infinite alternate}
@keyframes drift1{to{transform:translate3d(12vmax,8vmax,0) scale(1.12)}}
@keyframes drift2{to{transform:translate3d(-10vmax,-12vmax,0) scale(.92)}}
@keyframes drift3{to{transform:translate3d(-18vmax,6vmax,0) scale(1.2)}}
.grain{position:absolute;inset:0;opacity:.05;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

/* ---------- layout ---------- */
.intro .shell{opacity:0}
.shell{max-width:640px;margin:0 auto;padding:max(28px,env(safe-area-inset-top)) 16px 48px}
.top{display:flex;align-items:center;justify-content:space-between;margin-bottom:36px}
.brand{display:flex;align-items:center;gap:12px}
.logo{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;background:linear-gradient(135deg,var(--a1),var(--a2));box-shadow:0 8px 24px -6px color-mix(in srgb,var(--a1) 70%,transparent)}
.logo svg{width:22px;height:22px;fill:none;stroke:#fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:24;stroke-dashoffset:24;animation:draw .9s .35s var(--ease) forwards}
@keyframes draw{to{stroke-dashoffset:0}}
.title{font-size:19px;font-weight:700;letter-spacing:-.02em;display:flex;gap:.3em;overflow:hidden}
.title>span{display:inline-block}
.title .w2{background:linear-gradient(90deg,var(--a1),var(--a2));-webkit-background-clip:text;background-clip:text;color:transparent}

.icon-btn{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:var(--item);border:1px solid var(--item-brd);transition:background .2s,transform .2s var(--spring)}
.icon-btn:hover{background:var(--item-h)}
.icon-btn:active{transform:scale(.92)}
.icon-btn svg{width:20px;height:20px;grid-area:1/1;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;transition:transform .5s var(--spring),opacity .3s}
.theme-btn .moon{fill:currentColor;stroke:none}
.theme-btn .sun{opacity:0;transform:rotate(-90deg) scale(.4)}
:root[data-theme="light"] .theme-btn .sun{opacity:1;transform:none}
:root[data-theme="light"] .theme-btn .moon{opacity:0;transform:rotate(90deg) scale(.4)}
@media (prefers-color-scheme:light){:root:not([data-theme]) .theme-btn .sun{opacity:1;transform:none}:root:not([data-theme]) .theme-btn .moon{opacity:0;transform:rotate(90deg) scale(.4)}}

/* ---------- hero ---------- */
.hero{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:24px}
.eyebrow{font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--fg3);margin-bottom:8px}
.greet{font-size:clamp(28px,7vw,40px);line-height:1.08;font-weight:750;letter-spacing:-.035em}
.sub{margin-top:10px;color:var(--fg2);font-size:15px;min-height:1.45em}
.ring{position:relative;width:92px;height:92px;flex:none}
.ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.ring circle{fill:none;stroke-width:9;stroke-linecap:round}
.ring-track{stroke:var(--item-h)}
.ring-bar{stroke:url(#ringGrad);stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset 1s var(--ease)}
.ring-label{position:absolute;inset:0;display:grid;place-content:center;grid-auto-flow:column;align-items:baseline;font-variant-numeric:tabular-nums}
.ring-label b{font-size:24px;font-weight:750;letter-spacing:-.03em}
.ring-label span{font-size:12px;color:var(--fg3);margin-left:1px}

/* ---------- card ---------- */
.card{position:relative;background:var(--card);border-radius:var(--r);box-shadow:var(--shadow);padding:10px;backdrop-filter:blur(24px) saturate(1.4);-webkit-backdrop-filter:blur(24px) saturate(1.4)}
.card::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .4s;background:radial-gradient(420px circle at var(--mx,50%) var(--my,0),color-mix(in srgb,var(--a1) 14%,transparent),transparent 60%)}
.card:hover::before{opacity:1}

.composer{position:relative;display:flex;align-items:center;gap:10px;padding:6px 6px 6px 16px;border-radius:16px;background:var(--item);border:1px solid var(--item-brd);transition:border-color .25s,box-shadow .35s var(--ease),background .25s}
.composer:focus-within{border-color:color-mix(in srgb,var(--a1) 55%,transparent);background:var(--item-h);box-shadow:0 0 0 4px color-mix(in srgb,var(--a1) 16%,transparent)}
.composer.shake{animation:shake .4s}
@keyframes shake{20%,60%{transform:translateX(-6px)}40%,80%{transform:translateX(6px)}}
.plus svg{width:20px;height:20px;fill:none;stroke:var(--fg3);stroke-width:2;stroke-linecap:round;transition:transform .45s var(--spring),stroke .25s}
.composer:focus-within .plus svg{transform:rotate(90deg);stroke:var(--a1)}
#input{flex:1;min-width:0;height:44px;background:none;border:0;outline:0;color:var(--fg);font:inherit;font-size:16px}
#input::placeholder{color:var(--fg3)}
.hint{font:600 11px/1 "Inter",system-ui;color:var(--fg3);border:1px solid var(--item-brd);border-radius:6px;padding:4px 7px;transition:opacity .2s}
.composer:focus-within .hint{opacity:0}
.add{position:relative;display:flex;align-items:center;gap:6px;height:42px;padding:0 16px;border-radius:12px;font-weight:600;font-size:14px;color:#fff;background:linear-gradient(135deg,var(--a1),color-mix(in srgb,var(--a1) 50%,var(--a2)));box-shadow:0 8px 20px -8px var(--a1),inset 0 1px 0 rgba(255,255,255,.25);overflow:hidden;transition:transform .25s var(--spring),box-shadow .25s,opacity .25s}
.add::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.35) 50%,transparent 70%);transform:translateX(-100%)}
.add:hover::after{transform:translateX(100%);transition:transform .7s var(--ease)}
.add:hover{box-shadow:0 12px 26px -8px var(--a1),inset 0 1px 0 rgba(255,255,255,.25)}
.add:active{transform:scale(.95)}
.add svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;transition:transform .3s var(--spring)}
.add:hover svg{transform:translateX(3px)}
.add:disabled{opacity:.45;cursor:default;box-shadow:none}

/* ---------- tabs ---------- */
.tabs{position:relative;display:flex;gap:4px;margin:10px 0 6px;padding:4px;border-radius:14px;background:var(--item)}
.tab{position:relative;z-index:1;flex:1;height:36px;border-radius:10px;font-size:13.5px;font-weight:600;color:var(--fg2);transition:color .25s}
.tab[aria-selected="true"]{color:var(--fg)}
.tab em{font-style:normal;font-size:11.5px;font-variant-numeric:tabular-nums;margin-left:4px;padding:1px 7px;border-radius:99px;background:var(--item-h);color:var(--fg3);display:inline-block;min-width:22px}
.tab[aria-selected="true"] em{color:var(--fg2)}
.tab-pill{position:absolute;top:4px;left:0;height:36px;width:0;border-radius:10px;background:var(--bg2);box-shadow:0 2px 10px -2px rgba(0,0,0,.25),0 0 0 1px var(--item-brd)}

/* ---------- list ---------- */
.list{list-style:none;display:flex;flex-direction:column;gap:6px;padding:4px 0}
.list:empty{padding:0}
.item{position:relative;display:flex;align-items:center;gap:10px;min-height:56px;padding:8px 8px 8px 4px;border-radius:14px;background:var(--item);border:1px solid var(--item-brd);transition:background .2s,border-color .2s;transform-origin:50% 50%}
.item:hover{background:var(--item-h)}
.item.is-off{display:none}
.grip{width:22px;height:36px;display:grid;place-items:center;cursor:grab;color:var(--fg3);opacity:0;transition:opacity .2s;touch-action:none}
.grip svg{width:16px;height:16px;fill:currentColor}
.item:hover .grip{opacity:.8}
@media (hover:none){.grip{opacity:.5}}
.check{flex:none;width:28px;height:28px;border-radius:50%;display:grid;place-items:center}
.check svg{width:26px;height:26px;overflow:visible}
.c-ring{fill:none;stroke:var(--fg3);stroke-width:1.6;transition:stroke .25s}
.check:hover .c-ring{stroke:var(--a1)}
.c-fill{fill:url(#ringGrad);transform-origin:12px 12px;transform:scale(0);transition:transform .35s var(--spring)}
.c-tick{fill:none;stroke:#fff;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:16;stroke-dashoffset:16;transition:stroke-dashoffset .3s .1s var(--ease)}
.item.done .c-fill{transform:scale(1)}
.item.done .c-tick{stroke-dashoffset:0}
.item.done .c-ring{stroke:transparent}
.text{flex:1;min-width:0;position:relative;padding:4px 0;font-size:15.5px;word-break:break-word;transition:color .35s;outline:0}
.text::after{content:"";position:absolute;left:0;top:52%;height:1.5px;width:100%;background:var(--fg3);transform:scaleX(0);transform-origin:left;transition:transform .45s var(--ease)}
.item.done .text{color:var(--fg3)}
.item.done .text::after{transform:scaleX(1)}
.text[contenteditable="true"]{padding:4px 8px;margin:0 -8px;border-radius:8px;background:var(--bg2);box-shadow:0 0 0 2px color-mix(in srgb,var(--a1) 50%,transparent)}
.text[contenteditable="true"]::after{display:none}
.when{flex:none;font-size:12px;color:var(--fg3);font-variant-numeric:tabular-nums;transition:opacity .2s}
.del{flex:none;width:32px;height:32px;border-radius:10px;display:grid;place-items:center;color:var(--fg3);opacity:0;transform:scale(.8);transition:opacity .2s,transform .25s var(--spring),background .2s,color .2s}
.del svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}
.item:hover .del,.del:focus-visible{opacity:1;transform:none}
.item:hover .when{opacity:0}
.del:hover{color:var(--danger);background:color-mix(in srgb,var(--danger) 12%,transparent)}
@media (hover:none){.del{opacity:.7;transform:none}.when{display:none}}
.sortable-ghost{opacity:.35}
.sortable-chosen{background:var(--item-h)}
.sortable-drag{box-shadow:0 20px 40px -12px rgba(0,0,0,.45);opacity:.95!important}

/* ---------- empty ---------- */
.empty{text-align:center;padding:28px 16px 30px}
.empty-art{width:120px;height:120px;margin:0 auto 10px}
.empty-art svg{width:100%;height:100%;overflow:visible}
.e-orbit{fill:none;stroke:var(--item-brd);stroke-width:1.5;stroke-dasharray:4 6}
.e-card{fill:var(--item-h);stroke:var(--item-brd)}
.e-check{fill:none;stroke:url(#ringGrad);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:44;stroke-dashoffset:44}
.empty.show .e-check{animation:draw .8s .25s var(--ease) forwards}
.e-dot{transform-origin:60px 60px}
.d1{fill:var(--a1);animation:orbit 9s linear infinite}
.d2{fill:var(--a2);animation:orbit 13s linear infinite reverse}
@keyframes orbit{to{transform:rotate(360deg)}}
.empty-art{animation:float 5s ease-in-out infinite}
@keyframes float{50%{transform:translateY(-6px)}}
.empty[hidden] *{animation:none!important}
.empty-title{font-weight:650;font-size:16px}
.empty-sub{color:var(--fg2);font-size:14px;margin-top:4px}

/* ---------- footer ---------- */
.card-foot{display:flex;align-items:center;justify-content:space-between;padding:10px 8px 4px;font-size:13px;color:var(--fg3)}
.card-foot[hidden]{display:none}
.link-btn{color:var(--fg2);padding:6px 10px;border-radius:9px;transition:background .2s,color .2s,opacity .2s}
.link-btn:hover{background:var(--item-h);color:var(--fg)}
.link-btn:disabled{opacity:.35;pointer-events:none}
.shortcuts{text-align:center;margin-top:22px;font-size:12px;color:var(--fg3)}
.shortcuts kbd{font:600 11px "Inter",system-ui;border:1px solid var(--item-brd);background:var(--item);border-radius:6px;padding:2px 6px}
@media (hover:none){.shortcuts{display:none}}

/* ---------- toast ---------- */
.toast{position:fixed;left:50%;bottom:max(24px,env(safe-area-inset-bottom));transform:translateX(-50%);display:flex;align-items:center;gap:14px;padding:10px 10px 10px 18px;border-radius:14px;background:var(--fg);color:var(--bg);font-size:14px;font-weight:500;box-shadow:0 20px 50px -12px rgba(0,0,0,.5);overflow:hidden;max-width:calc(100vw - 32px)}
.toast[hidden]{display:none}
.toast span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.toast button{flex:none;padding:7px 12px;border-radius:9px;font-weight:650;color:var(--bg);background:color-mix(in srgb,var(--bg) 14%,transparent)}
.toast button:hover{background:color-mix(in srgb,var(--bg) 24%,transparent)}
.toast-bar{position:absolute;left:0;bottom:0;height:2px;width:100%;background:linear-gradient(90deg,var(--a1),var(--a2));transform-origin:left}
.toast.run .toast-bar{animation:shrink 5s linear forwards}
@keyframes shrink{from{transform:scaleX(1)}to{transform:scaleX(0)}}

/* ---------- theme switch (View Transitions) ---------- */
::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}

@media (max-width:480px){
  .top{margin-bottom:26px}
  .ring{width:76px;height:76px}
  .ring-label b{font-size:20px}
  .add span{display:none}
  .add{padding:0 13px}
  .hint{display:none}
  .tab{font-size:13px}
  .tab em{margin-left:2px;padding:1px 5px;min-width:18px}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}
