/* ============ Мен · стили ============
   Одна тёмная тема. Все цвета — из токенов ниже. */
:root{
  color-scheme:dark;
  --bg:#181C24; --surface:#1F232B; --raise:#292E37; --line:rgba(232,228,220,.09); --line2:rgba(232,228,220,.16);
  --text:#EEEAE2; --muted:#A5A5A0; --faint:#6E7176;
  --me:#E4D2AE; --today:#E4D2AE; --goals:#93B3D1; --money:#8CC2AC; --sport:#D4A06C; --sleep:#ACA2D8; --mind:#D6A0AD; --diary:#B9C97F;
  --bad:#D98C7A; --energy:#EFC66E;
  --display:'Sora',system-ui,-apple-system,'Segoe UI',sans-serif;
  --body:'Work Sans',system-ui,-apple-system,'Segoe UI',sans-serif;
  --ease:cubic-bezier(.32,.0,.18,1);
}
html,body{height:100%}
body{margin:0;background:radial-gradient(120% 70% at 50% 0%,#20222E 0%,transparent 60%),radial-gradient(120% 60% at 50% 100%,#1B2029 0%,transparent 65%),var(--bg);background-attachment:fixed;color:var(--text);font-family:var(--body);font-size:15px;line-height:1.45;overflow:hidden;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased}
*{box-sizing:border-box}
[hidden]{display:none!important}
button{font:inherit;color:inherit;cursor:pointer;background:none;border:0;padding:0}
input,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--me);outline-offset:3px;border-radius:8px}
.num{font-variant-numeric:tabular-nums}

/* ---------- главный экран ---------- */
#home{position:fixed;inset:0;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
.map{position:relative;height:100%;max-width:520px;margin:0 auto}
.map svg.links{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
/* 21st · Animated Beam: подложка (pathOpacity .2) + луч-градиент, который бежит от раздела к «Мен».
   Луч горит только у разделов, где сегодня уже есть записи. */
.link{fill:none;stroke-width:2;stroke-linecap:round;opacity:.24;transition:opacity .7s ease}
.link.sat{stroke-width:1.5;opacity:.2}
.link.lit{opacity:.34}
.beam{fill:none;stroke-width:2.4;stroke-linecap:round;opacity:0;transition:opacity .7s ease}
.beam.sat{stroke-width:1.8}
.beam.glow{stroke-width:7}
.beam.glow.sat{stroke-width:5}
.beam.on{opacity:1}
.beam.glow.on{opacity:.28}
#home{z-index:1}
.topline{position:absolute;top:14px;left:20px;right:20px;display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px;color:var(--faint);z-index:2}
.topline b{font-weight:500;color:var(--muted)}

.core{position:absolute;transform:translate(-50%,-50%);width:140px;height:140px;border-radius:50%;z-index:2;
  background:radial-gradient(circle at 50% 36%,#30343B,#1B1E23 72%);
  box-shadow:0 0 0 1px rgba(228,210,174,.30),0 0 0 10px rgba(228,210,174,.04),0 0 70px rgba(228,210,174,.18);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px}
.core::after{content:"";position:absolute;inset:-16px;border-radius:50%;border:1px solid rgba(228,210,174,.18);animation:breathe 4.5s ease-in-out infinite;pointer-events:none}
@keyframes breathe{0%,100%{transform:scale(.96);opacity:.45}50%{transform:scale(1.04);opacity:1}}
.core svg.ring{position:absolute;inset:-7px;width:calc(100% + 14px);height:calc(100% + 14px);transform:rotate(-90deg)}
.core svg.ring circle{fill:none;stroke-width:4}
.core .w{font-family:var(--display);font-weight:800;font-size:36px;line-height:1;color:var(--me);letter-spacing:.01em;text-shadow:0 0 18px rgba(228,210,174,.35)}
.core .s{font-size:12px;color:var(--muted)}

.node{position:absolute;transform:translate(-50%,-50%);z-index:2;display:flex;flex-direction:column;align-items:center;gap:8px;width:132px;text-align:center}
.node .ball{width:70px;height:70px;border-radius:50%;position:relative;display:flex;align-items:center;justify-content:center;transition:transform .25s var(--ease);
  background:radial-gradient(circle at 50% 35%,color-mix(in srgb,var(--h) 28%,#282C33),#1C1F24 76%);
  box-shadow:0 0 0 1px color-mix(in srgb,var(--h) 50%,transparent),0 0 26px color-mix(in srgb,var(--h) 26%,transparent),0 8px 30px color-mix(in srgb,var(--h) 16%,transparent)}
.node .ball svg{width:27px;height:27px;stroke:var(--h);fill:none;stroke-width:1.7;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--h) 60%,transparent));stroke-linecap:round;stroke-linejoin:round}
.node:active .ball{transform:scale(.94)}
.node .t{font-family:var(--display);font-weight:600;font-size:13.5px;line-height:1}
.node .v{font-size:12px;color:var(--h);opacity:.9;line-height:1.25;min-height:1.25em}
.node.todo .ball::after{content:"";position:absolute;top:3px;right:3px;width:9px;height:9px;border-radius:50%;background:var(--h);box-shadow:0 0 10px var(--h)}
.node.sat{width:90px;gap:6px}
.node.sat .ball{width:46px;height:46px}
.node.sat .ball svg{width:20px;height:20px}
.node.sat .t{font-size:12px;font-weight:500;color:var(--muted)}
.node.sat .v{font-size:11.5px}

.idea{position:absolute;left:50%;transform:translateX(-50%);width:min(280px,calc(100% - 156px));text-align:center;font-size:12.5px;color:var(--faint);line-height:1.45;z-index:2}
.idea b{display:block;color:var(--muted);font-weight:500;font-size:13px;margin-bottom:1px}

.fab{position:fixed;z-index:30;right:max(20px,calc(50% - 240px));bottom:calc(22px + env(safe-area-inset-bottom,0px));width:52px;height:52px;border-radius:50%;
  background:var(--me);color:#1B1812;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 28px rgba(228,210,174,.30)}
.fab svg{width:22px;height:22px;stroke:currentColor;stroke-width:2;stroke-linecap:round}

/* ---------- раскрытие круга ---------- */
.view{position:fixed;inset:0;z-index:16;isolation:isolate;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
.view .in{max-width:560px;margin:0 auto;padding-inline:20px;padding-block:calc(12px + env(safe-area-inset-top,0px)) calc(110px + env(safe-area-inset-bottom,0px));}
.fx{position:fixed;z-index:15;border-radius:50%;pointer-events:none;will-change:transform}
.view{will-change:opacity}
.bar{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:10px;padding-block:8px;margin-bottom:6px;background:inherit}
.back{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 14px 0 10px;border-radius:999px;background:var(--raise);font-size:13.5px;color:var(--muted)}
.back svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.vh{display:flex;align-items:center;gap:14px;margin:14px 0 22px}
.vh .ic{width:44px;height:44px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 1px color-mix(in srgb,var(--h) 45%,transparent)}
.vh .ic svg{width:20px;height:20px;stroke:var(--h);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.vh h1{font-family:var(--display);font-weight:700;font-size:24px;line-height:1.1;margin:0;text-wrap:balance}
.vh p{margin:3px 0 0;font-size:13.5px;color:var(--muted)}

/* ---------- блоки ---------- */
.sec{padding-block:14px;border-top:1px solid var(--line)}
.sec:first-of-type{border-top:0}
.sec h2{margin:0 0 10px;font-size:12px;font-weight:500;letter-spacing:.09em;text-transform:uppercase;color:var(--faint);display:flex;justify-content:space-between;align-items:baseline}
.sec h2 span{letter-spacing:0;text-transform:none;font-size:13px;color:var(--muted)}
.big{font-family:var(--display);font-weight:600;font-size:30px;line-height:1.05}
.big small{font-family:var(--body);font-size:13.5px;font-weight:400;color:var(--muted);margin-left:6px}
.row{display:flex;align-items:center;gap:12px;min-height:44px;padding-block:6px}
.row .r{margin-left:auto;color:var(--muted);font-size:14px;white-space:nowrap}
.row .sub{display:block;font-size:12.5px;color:var(--faint)}
.pos{color:var(--money)!important}
.chk{width:22px;height:22px;flex:none;border-radius:7px;box-shadow:inset 0 0 0 1.5px var(--faint);display:flex;align-items:center;justify-content:center}
.chk svg{width:13px;height:13px;stroke:#16181B;fill:none;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;opacity:0}
.chk.on{background:var(--h,var(--me));box-shadow:none}
.chk.on svg{opacity:1}
.row.done .tt{color:var(--faint);text-decoration:line-through}
.empty{color:var(--faint);font-size:14px;padding-block:6px}
.add{display:flex;gap:8px;margin-top:6px}
.add input{flex:1;min-width:0;height:44px;border-radius:12px;background:var(--raise);border:1px solid transparent;padding:0 14px;font-size:16px;outline:none}
.add input:focus{border-color:var(--line2)}
.add input::placeholder,textarea::placeholder{color:var(--faint)}
.add button{height:44px;padding:0 16px;border-radius:12px;background:var(--raise);color:var(--muted);font-size:14px}
textarea.note{width:100%;min-height:84px;resize:vertical;border-radius:12px;background:var(--raise);border:1px solid transparent;padding:12px 14px;font-size:16px;line-height:1.45;outline:none}
textarea.note:focus{border-color:var(--line2)}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{font-size:12.5px;padding:5px 10px;border-radius:999px;background:var(--raise);color:var(--muted)}
.chip b{font-weight:500;color:var(--text)}
.sets{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.sets span{font-size:12.5px;padding:3px 8px;border-radius:8px;background:var(--raise);color:var(--muted)}
.meter{height:4px;border-radius:4px;background:var(--raise);overflow:hidden;margin-top:10px}
.meter i{display:block;height:100%;border-radius:4px;background:var(--h,var(--me))}
.soon{margin-top:18px;font-size:12.5px;color:var(--faint);text-align:center}
.bars{display:flex;gap:6px;align-items:flex-end;height:96px;margin-top:10px}
.bars div{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;font-size:10.5px;color:var(--faint)}
.bars i{display:block;width:100%;border-radius:6px;background:color-mix(in srgb,var(--h) 35%,transparent)}
.bars div.last i{background:var(--h)}

/* ---------- календарь «Мен» ---------- */
.mhead{display:flex;align-items:center;justify-content:space-between;margin:12px 0 4px}
.mhead h1{font-family:var(--display);font-weight:700;font-size:24px;margin:0;text-transform:capitalize}
.mnav{display:flex;gap:6px}
.mnav button{width:36px;height:36px;border-radius:50%;background:var(--raise);display:flex;align-items:center;justify-content:center;color:var(--muted)}
.mnav svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.msum{font-size:13px;color:var(--muted);margin-bottom:18px}
.dow{display:grid;grid-template-columns:repeat(7,1fr);font-size:11px;color:var(--faint);text-align:center;margin-bottom:6px;letter-spacing:.04em}
.grid{display:grid;grid-template-columns:repeat(7,1fr);row-gap:8px}
.day{display:flex;flex-direction:column;align-items:center;gap:3px;padding-block:4px;border-radius:12px;min-width:0}
.day .rg{position:relative;width:38px;height:38px}
.day .rg svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}
.day .rg circle{fill:none;stroke-width:2.2}
.day .rg .n{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:13.5px}
.day .dots{display:flex;gap:3px;height:4px}
.day .dots i{width:4px;height:4px;border-radius:50%}
.day .sp{font-size:10px;color:var(--faint);height:12px;line-height:12px;max-width:100%;overflow:hidden;white-space:nowrap}
.day.out{visibility:hidden}
.day.fut .n{color:var(--faint)}
.day.today .n{color:var(--me);font-weight:600}
.day.sel{background:var(--raise)}
.legend{display:flex;gap:14px;flex-wrap:wrap;justify-content:center;margin-top:18px;font-size:11.5px;color:var(--faint)}
.legend span{display:inline-flex;align-items:center;gap:5px}
.legend i{width:6px;height:6px;border-radius:50%}

/* ---------- нижний лист (день, быстрая запись) ---------- */
.shade{position:fixed;inset:0;z-index:40;background:rgba(6,7,9,.55);opacity:0;transition:opacity .25s ease}
.shade.on{opacity:1}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:41;max-height:88%;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
  background:var(--surface);border-radius:22px 22px 0 0;box-shadow:0 -1px 0 var(--line2);
  transform:translateY(100%);transition:transform .32s var(--ease)}
.sheet.on{transform:none}
.sheet .in{max-width:560px;margin:0 auto;padding-inline:20px;padding-block:10px calc(24px + env(safe-area-inset-bottom,0px))}
.grab{width:36px;height:4px;border-radius:4px;background:var(--line2);margin:0 auto 12px}
.sh{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}
.sh h3{font-family:var(--display);font-weight:600;font-size:19px;margin:0;text-wrap:balance}
.sh p{margin:3px 0 0;font-size:13px;color:var(--muted)}
.x{width:36px;height:36px;border-radius:50%;background:var(--raise);flex:none;display:flex;align-items:center;justify-content:center;color:var(--muted)}
.x svg{width:14px;height:14px;stroke:currentColor;stroke-width:2;stroke-linecap:round}
.qa input{width:100%;height:52px;border-radius:14px;background:var(--raise);border:1px solid var(--line2);padding:0 16px;font-size:17px;outline:none}
.qa .pv{min-height:22px;margin-top:10px;font-size:14px;color:var(--muted)}
.qa .pv b{font-weight:600;color:var(--h,var(--text))}
.qa .ex{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
.qa .ex button{font-size:12.5px;padding:6px 11px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line2);color:var(--muted)}
.go{width:100%;height:50px;margin-top:14px;border-radius:14px;background:var(--me);color:#1B1812;font-weight:600;font-size:15px}
.go:disabled{opacity:.4}

.toast{position:fixed;left:50%;bottom:calc(90px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);z-index:60;background:var(--text);color:#15171A;border-radius:999px;padding:9px 16px;font-size:13.5px;font-weight:500;white-space:nowrap;box-shadow:0 8px 24px rgba(0,0,0,.4)}
.toast.err{background:var(--bad)}
.boot{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;color:var(--faint);font-size:13px;z-index:70;background:var(--bg);transition:opacity .3s}

@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ============ сцены ============ */
canvas.scene{position:fixed;inset:0;width:100%;height:100%;display:block;pointer-events:none}
#homescene{z-index:0}
#vscene{z-index:-2}
.veil{position:fixed;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(180deg,rgba(14,16,24,.05) 0%,rgba(14,16,24,.18) 40%,rgba(14,16,24,.38) 100%)}
.view .sec{background:rgba(17,19,27,.70);border:1px solid rgba(255,255,255,.06);border-radius:18px;padding:14px 16px;margin-bottom:12px}
.view .sec:first-of-type{border-top:1px solid rgba(255,255,255,.06)}
.view .sec .card{background:rgba(255,255,255,.04)}
.bar{background:transparent}
.bar .back{background:rgba(24,28,36,.72);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:var(--text)}
.vh h1{text-shadow:0 2px 16px rgba(0,0,0,.45)}
.vh p{color:#D6D2CA}
.vh .ic{background:rgba(20,22,30,.55);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}

/* ============ общие элементы разделов ============ */
.sec h2 span{max-width:60%;text-align:right}
.btn{display:block;width:100%;height:48px;margin-top:12px;border-radius:14px;background:var(--h,var(--me));color:#15171B;font-weight:600;font-size:15px}
.btn-wide{width:100%;height:46px;border-radius:14px;box-shadow:inset 0 0 0 1px var(--line2);color:var(--muted);margin-top:8px}
.btn-g{height:36px;padding:0 14px;border-radius:10px;background:var(--raise);color:var(--muted);font-size:13.5px}
.btn-d{height:32px;padding:0 12px;border-radius:10px;background:var(--bad);color:#1A1210;font-size:13px;font-weight:600;flex:none}
.btn-s{height:32px;padding:0 12px;border-radius:10px;background:color-mix(in srgb,var(--h) 22%,transparent);color:var(--text);font-size:13px;flex:none}
.link-b{color:var(--h,var(--me));font-size:14px;padding-block:10px;display:inline-block}
.links{display:flex;gap:18px;flex-wrap:wrap}
.mini-x{width:30px;height:30px;flex:none;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--faint)}
.mini-x svg{width:12px;height:12px;stroke:currentColor;stroke-width:2;stroke-linecap:round}
.mini-x:hover{background:var(--raise);color:var(--muted)}
.acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:10px}
.warn{font-size:13.5px;color:var(--bad)}
.bad{color:var(--bad)!important}
.form{display:flex;flex-direction:column;gap:10px;margin-top:4px}
.field{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--faint);min-width:0}
.field input,.field select,.field textarea{height:44px;border-radius:12px;background:rgba(40,45,55,.75);border:1px solid transparent;padding:0 12px;font-size:16px;outline:none;color:var(--text);min-width:0;width:100%}
.field textarea{height:auto}
.field input:focus,.field select:focus{border-color:var(--line2)}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:end}
.three-f{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;align-items:end}
.check{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--muted);min-height:44px}
.check input{width:18px;height:18px;accent-color:var(--h,var(--me))}
.pick{display:flex;gap:6px;flex-wrap:wrap}
.pick.scroll{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;margin-bottom:6px;scrollbar-width:none}
.pick.scroll::-webkit-scrollbar{display:none}
.pick label{position:relative}
.pick input{position:absolute;opacity:0;pointer-events:none}
.pick label span,.pick button{display:inline-flex;align-items:center;height:34px;padding:0 13px;border-radius:999px;background:rgba(40,45,55,.7);color:var(--muted);font-size:13.5px;white-space:nowrap;cursor:pointer}
.pick input:checked+span,.pick button[aria-pressed="true"]{background:color-mix(in srgb,var(--h) 30%,transparent);color:var(--text);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--h) 60%,transparent)}
.pick input:focus-visible+span{outline:2px solid var(--h);outline-offset:2px}
/* Дневник: лента дней и записи */
.dstrip{display:flex;gap:6px;overflow-x:auto;padding:2px 0 10px;scrollbar-width:none;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch}
.dstrip::-webkit-scrollbar{display:none}
.dy{flex:none;width:46px;display:flex;flex-direction:column;align-items:center;gap:2px;padding:7px 0 6px;border-radius:14px;background:rgba(30,34,42,.6)}
.dy .w{font-size:10.5px;color:var(--faint);text-transform:uppercase}
.dy .n{font-size:16px;font-weight:500;color:var(--text)}
.dy .p{display:flex;gap:3px;height:5px}
.dy .p i{width:5px;height:5px;border-radius:50%}
.dy.today .n{color:var(--diary)}
.dy[aria-pressed="true"]{background:color-mix(in srgb,var(--diary) 22%,transparent);box-shadow:inset 0 0 0 1.5px var(--diary)}
textarea.note.dy-t{min-height:170px}
.dye{display:block;width:100%;text-align:left;padding:10px 0;border-top:1px solid var(--line)}
.dye:first-of-type{border-top:0}
.dye b{font-weight:500;font-size:13px;color:var(--diary)}
.dye span{margin-top:2px;font-size:14px;line-height:1.4;color:var(--muted);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.seg{display:flex;background:rgba(40,45,55,.7);border-radius:12px;padding:3px;gap:3px}
.seg button,.seg label{flex:1;position:relative}
.seg input{position:absolute;opacity:0}
.seg button,.seg label span{display:flex;align-items:center;justify-content:center;height:36px;border-radius:9px;font-size:14px;color:var(--muted);cursor:pointer}
.seg button[aria-pressed="true"],.seg input:checked+span{background:var(--surface);color:var(--text);box-shadow:0 1px 0 var(--line2)}
.kpis{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.kpis.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.kpis.four{grid-template-columns:1fr 1fr}
.kpis>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.kpis .k{font-size:12px;color:var(--faint)}
.kpis .v{font-family:var(--display);font-weight:600;font-size:21px;line-height:1.15;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kpis .s{font-size:11.5px;color:var(--faint)}
.mrow{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.cbars{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.cb{display:grid;grid-template-columns:92px 1fr auto;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
.cb i{display:block;height:6px;border-radius:6px;background:var(--h)}
.cb b{font-weight:500;color:var(--text)}
.dsep{font-size:12px;color:var(--faint);margin-top:10px;text-transform:none}
.card{border-radius:14px;background:rgba(30,34,42,.62);margin-bottom:8px;overflow:hidden}
.card-h{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:12px 14px;min-height:52px}
.card-h .ct{display:flex;flex-direction:column;min-width:0;flex:1}
.card-h .t{font-weight:500}
.card-h .sub,.row .sub{font-size:12.5px;color:var(--faint)}
.card-h .pct{color:var(--h);font-size:14px}
.card .meter{margin:0 14px 12px}
.card-b{padding:0 14px 12px}
.note-t{margin:0 0 8px;font-size:14px;color:var(--muted);line-height:1.5}
.auto{margin-bottom:12px}
.hero-t{font-family:var(--display);font-weight:600;font-size:20px;line-height:1.3;text-wrap:balance}
.hero-p{color:var(--muted);margin:8px 0 0}
.hero-a{margin:10px 0 0}
.hero-a b{color:var(--mind);font-weight:500}
.range{width:100%;accent-color:var(--h,var(--me));height:28px}
svg.chart{width:100%;height:auto;display:block;margin-top:6px;overflow:visible}
.ch{font-size:13px;font-weight:500;color:var(--muted);margin:16px 0 0}
.hint{font-size:13px;color:var(--muted);margin:6px 0}
.banner{font-size:13px;padding:10px 12px;border-radius:12px;background:color-mix(in srgb,var(--h) 16%,transparent);margin:10px 0}

/* спорт */
.wk{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;color:var(--muted);margin-bottom:8px}
.nb{width:34px;height:34px;border-radius:50%;background:rgba(40,45,55,.7);display:flex;align-items:center;justify-content:center;color:var(--muted);flex:none}
.nb svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.strip{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin-bottom:6px}
.dc{position:relative;display:flex;flex-direction:column;align-items:center;gap:1px;padding:7px 2px;border-radius:12px;background:rgba(30,34,42,.6)}
.dc .dn{font-size:10.5px;color:var(--faint)}
.dc .dd{font-size:15px;font-weight:500}
.dc .dt{font-size:9.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.dc.rest{opacity:.55}
.dc.today .dd{color:var(--sport)}
.dc.done{background:color-mix(in srgb,var(--sport) 18%,rgba(30,34,42,.6))}
.dc.sel{box-shadow:inset 0 0 0 1.5px var(--sport)}
.dc .md{position:absolute;top:5px;right:6px;width:5px;height:5px;border-radius:50%;background:var(--money)}
.dm{margin-bottom:12px}
.dm-t{display:flex;justify-content:space-between;font-size:14px}
.dm-b{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:8px}
.dm-b button{height:38px;border-radius:10px;background:rgba(40,45,55,.7);font-size:14px}
.ex{padding:12px 0;border-top:1px solid var(--line)}
.ex-h{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.howb{display:flex;flex-direction:column;align-items:flex-start;text-align:left;gap:2px}
.howb b{font-weight:500;font-size:15px}
.howb span{font-size:12px;color:var(--sport);text-decoration:underline;text-underline-offset:3px}
.tg{font-size:13px;color:var(--muted);white-space:nowrap}
.sug{color:var(--sport);font-weight:500;white-space:nowrap}
.setg{display:grid;grid-template-columns:20px minmax(0,1fr) 14px minmax(0,1fr) 30px;gap:6px;align-items:center;margin-top:6px}
.setg input{height:40px;border-radius:10px;background:rgba(40,45,55,.75);border:1px solid transparent;text-align:center;font-size:16px;outline:none;min-width:0;width:100%;color:var(--text)}
.setg input:focus{border-color:color-mix(in srgb,var(--sport) 60%,transparent)}
.setg .sn{font-size:12px;color:var(--faint);text-align:center}
.setg .x{color:var(--faint);text-align:center}
.splits{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;margin-top:6px}
.splits input{height:38px;border-radius:10px;background:rgba(40,45,55,.75);border:1px solid transparent;text-align:center;font-size:16px;min-width:0;color:var(--text)}
.howto{display:grid;grid-template-columns:1fr;gap:10px;margin:10px 0;padding:10px;border-radius:12px;background:rgba(20,22,30,.55)}
.anim{position:relative;border-radius:10px;overflow:hidden;background:#fff;aspect-ratio:4/3;max-width:100%}
.anim img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.anim img.f2{animation:xf 2.6s ease-in-out infinite alternate}
@keyframes xf{0%,35%{opacity:0}65%,100%{opacity:1}}
.anim span{position:absolute;left:8px;bottom:6px;font-size:11px;color:#333;background:rgba(255,255,255,.8);border-radius:6px;padding:2px 6px}
.howto ol{margin:0;padding-left:18px;font-size:13.5px;color:var(--muted);display:flex;flex-direction:column;gap:4px}
.howto .err{color:var(--bad);list-style:none;margin-left:-18px}
.lg-e{display:flex;flex-direction:column;gap:4px;margin-bottom:8px;font-size:14px}
.sets-v{display:flex;gap:5px;flex-wrap:wrap}
.sets-v span{font-size:12.5px;padding:2px 7px;border-radius:7px;background:var(--raise);color:var(--muted)}
@media (min-width:520px){.howto{grid-template-columns:220px 1fr}.kpis.four{grid-template-columns:repeat(4,minmax(0,1fr))}}

/* ============ телефон: экран стоит, двигается только то, что прокручивается ============ */
html,body{overscroll-behavior:none;touch-action:manipulation}
#home,#homescene,.fab{touch-action:none}
.view,.sheet{touch-action:pan-y;overflow-x:hidden}
.pick.scroll{touch-action:pan-x pan-y}
button,.node,.core,.day,.dc{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
#home{-webkit-user-select:none;user-select:none}
input,textarea,select{-webkit-user-select:text;user-select:text}

/* редактор упражнений */
.editor{display:flex;flex-direction:column;gap:10px;margin-top:10px}
.ed-row{display:flex;flex-direction:column;gap:6px;padding:10px;border-radius:12px;background:rgba(255,255,255,.04)}
.ed-row>input{height:42px;border-radius:10px;background:rgba(40,45,55,.75);border:1px solid transparent;padding:0 12px;font-size:16px;color:var(--text);min-width:0}
.ed-num{display:flex;align-items:center;gap:6px}
.ed-num input[inputmode]{width:56px;height:38px;border-radius:10px;background:rgba(40,45,55,.75);border:1px solid transparent;text-align:center;font-size:16px;color:var(--text)}
.ed-num span{color:var(--faint)}
.ed-nw{display:flex;align-items:center;gap:5px;font-size:12.5px;color:var(--muted);margin-left:auto}
.ed-nw input{width:16px;height:16px;accent-color:var(--sport)}
.mini-x:disabled{opacity:.3}

/* живой «Мен» */
.core{box-shadow:0 0 0 1px rgba(228,210,174,.30),0 0 0 10px rgba(228,210,174,.04),0 0 calc(50px + 70px * var(--glow,0)) rgba(228,210,174,calc(.12 + .28 * var(--glow,0)));transition:box-shadow .8s ease}
/* энергия */
.en-slots{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.en-slot{display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px 4px;border-radius:14px;background:rgba(40,45,55,.7);min-height:74px}
.en-slot .en-n{font-size:12px;color:var(--muted)}
.en-slot .en-v{font-family:var(--display);font-weight:600;font-size:22px;line-height:1.1;color:var(--faint)}
.en-slot .en-t{font-size:11px;color:var(--faint);min-height:1em}
.en-slot.set .en-v{color:var(--energy)}
.en-slot.hot{box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--energy) 70%,transparent)}
.en-slot.hot .en-t{color:var(--energy)}
.en-slot.open{background:color-mix(in srgb,var(--energy) 18%,rgba(40,45,55,.7))}
.en-pick{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:4px;margin-top:10px}
.en-pick button{height:40px;border-radius:10px;background:rgba(239,198,110,var(--a));color:#16140F;font-weight:600;font-size:14px}
.en-pick button[aria-pressed="true"]{box-shadow:0 0 0 2px var(--text)}
.en-ins{margin-top:10px}
/* цели */
.goal.done .t{color:var(--muted)}
.goal.late .sub{color:var(--bad)}
.gmark{width:26px;height:26px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center}
.gmark svg{width:14px;height:14px;stroke-width:2.6;fill:none;stroke-linecap:round;stroke-linejoin:round}
.gmark.ok{background:var(--money)} .gmark.ok svg{stroke:#122018}
.gmark.no{background:rgba(255,255,255,.08)} .gmark.no svg{stroke:var(--muted);width:11px;height:11px}
.ask{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 14px 12px;padding:10px 12px;border-radius:12px;background:color-mix(in srgb,var(--money) 14%,transparent);font-size:14px}
.ask span{flex:1 1 100%}
.link-b.danger{color:var(--bad)}
.star{color:var(--today);font-weight:600}
/* итоги недели */
.rvs{display:grid;grid-template-columns:1fr 1fr;gap:8px 14px}
.rv{display:flex;flex-direction:column;gap:1px;font-size:12px;color:var(--faint)}
.rv b{font-size:15px;font-weight:500;color:var(--text)}
.dl{font-size:11.5px}
.dl.good{color:var(--money)} .dl.bad{color:var(--bad)}
.ai{margin-top:12px;padding:12px;border-radius:12px;background:rgba(255,255,255,.05)}
.ai b{font-size:12px;font-weight:500;color:var(--me);letter-spacing:.04em}
.ai p{margin:6px 0 0;font-size:14px;line-height:1.55}
/* календарь: вид и год */
.bar{justify-content:space-between}
.cal-seg{width:160px}
.cal-seg button{height:32px;font-size:13px}
.year{display:flex;flex-direction:column;gap:5px}
.yr{display:grid;grid-template-columns:30px 1fr;align-items:center;gap:6px}
.yr span{font-size:10.5px;color:var(--faint);text-transform:capitalize}
.yds{display:grid;grid-template-columns:repeat(31,minmax(0,1fr));gap:2px}
.yd,.yd-x{aspect-ratio:1;border-radius:50%;min-width:0;padding:0}
.yd{background:rgba(255,255,255,.07)}
.yd[style]{background:rgba(228,210,174,var(--a))}
.yd.today{box-shadow:0 0 0 1.5px var(--me)}
.yd.fut{background:rgba(255,255,255,.03)}

/* главный экран днём: светлое небо — тёмные подписи */
body.bright .topline,body.bright .topline b{color:#2A3550}
body.bright #map .node .t{color:#18223A;text-shadow:0 1px 10px rgba(255,255,255,.55)}
body.bright #map .node .v{color:#2E3B58;opacity:1;text-shadow:0 1px 8px rgba(255,255,255,.5)}
body.bright #map .node.sat .t{color:#2A3550}
body.bright .idea{color:#34405A;text-shadow:0 1px 10px rgba(255,255,255,.55)}
body.bright .idea b{color:#1F2A40}
.idea{text-shadow:0 1px 8px rgba(0,0,0,.5)}
body.bright .link{opacity:.42}
body.bright .link.sat{opacity:.34}
body.bright .link.lit{opacity:.55}
body.bright .node .ball{box-shadow:0 0 0 1px color-mix(in srgb,var(--h) 60%,transparent),0 6px 22px rgba(20,40,80,.28)}
body.bright .core{box-shadow:0 0 0 1px rgba(255,255,255,.5),0 0 0 10px rgba(255,255,255,.12),0 10px 40px rgba(20,40,80,.3)}
/* подписи узлов читаются на любом участке гор */
body:not(.bright) #map .node .t,body:not(.bright) #map .node .v{text-shadow:0 1px 3px rgba(0,0,0,.7),0 0 12px rgba(0,0,0,.45)}
/* ---- звук на главном ---- */
.topline .tr{display:flex;align-items:center;gap:8px}
.snd{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--muted);background:rgba(20,24,32,.28);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);margin:-8px -4px -8px 0}
.snd svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.snd.on{color:var(--energy)}
body.bright .snd{color:#2A3550;background:rgba(255,255,255,.35)}
body.bright .snd.on{color:#9A6A10}
/* ---- повторяющиеся дела ---- */
.task-add select{height:44px;max-width:118px;border-radius:12px;background:var(--raise);color:var(--muted);border:1px solid transparent;padding:0 8px;font-size:16px;outline:none;-webkit-appearance:none;appearance:none;text-align:center}
.sub.rec{display:inline-flex;align-items:center;gap:4px;margin-left:8px;font-size:12px;color:var(--faint)}
.sub.rec svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
@media (max-width:380px){.task-add select{max-width:96px;padding:0 4px}}
/* ---- круг трат ---- */
.donut{display:flex;align-items:center;gap:18px;margin-top:14px}
.donut svg{width:132px;height:132px;flex:none}
.donut .dl{flex:1;min-width:0;display:flex;flex-direction:column;gap:7px}
.donut .dl div{display:grid;grid-template-columns:10px 1fr auto auto;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.donut .dl i{width:9px;height:9px;border-radius:50%}
.donut .dl span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.donut .dl em{font-style:normal;color:var(--faint);font-size:12px}
.donut .dl b{font-weight:500;color:var(--text)}
@media (max-width:360px){.donut{flex-direction:column;align-items:stretch}.donut svg{align-self:center}}
/* ---- серии ---- */
.streaks{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.stk{background:var(--raise);border-radius:14px;padding:10px 8px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:2px;border:1px solid transparent}
.stk b{font-size:20px;font-weight:600;color:var(--faint)}
.stk.on{border-color:color-mix(in srgb,var(--h) 35%,transparent)}
.stk.on b{color:var(--h)}
.stk span{font-size:12px;color:var(--text);white-space:nowrap}
.stk em{white-space:nowrap}
.stk em{font-style:normal;font-size:10.5px;color:var(--faint);line-height:1.25}
@media (max-width:370px){.streaks{grid-template-columns:repeat(2,1fr)}}
/* ---- прогноз силы, выгрузка ---- */
.hint.fc{margin:6px 0 16px;font-size:13px;color:var(--muted)}
.hint.fc b{color:var(--text);font-weight:600}
.hint.fc.ok{color:var(--sport)}
.exp .acts{display:flex;gap:8px;flex-wrap:wrap}
.exp .btn-g{display:inline-flex;align-items:center;gap:6px}
.exp .btn-g svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}


/* ============ 21st · AI Voice Input (kokonutd) — перенесено без React ============ */
.qa-voice{margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}
.qa-voice .or{font-size:12.5px;color:var(--faint);text-align:center}
.vi{width:100%;padding-block:10px}
.vi .wrap{position:relative;max-width:36rem;width:100%;margin:0 auto;display:flex;align-items:center;flex-direction:column;gap:8px}
.vi .mic{width:64px;height:64px;border-radius:12px;display:flex;align-items:center;justify-content:center;transition:background-color .15s}
.vi .mic:hover{background:rgba(255,255,255,.1)}
.vi.on .mic:hover{background:none}
.vi .mic svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;color:rgba(238,234,226,.7)}
.vi .sq{width:24px;height:24px;border-radius:2px;background:var(--text);animation:vi-spin 3s linear infinite}
@keyframes vi-spin{to{transform:rotate(360deg)}}
.vi .tm{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:14px;color:rgba(238,234,226,.3);transition:opacity .3s,color .3s}
.vi.on .tm{color:rgba(238,234,226,.7)}
.vi .bars{height:16px;width:256px;max-width:100%;display:flex;align-items:center;justify-content:center;gap:2px}
.vi .bars i{width:2px;height:4px;border-radius:999px;background:rgba(255,255,255,.1);transition:height .3s,background-color .3s}
.vi.on .bars i{background:rgba(255,255,255,.5);animation:vi-pulse 2s cubic-bezier(.4,0,.6,1) infinite}
@keyframes vi-pulse{50%{opacity:.5}}
.vi .lb{height:16px;margin:0;font-size:12px;color:rgba(238,234,226,.7)}
.vi-hint{font-size:12.5px;color:var(--energy);text-align:center;margin:2px 0 8px;line-height:1.4}
#qa-long{margin-top:6px;min-height:96px}
.qa-items{margin-top:12px}
.qa-items .row{cursor:pointer}
.qa-items .row .tt b{font-weight:600;color:var(--h)}
.qa-items .row.off{opacity:.45}
.qa-items .row.off .tt{text-decoration:line-through}
.qa-think{font-size:13.5px;color:var(--muted);margin-top:12px;text-align:center}

/* ============ 21st · Heat Calendar (ssychui) — перенесено без React ============ */
.hc-sec .chips{margin-bottom:12px}
.hc-sec .chip{border:0;cursor:pointer}
.hc-sec .chip[aria-pressed="true"]{background:color-mix(in srgb,var(--h) 26%,transparent);color:var(--text)}
.hc{position:relative;width:fit-content;margin-inline:auto}
.hc-top{display:flex;align-items:baseline;justify-content:space-between}
.hc-top .t{font-size:12px;font-weight:500;color:var(--muted)}
.hc-top .w{font-size:11px;color:var(--muted)}
.hc-grid{position:relative;margin-top:12px;display:flex;gap:4px}
.hc-col{display:flex;flex-direction:column;gap:4px;border-radius:5px;transition:background-color .15s;opacity:0;animation:hc-in .4s cubic-bezier(.16,1,.3,1) forwards}
.hc-col.pin{background:color-mix(in srgb,var(--text) 6%,transparent)}
@keyframes hc-in{to{opacity:1}}
.hc-grid.still .hc-col{animation:none;opacity:1}
.hc-c{position:relative;display:block;width:14px;height:14px}
.hc-c button{position:absolute;inset:-2px;display:block;cursor:pointer;border-radius:5px;outline:none}
.hc-c button:focus-visible{box-shadow:0 0 0 2px var(--me)}
.hc-c i{pointer-events:none;position:absolute;inset:2px;display:block;border-radius:3.5px;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 7%,transparent);transition:box-shadow .15s,transform .32s cubic-bezier(.34,1.56,.64,1)}
.hc-col.pin .hc-c i,.hc-col.hov .hc-c i{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 14%,transparent)}
.hc-c.on i{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 40%,transparent)}
.hc-c.fut i{background:transparent!important;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 4%,transparent)}
.hc-c.td i{box-shadow:inset 0 0 0 1.5px var(--me)}
.hc-tip{pointer-events:none;position:absolute;z-index:10;white-space:nowrap;border-radius:6px;border:1px solid var(--line2);padding:2px 6px;font-size:11px;font-variant-numeric:tabular-nums;color:rgba(238,234,226,.75);background:var(--surface);box-shadow:0 8px 24px -6px rgba(0,0,0,.35);animation:hc-tip .12s ease-out}
.hc-tip b{font-weight:600;color:rgba(238,234,226,.9)}
@keyframes hc-tip{from{opacity:0;transform:translateY(3px)}}
.hc-ft{margin-top:12px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.hc-ft .lg{display:flex;align-items:center;gap:4px;font-size:10px;color:var(--muted)}
.hc-ft .lg i{width:11px;height:11px;border-radius:3px}
.hc-ft .tot{font-size:11px;font-variant-numeric:tabular-nums;color:var(--muted);text-align:right}
.hc-st{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}
.hc-st .chip b{color:var(--h)}
.hc-note{font-size:12px;color:var(--faint);margin-top:10px;text-align:center}
@media (prefers-reduced-motion:reduce){.hc-col{opacity:1}}

/* ============ 21st · Siri Orb (educalvolpz) — чистый CSS, перенесён как есть ============
   Размер 140px → blur 4px, contrast 1.5, точки 1.12px, тень 2px, маска 25% (формулы оригинала). */
@property --orb-angle{syntax:"<angle>";inherits:false;initial-value:0deg}
.siri-orb{--bg:#1B1E23;--c1:#D6A0AD;--c2:#93B3D1;--c3:#ACA2D8;--blur-amount:4px;--contrast-amount:1.5;--dot-size:1.12px;--shadow-spread:2px;--mask-radius:25%;--animation-duration:20s;
  display:grid;grid-template-areas:"stack";overflow:hidden;border-radius:50%;position:relative}
.siri-orb::before,.siri-orb::after{content:"";display:block;grid-area:stack;width:100%;height:100%;border-radius:50%}
.siri-orb::before{
  background:
    conic-gradient(from calc(var(--orb-angle) * 2) at 25% 70%,var(--c3),transparent 20% 80%,var(--c3)),
    conic-gradient(from calc(var(--orb-angle) * 2) at 45% 75%,var(--c2),transparent 30% 60%,var(--c2)),
    conic-gradient(from calc(var(--orb-angle) * -3) at 80% 20%,var(--c1),transparent 40% 60%,var(--c1)),
    conic-gradient(from calc(var(--orb-angle) * 2) at 15% 5%,var(--c2),transparent 10% 90%,var(--c2)),
    conic-gradient(from calc(var(--orb-angle) * 1) at 20% 80%,var(--c1),transparent 10% 90%,var(--c1)),
    conic-gradient(from calc(var(--orb-angle) * -2) at 85% 10%,var(--c3),transparent 20% 80%,var(--c3));
  box-shadow:inset var(--bg) 0 0 var(--shadow-spread) calc(var(--shadow-spread) * .2);
  filter:blur(var(--blur-amount)) contrast(var(--contrast-amount));
  animation:orb-rotate var(--animation-duration) linear infinite}
.siri-orb::after{background-image:radial-gradient(circle at center,var(--bg) var(--dot-size),transparent var(--dot-size));background-size:calc(var(--dot-size) * 2) calc(var(--dot-size) * 2);
  backdrop-filter:blur(calc(var(--blur-amount) * 2)) contrast(calc(var(--contrast-amount) * 2));-webkit-backdrop-filter:blur(calc(var(--blur-amount) * 2)) contrast(calc(var(--contrast-amount) * 2));
  mix-blend-mode:overlay;-webkit-mask-image:radial-gradient(black var(--mask-radius),transparent 75%);mask-image:radial-gradient(black var(--mask-radius),transparent 75%)}
@keyframes orb-rotate{to{--orb-angle:360deg}}
@media (prefers-reduced-motion:reduce){.siri-orb::before{animation:none}}

/* сфера в центре вместо «Мен»: хороший день — ярче и живее (--glow ставит главный экран) */
.core{overflow:visible}
.core .orb{--bg:#13151B;--c1:#C46A86;--c2:#4F86C6;--c3:#8C6FE0;position:absolute;inset:0;z-index:0;opacity:calc(.82 + .18 * var(--glow,0));transition:opacity .8s ease;
  --animation-duration:calc(24s - 10s * var(--glow,0))}
.core .orb::before{filter:blur(var(--blur-amount)) contrast(var(--contrast-amount)) saturate(calc(.85 + .5 * var(--glow,0)))}
.core .veil{position:absolute;inset:0;z-index:0;border-radius:50%;pointer-events:none;background:radial-gradient(circle at 50% 50%,rgba(16,18,24,.5) 0%,rgba(16,18,24,.26) 42%,rgba(16,18,24,0) 66%)}
.core svg.ring{z-index:1}
.core .w,.core .s{position:relative;z-index:1}
.core .w{text-shadow:0 0 18px rgba(228,210,174,.35),0 1px 3px rgba(0,0,0,.6)}
.core .s{color:#D9D5CC;text-shadow:0 1px 2px rgba(0,0,0,.5)}

/* ============ чат с Claude ============ */
.chatfab{right:auto;left:max(20px,calc(50% - 240px));background:#1B1E23;box-shadow:0 0 0 1px rgba(172,162,216,.35),0 8px 28px rgba(147,179,209,.25);padding:0;overflow:hidden}
.chatfab .siri-orb{width:40px;height:40px;--blur-amount:1px;--contrast-amount:1.3;--dot-size:.32px;--shadow-spread:.5px;--mask-radius:5%;--animation-duration:14s}
.chatfab .siri-orb::after{-webkit-mask-image:none;mask-image:none}
.chat{display:flex;flex-direction:column;min-height:min(70vh,560px)}
.chat-log{flex:1;display:flex;flex-direction:column;gap:12px;padding:4px 0 12px;overflow-y:auto;max-height:58vh;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.chat-hi{display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px;padding:18px 8px 6px}
.chat-hi .siri-orb{width:72px;height:72px;--blur-amount:4px;--contrast-amount:1.5;--dot-size:.58px;--shadow-spread:2px;--mask-radius:15%}
.chat-hi p{margin:0;font-size:14px;color:var(--muted);max-width:30ch}
.chat-sug{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:4px}
.chat-sug button{font-size:13px;padding:7px 12px;border-radius:999px;box-shadow:inset 0 0 0 1px var(--line2);color:var(--text);background:rgba(255,255,255,.03);transition:background-color .15s}
.chat-sug button:active{background:rgba(255,255,255,.08)}
.msg{display:flex;gap:8px;align-items:flex-end;max-width:100%;animation:msg-in .22s cubic-bezier(.16,1,.3,1)}
@keyframes msg-in{from{opacity:0;transform:translateY(6px)}}
.msg.me{justify-content:flex-end}
.msg .bub{max-width:84%;padding:9px 13px;border-radius:18px;font-size:15px;line-height:1.45;overflow-wrap:anywhere}
.msg.me .bub{background:var(--me);color:#1B1812;border-bottom-right-radius:6px}
.msg.bot .bub{background:var(--raise);color:var(--text);border-bottom-left-radius:6px}
.msg.bot .bub p{margin:0 0 6px}.msg.bot .bub p:last-child{margin:0}
.msg.bot .bub ul{margin:4px 0 6px;padding-left:18px}.msg.bot .bub li{margin:2px 0}
.msg.bot .bub b{color:#fff;font-weight:600}
.msg.err .bub{background:color-mix(in srgb,var(--bad) 18%,var(--raise));color:var(--text)}
.msg .av{flex:none;width:24px;height:24px;margin-bottom:2px}
.msg .av.siri-orb{--blur-amount:1px;--contrast-amount:1.2;--dot-size:.1px;--shadow-spread:.5px;--mask-radius:0%;--animation-duration:16s}
.msg .av.siri-orb::after{-webkit-mask-image:none;mask-image:none}
.msg.think .av.siri-orb{--animation-duration:3s}
.msg.think .bub{color:var(--muted)}
.dots3 i{display:inline-block;width:5px;height:5px;margin:0 2px;border-radius:50%;background:currentColor;animation:d3 1.2s infinite ease-in-out}
.dots3 i:nth-child(2){animation-delay:.15s}.dots3 i:nth-child(3){animation-delay:.3s}
@keyframes d3{0%,80%,100%{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}
.chat-form{position:sticky;bottom:0;display:flex;gap:8px;align-items:flex-end;padding-top:10px;background:var(--surface)}
.chat-form textarea{flex:1;min-width:0;resize:none;max-height:120px;min-height:46px;border-radius:16px;background:var(--raise);border:1px solid transparent;padding:12px 14px;font-size:16px;line-height:1.35;outline:none}
.chat-form textarea:focus{border-color:var(--line2)}
.chat-form .send{flex:none;width:46px;height:46px;border-radius:50%;background:var(--me);color:#1B1812;display:flex;align-items:center;justify-content:center;transition:opacity .15s,transform .15s}
.chat-form .send:disabled{opacity:.35}
.chat-form .send:active{transform:scale(.94)}
.chat-form .send svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.chat-form .send.stop{background:var(--raise);color:var(--text)}
.chat-note{font-size:11.5px;color:var(--faint);text-align:center;margin-top:8px}
.sh .x.clr{width:auto;padding:0 12px;font-size:13px;margin-right:6px}
.sh .btns{display:flex}

/* ============ 21st · Emoji Rating (shadcnspace) — перенесён без React, эмодзи Fluent 3D (Microsoft, MIT) ============ */
.mood{display:flex;justify-content:space-between;gap:4px;padding:4px 0 2px}
.mood button{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;border-radius:12px;padding:4px 0;-webkit-tap-highlight-color:transparent}
.mood button:focus-visible{box-shadow:0 0 0 2px var(--me)}
.mood img{width:52px;height:52px;object-fit:contain;user-select:none;-webkit-user-drag:none;pointer-events:none;
  filter:grayscale(1);opacity:.4;transform:scale(.9);transition:filter .3s,opacity .3s ease-out,transform .3s ease-out}
.mood span{font-size:11.5px;color:color-mix(in srgb,var(--muted) 70%,transparent);transition:color .3s}
.mood button.on img{filter:drop-shadow(0 8px 14px rgba(0,0,0,.35));opacity:1;transform:none;animation:mood-float 2.6s ease-in-out infinite}
.mood button.on span{color:var(--text);font-weight:500}
@media (hover:hover){.mood button:hover img{filter:none;opacity:1;animation:mood-pop .45s cubic-bezier(.34,1.56,.64,1) forwards}.mood button:hover span{color:var(--text)}}
.mood button.pop img{filter:none;opacity:1;animation:mood-pop .45s cubic-bezier(.34,1.56,.64,1) forwards}
@keyframes mood-float{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-5px) scale(1.04)}}
@keyframes mood-pop{0%{transform:scale(.9) rotate(-3deg)}40%{transform:scale(1.2) rotate(2deg)}70%{transform:scale(1.05) rotate(-1deg)}100%{transform:scale(1.1) rotate(0)}}
.mood.enter button{animation:mood-in .5s cubic-bezier(.22,1,.36,1) both}
@keyframes mood-in{from{opacity:0;transform:translateY(12px) scale(.8)}}

/* ============ Спорт — просто ============ */
.sp-nav{display:flex;align-items:center;gap:4px}
.sp-nav>button{width:22px;height:44px;flex:none;display:flex;align-items:center;justify-content:center;color:var(--muted);border-radius:10px}
.sp-nav>button svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.sp-days{flex:1;display:grid;grid-template-columns:repeat(7,1fr);gap:3px;min-width:0}
.sp-d{display:flex;flex-direction:column;align-items:center;gap:2px;padding:7px 0 6px;border-radius:12px;background:rgba(255,255,255,.03);min-width:0;transition:background-color .15s}
.sp-d b{font-size:11px;font-weight:500;color:var(--faint)}
.sp-d .n{font-size:15px;color:var(--text)}
.sp-d i{font-style:normal;height:14px;font-size:12px;line-height:14px;color:var(--sport);font-weight:700}
.sp-d em{font-style:normal;font-size:9.5px;letter-spacing:-.01em;color:var(--muted);max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:clip}
.sp-d.rest em{color:var(--faint)}
.sp-d.td .n{color:var(--sport);font-weight:600}
.sp-d.ok{background:color-mix(in srgb,var(--sport) 18%,transparent)}
.sp-d.sel{box-shadow:inset 0 0 0 1.5px var(--sport)}
.sp-title{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:-2px 0 12px}
.sp-title b{font-family:var(--display);font-weight:600;font-size:24px;line-height:1.15}
.sp-edit{display:flex;gap:8px;margin-bottom:6px}
.sp-edit input{flex:1;min-width:0;height:44px;border-radius:12px;background:var(--raise);border:1px solid var(--line2);padding:0 14px;font-size:16px;outline:none}
.sp-edit .btn-g{height:44px;flex:none}
.sp-tip{font-size:12px;color:var(--faint);margin:6px 0 10px}
.sp-check{width:100%;display:flex;align-items:center;gap:12px;height:54px;padding:0 16px;border-radius:14px;background:var(--raise);font-size:16px;font-weight:500;color:var(--text);transition:background-color .2s}
.sp-check .chk{width:26px;height:26px;border-radius:8px;--h:var(--sport)}
.sp-check .chk svg{width:15px;height:15px}
.sp-check.on{background:color-mix(in srgb,var(--sport) 24%,var(--raise))}
.sp-check:disabled{opacity:.5}
.sp-lbl{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin:16px 0 6px}
.sp-how .mood img{width:44px;height:44px}

/* ============ 21st · Habit Tracker Calendar (cnippet-dev) — без React ============ */
.hb-row{display:flex;align-items:center;gap:12px;min-height:52px}
.hb-row .chk{--h:var(--goals)}
.hb-name{flex:1;min-width:0;display:grid;grid-template-columns:1fr auto;column-gap:8px;align-items:center;text-align:left;padding:6px 0;color:inherit}
.hb-name .tt{grid-column:1;font-size:15px}
.hb-name .sub{grid-column:1;font-size:12.5px;color:var(--faint);margin-top:1px}
.hb-chev{grid-column:2;grid-row:1/span 2;width:18px;height:18px;stroke:var(--faint);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .25s cubic-bezier(.34,1.56,.64,1)}
.hb-row.open .hb-chev{transform:rotate(180deg)}
.hb-row.done .tt{color:var(--muted)}
.hb-cal{margin:2px 0 10px 34px;padding:12px;border-radius:14px;background:rgba(255,255,255,.035);animation:hb-open .28s cubic-bezier(.16,1,.3,1)}
@keyframes hb-open{from{opacity:0;transform:translateY(-4px)}}
.hb-mh{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.hb-mh b{font-weight:600;font-size:14px}
.hb-mh button{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:var(--muted)}
.hb-mh button:disabled{opacity:.3}
.hb-mh svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.hb-dow,.hb-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.hb-dow span{font-size:10.5px;color:var(--faint);text-align:center;letter-spacing:.03em}
.hb-dow{margin-bottom:4px}
.hb-c{position:relative;height:34px;border-radius:9px;font-size:13px;color:var(--text);display:flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums;transition:background-color .15s}
.hb-c.out{visibility:hidden}
.hb-c:disabled{color:var(--faint);opacity:.5}
.hb-c.td{box-shadow:inset 0 0 0 1.5px var(--goals)}
.hb-c.done{background:color-mix(in srgb,#34D399 16%,transparent);color:#6EE7B7}
.hb-c svg{position:absolute;right:3px;bottom:3px;width:10px;height:10px;stroke:#34D399;fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.hb-foot{display:flex;align-items:center;justify-content:space-between;margin-top:10px;padding:9px 12px;border-radius:10px;box-shadow:inset 0 0 0 1px var(--line2);font-size:13px}
.hb-foot span{color:var(--muted)}
.hb-foot b{font-weight:600;white-space:nowrap}
.hb-rm{font-size:13px;color:var(--faint);padding-bottom:0}
.hb-del{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;font-size:13px;color:var(--muted)}
.hb-del span{flex:1 1 100%}
.hb-add{margin-top:6px}

/* ============ 21st · Timeline (kuratlielia) — без React ============ */
.tl-list{list-style:none;margin:4px 0 0;padding:0}
.tl-row{position:relative;padding-left:40px;min-height:44px}
.tl-mark{position:absolute;left:0;top:7px;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--c) 18%,var(--surface));box-shadow:0 0 0 1px color-mix(in srgb,var(--c) 45%,transparent);z-index:1}
.tl-mark svg{width:14px;height:14px;stroke:var(--c);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.tl-seg{position:absolute;left:13.5px;top:37px;bottom:-5px;width:1.5px;border-radius:2px;background:linear-gradient(var(--c),color-mix(in srgb,var(--c) 25%,transparent));transform-origin:top}
.tl-trig{width:100%;display:flex;align-items:flex-start;gap:10px;padding:10px 0;text-align:left;color:inherit}
button.tl-trig{cursor:pointer}
button.tl-trig:focus-visible{outline:2px solid var(--me);outline-offset:2px;border-radius:8px}
.tl-text{flex:1;min-width:0}
.tl-title{display:block;font-size:14.5px;line-height:1.35}
.tl-meta{display:block;font-size:12.5px;color:var(--faint);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tl-time{flex:none;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;padding-top:2px}
.tl-chev{flex:none;width:16px;height:16px;margin-top:2px;stroke:var(--faint);fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;transition:transform .3s cubic-bezier(.34,1.56,.64,1)}
.tl-row.open .tl-chev{transform:rotate(180deg)}
.tl-row.dim .tl-title{color:var(--muted)}
/* раскрытие на месте: высота 0 → по содержимому (grid 0fr → 1fr), текст всплывает из лёгкого размытия */
.tl-detail{display:grid;grid-template-rows:0fr;transition:grid-template-rows .32s cubic-bezier(.16,1,.3,1)}
.tl-detail>div{overflow:hidden}
.tl-detail p{margin:0 0 10px;font-size:13.5px;line-height:1.5;color:var(--muted);opacity:0;transform:translateY(-4px);filter:blur(2px);transition:opacity .2s,transform .25s,filter .25s}
.tl-row.open .tl-detail{grid-template-rows:1fr}
.tl-row.open .tl-detail p{opacity:1;transform:none;filter:none;transition-delay:.06s}
/* появление: метка «выпрыгивает» пружиной, следом рисуется линия к следующей строке */
.tl-row.tl-wait .tl-mark{transform:scale(.4);opacity:0}
.tl-row.tl-wait .tl-seg{transform:scaleY(0)}
.tl-row.tl-on .tl-mark{transform:none;opacity:1;transition:transform .36s cubic-bezier(.34,1.56,.64,1) var(--d,0s),opacity .15s ease-out var(--d,0s)}
.tl-row.tl-on .tl-seg{transform:none;transition:transform .34s cubic-bezier(.22,1,.36,1) calc(var(--d,0s) + .1s)}
.tl-row.tl-seen .tl-mark,.tl-row.tl-seen .tl-seg{transition:none}
@media (prefers-reduced-motion:reduce){.tl-row.tl-wait .tl-mark,.tl-row.tl-wait .tl-seg{transform:none;opacity:1}}
