/* Small shared primitives. Blur stays on navigation, never on long reading areas. */
.hub-app,.app-shell{font-family:var(--kalore-font);color:var(--kalore-text)}
.hub-app{--bg2:var(--kalore-bg);--panel2:var(--kalore-raised);--panel3:var(--kalore-raised);--line:var(--kalore-border);--line2:var(--kalore-border);--red:var(--kalore-coral);--radius:var(--kalore-radius);--sans:var(--kalore-font)}
h1,h2,h3{font-family:var(--kalore-font);font-weight:800;text-wrap:balance}
.panel,.glow-card{background:linear-gradient(150deg,var(--glow-tint),transparent 48%),var(--kalore-surface);border:1px solid var(--kalore-border);border-radius:var(--kalore-radius);box-shadow:var(--glow-shadow)}
.btn,.button{min-height:44px;border-radius:13px;font-family:var(--kalore-font);font-weight:750;transition:transform var(--glow-fast) var(--glow-ease),background var(--glow-fast),border-color var(--glow-fast),box-shadow var(--glow-fast)}
.btn.primary,.button.primary{background:linear-gradient(120deg,#e0ff98,#d4f87a 65%,#c8f36f);border:1px solid #c8f36f;color:var(--glow-action-text);box-shadow:0 4px 0 #53692c29,0 8px 24px #d4f87a10}
.btn.soft,.button.secondary{background:var(--kalore-raised);color:var(--kalore-text);border-color:var(--kalore-border)}
.btn.danger{color:var(--kalore-coral)}
button,a,input,select,textarea,summary{outline-offset:4px}
:where(button,a,input,select,textarea,summary):focus-visible{outline:3px solid var(--kalore-violet)!important}
.field input,.field select,.field textarea,.search-field,.search-field input,.editor,.essay-editor{color:var(--kalore-text);border-color:var(--kalore-border);border-radius:12px}
.field input,.field select,.field textarea,.search-field,.editor,.essay-editor{background:var(--kalore-bg)}
.eyebrow,.section-code{font-family:var(--kalore-font);font-weight:800;font-size:11px;letter-spacing:1.3px;color:var(--kalore-muted)}
.glow-pill{display:inline-flex;gap:7px;align-items:center;width:max-content;max-width:100%;padding:7px 10px;border-radius:100px;border:1px solid var(--kalore-border);font-size:11px;font-weight:750;line-height:1.4;color:var(--kalore-text);background:var(--kalore-raised)}
.glow-icon{display:inline-block;flex-shrink:0;width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.glow-icon-box{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:14px;background:var(--glow-tint);color:var(--kalore-violet)}
.glow-icon-box.lime{color:var(--kalore-primary);background:color-mix(in srgb,var(--kalore-primary) 11%,transparent)}
.glow-icon-box.cyan{color:var(--kalore-link);background:color-mix(in srgb,var(--kalore-link) 11%,transparent)}
.glow-gradient-text{background:linear-gradient(105deg,var(--kalore-primary),var(--kalore-link));background-clip:text;-webkit-background-clip:text;color:transparent}
.glow-scroll-progress{position:fixed;inset:0 0 auto;height:2px;background:linear-gradient(90deg,var(--kalore-primary),var(--kalore-violet));transform:scaleX(var(--scroll-progress,0));transform-origin:left;z-index:100;pointer-events:none}
.feedback-chip{position:relative;display:flex;align-items:center;gap:12px;overflow:visible;margin-top:14px;padding:14px 16px;border:1px solid color-mix(in srgb,var(--kalore-primary) 35%,var(--kalore-border));border-radius:16px;background:color-mix(in srgb,var(--kalore-primary) 8%,var(--kalore-surface));color:var(--kalore-text)}
.feedback-chip[data-kind=retry]{border-color:color-mix(in srgb,var(--kalore-coral) 35%,var(--kalore-border));background:color-mix(in srgb,var(--kalore-coral) 7%,var(--kalore-surface))}
.feedback-symbol{display:grid;place-items:center;flex-shrink:0;width:34px;height:34px;font-size:19px;font-weight:800;border-radius:50%;color:var(--glow-action-text);background:var(--glow-action)}
.feedback-chip[data-kind=retry] .feedback-symbol{color:var(--kalore-bg);background:var(--kalore-coral)}
.feedback-copy strong{display:block;font-size:14px}.feedback-copy small{display:block;margin-top:3px;font-size:12px;line-height:1.65;color:var(--kalore-muted)}
.feedback-particle{position:absolute;width:5px;height:5px;left:34px;top:30px;border-radius:2px;pointer-events:none}
.glow-skeleton{min-height:12px;border-radius:8px;background:linear-gradient(100deg,var(--kalore-raised) 25%,var(--kalore-border) 45%,var(--kalore-raised) 65%);background-size:230% 100%;animation:glow-shimmer 1.5s linear infinite}
.glow-arrived{animation:glow-reveal 540ms var(--glow-ease) both}.glow-feedback-enter{animation:glow-bounce 360ms var(--glow-ease)}
@keyframes glow-reveal{from{transform:translateY(12px)}to{transform:translateY(0)}}
@keyframes glow-bounce{0%{transform:translateY(4px) scale(.985)}65%{transform:translateY(-2px) scale(1.006)}100%{transform:none}}
@keyframes glow-shimmer{to{background-position:-230% 0}}
@media(hover:hover) and (pointer:fine){.btn:hover,.button:hover{transform:translateY(-2px)}.glow-card:hover{transform:translateY(-4px);border-color:var(--kalore-violet)}.btn:active,.button:active{transform:translateY(0) scale(.98)}}
@supports(backdrop-filter:blur(1px)){.topbar,.mobile-dock{backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}}
@media(prefers-reduced-motion:reduce){.glow-scroll-progress{display:none}.glow-arrived,.glow-feedback-enter,.glow-skeleton{animation:none!important}}
.motion-off .glow-arrived,.motion-off .glow-skeleton{animation:none!important}

@media(prefers-reduced-motion:reduce){.glow-card:hover,.button:hover,.btn:hover,.pdf-resource:hover,.quick-grid button:hover,.stat-link:hover,.learning-shortcuts a:hover{transform:none!important}}
.motion-off .button:hover,.motion-off .stat-link:hover,.motion-off .learning-shortcuts a:hover{transform:none!important}

[data-theme=light] .hub-app .btn.primary,[data-theme=light] .app-shell .button.primary{background:linear-gradient(120deg,#e0ff98,#d4f87a 65%,#c8f36f);border-color:#c8f36f;color:var(--glow-action-text)}

.product-short{display:none}@media(max-width:760px){.product-full{display:none}.product-short{display:inline}.product-switch a{min-width:44px;justify-content:center}}

/* A touch of motion without a permanent rendering loop. */
.btn,.button,.icon-btn,.icon-button,.session-option,.session-duration{position:relative;isolation:isolate}
.glow-ripple{position:absolute;width:38px;height:38px;border-radius:50%;background:currentColor;pointer-events:none;z-index:-1;clip-path:inset(0);contain:strict}
.glow-celebration,.session-explanation{position:relative}.glow-celebration .feedback-particle{left:50%;top:50%}
.motion-off *,.motion-off *::before,.motion-off *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
@media(hover:hover) and (pointer:fine){.radar-orbit,.count-orbit i{animation:glow-orbit-open 4.5s var(--glow-ease) 1}.radar-star,.count-orbit>span{animation:glow-star-open 4.5s var(--glow-ease) 1}}
@keyframes glow-orbit-open{0%{opacity:.1}70%{opacity:.9}100%{opacity:1}}
@keyframes glow-star-open{0%{scale:.85;rotate:-14deg}45%{scale:1.08;rotate:12deg}100%{scale:1;rotate:0deg}}
@media(prefers-reduced-motion:reduce){.radar-orbit,.count-orbit i,.radar-star,.count-orbit>span{animation:none!important}}
