/* a30 — 30 visual concepts of the MathPracticum APP. Palettes: «Бумага» and «Голубая». */
:root{--fh:'Montserrat',sans-serif;--fb:'Inter',sans-serif;--fm:'JetBrains Mono',monospace;--r:18px;--ease:cubic-bezier(.2,.8,.2,1);--spring:cubic-bezier(.34,1.56,.64,1);--sbw:248px}
[data-theme=paper]{--bg:#f3ede1;--bg2:#e9e0cd;--bg3:#ddd2bb;--card:#fbf8f1;--ink:#231d16;--ink2:#6a5f50;--line:#d9cdb6;--acc:#c4502a;--acc-ink:#fff;--acc2:#2f5d8a;--acc3:#6b8e4e;--hl:#f3d36b;--ok:#3f8a4f;--bad:#c0392b;
 --shadow:0 1px 0 rgba(120,90,40,.12),0 14px 34px -20px rgba(70,50,20,.45);--glass:rgba(251,248,241,.82)}
[data-theme=sky]{--bg:#eaf5ff;--bg2:#d3e9fb;--bg3:#bcdcf5;--card:rgba(255,255,255,.86);--ink:#0c2a46;--ink2:#4f6c88;--line:#c2dcf1;--acc:#1e86d8;--acc-ink:#fff;--acc2:#ff9f43;--acc3:#21b39a;--hl:#a8dcff;--ok:#1f9d62;--bad:#e0464e;
 --shadow:0 1px 0 rgba(255,255,255,.9) inset,0 18px 40px -24px rgba(20,90,160,.55);--glass:rgba(255,255,255,.72)}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{font-family:var(--fb);color:var(--ink);background:var(--bg);line-height:1.5;overflow-x:hidden;-webkit-font-smoothing:antialiased}
[data-theme=sky] body{background:linear-gradient(170deg,#c9e7ff 0,#eaf5ff 40%,#f6fbff 100%) fixed}
[data-theme=paper] body{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .35 0 0 0 0 .27 0 0 0 0 .15 0 0 0 .08 0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E")}
a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
h1,h2,h3,h4,.fh{font-family:var(--fh);line-height:1.08;letter-spacing:-.01em;font-weight:700}
.mono{font-family:var(--fm)}.dim{color:var(--ink2)}.acc{color:var(--acc)}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
[data-theme=sky] .card{backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 20px;border-radius:999px;background:var(--acc);color:var(--acc-ink);font-weight:600;transition:transform .3s var(--spring),box-shadow .3s;white-space:nowrap}
.btn:hover{transform:translateY(-2px);box-shadow:0 12px 24px -12px var(--acc)}.btn:active{transform:scale(.96)}
.btn.ghost{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--line)}.btn.ghost:hover{box-shadow:inset 0 0 0 1.5px var(--ink)}
.btn.sm{padding:8px 14px;font-size:14px}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:4px 10px;border-radius:999px;background:var(--bg2);color:var(--ink2);white-space:nowrap}
.chip.acc{background:color-mix(in srgb,var(--acc) 14%,transparent);color:var(--acc)}
.kick{font-family:var(--fm);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--acc)}
.bar{height:6px;border-radius:9px;background:var(--bg2);overflow:hidden}.bar>i{display:block;height:100%;border-radius:9px;background:var(--acc);transform-origin:0 50%;animation:barIn 1.2s var(--ease) both;animation-delay:var(--d,0s)}
@keyframes barIn{from{transform:scaleX(0)}}
.ring{--p:0;width:var(--s,64px);height:var(--s,64px)}.ring circle{fill:none;stroke-width:var(--sw,7)}.ring .bgc{stroke:var(--bg2)}.ring .fg{stroke:var(--acc);stroke-linecap:round;transform:rotate(-90deg);transform-origin:50% 50%;transition:stroke-dashoffset 1.4s var(--ease)}
/* ============ SHELL ============ */
.shell{min-height:100vh;display:flex}
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:14px;padding:14px clamp(16px,3vw,32px);position:sticky;top:0;z-index:30;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.topbar .ttl{font-family:var(--fh);font-weight:700;font-size:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.topbar .sp{flex:1}
.search{display:flex;align-items:center;gap:8px;padding:9px 14px;border-radius:12px;background:var(--card);border:1px solid var(--line);color:var(--ink2);font-size:14px;min-width:200px;transition:box-shadow .3s,border-color .3s}
.search:hover{border-color:var(--acc)}.search kbd{margin-left:auto;font-family:var(--fm);font-size:11px;padding:2px 6px;border-radius:6px;background:var(--bg2)}
.pill{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:999px;background:var(--card);border:1px solid var(--line);font-weight:700;font-size:14px;white-space:nowrap}
.pill svg{width:16px;height:16px}
.ava{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,var(--acc),var(--acc2));color:#fff;display:grid;place-items:center;font-weight:700;flex-shrink:0}
.view{flex:1;padding:clamp(16px,3vw,34px);padding-top:8px;position:relative}
.nav-i{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:12px;color:var(--ink2);font-weight:600;position:relative;transition:color .25s,background .25s;white-space:nowrap}
.nav-i svg{width:20px;height:20px;flex-shrink:0}
.nav-i:hover{color:var(--ink);background:color-mix(in srgb,var(--ink) 5%,transparent)}
.nav-i.on{color:var(--acc)}
.logo{display:flex;align-items:center;gap:10px;font-family:var(--fh);font-weight:800;font-size:18px;white-space:nowrap}
.logo b{width:34px;height:34px;border-radius:10px;background:var(--acc);color:var(--acc-ink);display:grid;place-items:center;font-size:18px;flex-shrink:0}
/* sidebar */
.sh-sidebar .side{width:var(--sbw);flex-shrink:0;position:sticky;top:0;height:100vh;padding:20px 14px;display:flex;flex-direction:column;gap:4px;border-right:1px solid var(--line);background:color-mix(in srgb,var(--bg) 60%,var(--card))}
.sh-sidebar .side .logo{padding:4px 8px 22px}
.side .ind{position:absolute;left:14px;right:14px;height:44px;border-radius:12px;background:color-mix(in srgb,var(--acc) 12%,transparent);transition:transform .55s var(--spring);z-index:-1}
.side nav{position:relative;display:flex;flex-direction:column;gap:4px;z-index:0}
.side .foot{margin-top:auto;padding:14px;border-radius:16px;background:var(--card);border:1px solid var(--line)}
/* rail */
.sh-rail .side{width:84px;flex-shrink:0;position:sticky;top:0;height:100vh;padding:18px 12px;display:flex;flex-direction:column;align-items:center;gap:8px;border-right:1px solid var(--line)}
.sh-rail .side .logo span{display:none}.sh-rail .side .logo{margin-bottom:18px}
.sh-rail .nav-i{flex-direction:column;gap:4px;padding:10px 6px;font-size:11px;width:64px;text-align:center}
.sh-rail .nav-i.on{background:color-mix(in srgb,var(--acc) 12%,transparent)}
/* float */
.sh-float .side{width:240px;flex-shrink:0;position:sticky;top:16px;height:calc(100vh - 32px);margin:16px 0 16px 16px;padding:20px 14px;display:flex;flex-direction:column;gap:4px;border-radius:26px;background:var(--glass);border:1px solid var(--line);box-shadow:var(--shadow);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.sh-float .side .logo{padding:4px 8px 22px}
.sh-float .nav-i.on{background:var(--ink);color:var(--bg)}
/* top tabs */
.sh-top .shell{flex-direction:column}
.sh-top .tabs{display:flex;gap:4px;position:relative;margin:0 auto}
.sh-top .tabs .nav-i{padding:9px 16px}
.sh-top .tabs .u{position:absolute;bottom:-3px;height:3px;border-radius:3px;background:var(--acc);transition:transform .5s var(--spring),width .5s var(--spring)}
/* dock */
.dock{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:40;display:flex;gap:6px;padding:8px;border-radius:26px;background:var(--glass);border:1px solid var(--line);box-shadow:0 20px 40px -18px rgba(0,0,0,.35);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.dock .nav-i{flex-direction:column;gap:3px;font-size:11px;padding:9px 14px;transition:transform .35s var(--spring),color .25s,background .25s}
.dock .nav-i:hover{transform:translateY(-6px) scale(1.08)}
.dock .nav-i.on{background:var(--acc);color:var(--acc-ink)}
.sh-dock .view{padding-bottom:120px}
/* bookmarks on the right */
.marks{position:fixed;right:0;top:120px;z-index:40;display:flex;flex-direction:column;gap:6px}
.marks .nav-i{writing-mode:vertical-rl;padding:16px 10px;border-radius:12px 0 0 12px;background:var(--bg2);font-size:13px;transition:padding .35s var(--spring),background .3s}
.marks .nav-i svg{transform:rotate(90deg)}
.marks .nav-i:hover{padding-right:18px}.marks .nav-i.on{background:var(--acc);color:var(--acc-ink);padding-right:22px}
.sh-marks .view{padding-right:70px}
/* command palette */
.cmdk{position:fixed;inset:0;z-index:90;background:rgba(10,10,20,.35);display:none;align-items:flex-start;justify-content:center;padding-top:12vh;backdrop-filter:blur(4px)}
.cmdk.open{display:flex;animation:fadeIn .2s}
.cmdk .box{width:min(620px,92vw);border-radius:20px;background:var(--card);border:1px solid var(--line);box-shadow:0 40px 80px -30px rgba(0,0,0,.5);overflow:hidden;animation:popIn .35s var(--spring)}
.cmdk input{width:100%;padding:18px 20px;font:inherit;font-size:18px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--ink);outline:none}
.cmdk .res{max-height:50vh;overflow:auto;padding:8px}
.cmdk .res a{display:flex;justify-content:space-between;gap:10px;padding:11px 12px;border-radius:10px}.cmdk .res a.sel,.cmdk .res a:hover{background:var(--bg2)}
@keyframes fadeIn{from{opacity:0}}@keyframes popIn{from{opacity:0;transform:translateY(-14px) scale(.97)}}
/* mobile tabbar */
.mtab{display:none}
@media(max-width:860px){
 .side,.marks,.sh-top .tabs,.dock{display:none!important}
 .mtab{display:flex;position:fixed;left:10px;right:10px;bottom:10px;z-index:40;justify-content:space-around;padding:6px;border-radius:22px;background:var(--glass);border:1px solid var(--line);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);box-shadow:0 14px 30px -14px rgba(0,0,0,.35)}
 .mtab .nav-i{flex-direction:column;gap:2px;font-size:10px;padding:7px 8px}.mtab .nav-i.on{background:color-mix(in srgb,var(--acc) 14%,transparent)}
 .view{padding-bottom:100px!important;padding-right:clamp(16px,3vw,34px)!important}
 .search{min-width:0}.search span,.search kbd{display:none}
 .topbar .hide-m{display:none}
}
/* ============ entrance (stagger) ============ */
.st{animation:var(--ani,stUp) .8s var(--ease) both;animation-delay:calc(var(--i,0) * var(--stg,45ms) + 60ms)}
@keyframes stUp{from{opacity:0;transform:translateY(26px)}}
@keyframes stScale{from{opacity:0;transform:scale(.85)}}
@keyframes stBlur{from{opacity:0;filter:blur(12px);transform:scale(1.04)}}
@keyframes stLeft{from{opacity:0;transform:translateX(-40px)}}
@keyframes stFlip{from{opacity:0;transform:perspective(800px) rotateX(-40deg) translateY(20px);transform-origin:50% 0}}
@keyframes stDrop{from{opacity:0;transform:translateY(-40px) rotate(-3deg)}}
@keyframes stPop{0%{opacity:0;transform:scale(.4)}70%{opacity:1;transform:scale(1.06)}to{opacity:1;transform:none}}
@keyframes stClip{from{clip-path:inset(0 0 100% 0);transform:translateY(20px)}to{clip-path:inset(0 0 0 0)}}
@keyframes stSkew{from{opacity:0;transform:skewY(6deg) translateY(30px)}}
@keyframes stTwist{from{opacity:0;transform:rotate(-8deg) scale(.9)}}
.hov-lift{transition:transform .4s var(--spring),box-shadow .4s}
.hov-lift:hover{transform:translateY(-5px);box-shadow:0 26px 46px -24px rgba(0,0,0,.4)}
/* ============ shared screen elements ============ */
.scr-h{display:flex;align-items:end;justify-content:space-between;gap:20px;flex-wrap:wrap;margin:6px 0 24px}
.scr-h h1{font-size:clamp(30px,4vw,52px)}
.seg{display:inline-flex;padding:4px;border-radius:14px;background:var(--bg2);gap:2px;position:relative;flex-wrap:wrap}
.seg button{padding:8px 14px;border-radius:10px;font-weight:600;font-size:14px;color:var(--ink2);position:relative;z-index:1;transition:color .3s}
.seg button.on{color:var(--ink);background:var(--card);box-shadow:0 2px 8px -3px rgba(0,0,0,.2)}
.grid{display:grid;gap:16px}
.pop{position:fixed;z-index:70;width:300px;padding:18px;pointer-events:none;opacity:0;transform:translateY(8px) scale(.97);transition:opacity .25s,transform .35s var(--spring)}
.pop.show{opacity:1;transform:none}
/* math */
.fr{display:inline-flex;flex-direction:column;vertical-align:middle;text-align:center;margin:0 .15em;font-size:.9em;line-height:1.15}
.fr>i{font-style:normal;padding:0 .2em}.fr>i:first-child{border-bottom:1.4px solid currentColor}
/* confetti */
#confetti{position:fixed;inset:0;pointer-events:none;z-index:95}
/* panel */
.apanel{position:fixed;right:16px;bottom:16px;z-index:100;font-family:Inter,system-ui,sans-serif;font-size:13px}
.apanel .fab{width:50px;height:50px;border-radius:50%;background:#111;color:#fff;font-weight:700;box-shadow:0 10px 30px -8px rgba(0,0,0,.5)}
.apanel .box{position:absolute;right:0;bottom:60px;width:300px;background:#fff;color:#111;border-radius:18px;padding:16px;box-shadow:0 30px 60px -20px rgba(0,0,0,.45);display:none;gap:12px}
.apanel.open .box{display:grid}
.apanel b{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#777;font-weight:600}
.apanel .sg{display:flex;gap:6px;flex-wrap:wrap}.apanel .sg button,.apanel .nv a{padding:7px 10px;border-radius:10px;background:#f1f1f1;color:#111}
.apanel .sg button.on{background:#111;color:#fff}
.apanel select{width:100%;padding:8px;border-radius:10px;border:1px solid #ddd;font:inherit;background:#fff;color:#111}
.apanel .nv{display:flex;justify-content:space-between;gap:6px}
.apanel .nm{font-weight:700;font-size:15px}.apanel .idea{color:#555;line-height:1.4}
.sh-dock .apanel,.mtabbed .apanel{bottom:92px}
@media(max-width:860px){.apanel{bottom:86px}}
body.nomotion *{animation:none!important;transition:none!important}
@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}
::view-transition-old(root),::view-transition-new(root){animation-duration:.45s}
