:root{--vd-deep:#5b3583;--vd-purple:#715b83;--vd-purple-dark:#5f4c6e;--vd-pink:#d4568e;--vd-pink-strong:#a83368;--vd-success:#2f7a4f;--vd-gradient:linear-gradient(90deg, var(--vd-deep), var(--vd-pink));--vd-gradient-brand-moment:linear-gradient(165deg, var(--vd-deep), #3d2260);--vd-ivory:#fbf6f0;--vd-white:#fff;--vd-hairline:#eae3db;--vd-ink:#1a1816;--vd-ink-muted:#6e6862;--vd-ink-faint:#736d67;--vd-tint:#f1e9f7;--vd-tint-text:#5a4468;--vd-dot-1:#efbbd3;--vd-dot-2:#e7a0c0;--vd-dot-3:#de85ad;--vd-dot-4:#d4568e;--vd-dot-5:#bc4278;--vd-dot-wall-bg:#f7e7ee;--vd-level-a1-bg:#fde6e6;--vd-level-a1-text:#a82525;--vd-level-a2-bg:#fdede1;--vd-level-a2-text:#9c4d14;--vd-level-b1-bg:#faefcf;--vd-level-b1-text:#7d6100;--vd-level-b2-bg:#ecf8e6;--vd-level-b2-text:#417f2a;--vd-level-c1-bg:#e1f0fa;--vd-level-c1-text:#1f6fa0;--vd-spine-a1:#e5a5a5;--vd-spine-a2:#e8b589;--vd-spine-b1:#ffde59;--vd-spine-b2:#9fcb84;--vd-spine-c1:#7fb6da;--vd-radius-card:12px;--vd-radius-thumb:10px;--vd-radius-pill:999px;--vd-font:"Poppins", "Segoe UI", sans-serif;--vd-mobile-width:390px;--vd-nav-height:78px}*{box-sizing:border-box}html{-webkit-tap-highlight-color:transparent;height:100%}body{min-height:100%;font-family:var(--vd-font);background:var(--vd-ivory);color:var(--vd-ink);overscroll-behavior-y:none;margin:0}a{color:var(--vd-purple);text-decoration:none}a:hover{color:var(--vd-purple-dark)}button{cursor:pointer;font-family:inherit}h1,h2,h3{font:inherit;margin:0}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tap-glow{z-index:10000;pointer-events:none;opacity:0;background:radial-gradient(circle,currentColor 0%,#0000 68%);border-radius:50%;width:72px;height:72px;margin:-36px 0 0 -36px;animation:.5s ease-out vdTapGlow;position:fixed}@keyframes vdTapGlow{0%{opacity:.38;transform:scale(.35)}to{opacity:0;transform:scale(1.3)}}@keyframes vdTapFade{0%{opacity:.3}to{opacity:0}}@media (prefers-reduced-motion:reduce){.tap-glow{animation-name:vdTapFade}}.skip-link,.skip-link:hover{z-index:100;background:var(--vd-deep);color:#fff;border-radius:999px;padding:10px 16px;font-size:14px;font-weight:500;position:fixed;top:8px;left:8px;transform:translateY(-160%)}.skip-link:focus{transform:none}[tabindex="-1"]:focus{outline:none}.unavailable-bubble{z-index:1000;background:var(--vd-deep);color:#fff;pointer-events:none;border-radius:10px;max-width:min(260px,100vw - 24px);padding:8px 12px;font-size:13px;font-weight:500;line-height:1.35;animation:4s forwards unavailable-bubble;position:fixed;box-shadow:0 4px 14px #28143c4d}.unavailable-bubble:after{content:"";left:calc(var(--arrow) - 5px);background:inherit;width:10px;height:10px;position:absolute;bottom:-5px;transform:rotate(45deg)}.unavailable-bubble.below:after{top:-5px;bottom:auto}@keyframes unavailable-bubble{0%{opacity:0}5%,90%{opacity:1}to{opacity:0}}#root{min-height:100%}.nav-btn,.nav-btn:hover,.nav-btn:focus,.nav-btn:active{color:#c7b6d9;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:4px;min-width:0;min-height:44px;text-decoration:none;display:inline-flex;position:relative}.nav-btn.is-active,.nav-btn.is-active:hover{color:#fff}.nav-btn:after{content:"";background:0 0;border-radius:999px;width:56px;height:3px}.nav-btn.is-active:after{background:#fff}.nav-icon{flex:none;justify-content:center;align-items:center;display:flex;position:relative}.nav-icon>span{background:currentColor;transition:opacity .15s;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.nav-btn .ic-fill{opacity:0;margin:auto;position:absolute;inset:0}.nav-btn.is-active .ic-line{opacity:0}.nav-btn.is-active .ic-fill{opacity:1}.nav-slider{pointer-events:none;width:calc(20% - 1.6px);height:3px;transform:translateX(calc(var(--i,0) * 100%));transition:transform .5s cubic-bezier(.34,1.56,.64,1),opacity .2s;position:absolute;bottom:6px;left:4px}.nav-slider:before{content:"";background:#fff;border-radius:999px;width:56px;height:100%;margin:0 auto;display:block}.nav-slider.off{opacity:0}@media (width<=899px){.nav-btn.is-active:after{background:0 0}}@media (width>=900px){.nav-slider{display:none}}@media (prefers-reduced-motion:reduce){.nav-slider{transition:opacity .2s}}.bottom-nav .nav-profile{display:none}.nav-avatar{object-fit:cover;background:var(--vd-tint);width:30px;height:30px;color:var(--vd-tint-text);border-radius:999px;flex:none;justify-content:center;align-items:center;font-size:13px;font-weight:500;display:flex}@keyframes dotRollIn{0%{transform:translate(160px)scale(1)}55%{transform:translate(-8px)scale(1.15)}75%{transform:translate(4px)scale(.95)}90%{transform:translate(-2px)scale(1.05)}to{transform:translate(0)scale(1)}}.streak-dot{outline:none;animation-name:dotRollIn;animation-duration:.6s;animation-timing-function:cubic-bezier(.34,1.56,.64,1);animation-fill-mode:both}@keyframes wallDropIn{0%{opacity:0;transform:translateY(-140px)scale(1)}10%{opacity:1}55%{opacity:1;transform:translateY(6px)scale(1.12)}75%{opacity:1;transform:translateY(-3px)scale(.95)}90%{opacity:1;transform:translateY(1px)scale(1.03)}to{opacity:1;transform:translateY(0)scale(1)}}.wall-dot{outline:none;animation-name:wallDropIn;animation-duration:.6s;animation-timing-function:cubic-bezier(.34,1.56,.64,1);animation-play-state:paused;animation-fill-mode:both}.vd-fire{filter:drop-shadow(0 0 6px #ff50143d)drop-shadow(0 6px 10px #ff5a142e);transform-origin:50% 100%;animation:3.2s ease-in-out infinite vdFireFloat}.vd-flame{transform-origin:50% 100%;animation:2.6s ease-in-out infinite alternate vdFlameFlicker,3.8s ease-in-out infinite vdFlameSway}.vd-flame-path{transform-origin:50% 100%;animation:3.1s ease-in-out infinite alternate vdFlameShape}.vd-fire-stop{animation:6.5s ease-in-out infinite alternate vdFireColor}@keyframes vdFireFloat{0%,to{transform:translateY(2px)scale(1)}50%{transform:translateY(-5px)scale(1.025,1.045)}}@keyframes vdFlameFlicker{0%{transform:scale(.97,.98)}35%{transform:scale(1.025,1.045)}70%{transform:scale(.985,1.035)}to{transform:scale(1.035,.985)}}@keyframes vdFlameSway{0%,to{rotate:-.8deg}50%{rotate:1deg}}@keyframes vdFlameShape{0%{d:path("M48.2,95.2c2.9,15.2,9.2,26.9,22.7,34.4c-4.9-28.1-2.2-54.9,11.9-80.8c5.2,11.6,11.6,21.6,24.1,26.7c-1.9-8.8-3.9-16.8-5.3-24.9c-2-11.6-1.8-23.2,0.7-34.7c0.3-1.2,1.6-2.9,2.5-2.9c1.1,0,2.8,1.2,3.2,2.4c7.9,22.3,23.7,39.1,38.5,56.6c12.1,14.3,22.6,29.6,27.6,48c6.5,24.3,3.8,47-11.3,67.7c-20.9,28.9-64.7,37.3-94.8,18.8c-36.6-22.5-46.1-67.8-23.8-105C45.3,99.7,46.5,98,48.2,95.2z")}to{d:path("M46.8,96.5c4.4,14.2,10.8,25.2,24.8,32.5c-3.4-27.8,0.7-54.5,13.8-80.1c5.9,11.4,12.8,20.7,24.9,25.1c-2.7-9.2-4.5-16.4-5.4-24.5c-1.4-11.7-0.2-23.5,3.3-34.1c0.4-1.2,1.7-2.8,2.7-2.7c1.1,0.1,2.7,1.4,3,2.6c6.4,22.8,21.4,40.6,35,59c11.2,15.1,20.6,31,24,49.8c4.4,24.8-0.2,46.9-16.8,65.5c-23.1,25.8-67.4,30.8-95.8,9.1c-34.6-26.4-38.4-72.5-13.7-107.1C44.3,100.2,45.7,98.4,46.8,96.5z")}}@keyframes vdFireColor{0%{stop-color:#ff2638}20%{stop-color:#ff3b2f}40%{stop-color:#ff5218}60%{stop-color:#ff7600}80%{stop-color:#ff9a00}to{stop-color:#ffb52b}}.vd-ai-bubble{transform-origin:30% 85%;animation:1.8s ease-in-out infinite vdAiBubble}.vd-ai-halo{animation:1.8s ease-in-out infinite vdAiHalo}.vd-ai-spark{animation:1.8s ease-in-out infinite vdAiSpark}.vd-ai-spark:nth-child(2){animation-delay:.6s}.vd-ai-spark:nth-child(3){animation-delay:1.2s}@keyframes vdAiBubble{0%,to{transform:translateY(0)rotate(-4deg)scale(1)}30%{transform:translateY(-5px)rotate(3deg)scale(1.06)}60%{transform:translateY(-2px)rotate(-1deg)scale(1.02)}}@keyframes vdAiHalo{0%,to{opacity:.25;transform:scale(.8)}50%{opacity:.7;transform:scale(1.1)}}@keyframes vdAiSpark{0%,to{opacity:0;transform:scale(0)}40%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(.6)}}.vd-sunrise .vd-sun{animation:1.6s cubic-bezier(.16,1,.3,1) both vdSunUp}.vd-sunrise .vd-ray{animation:.6s ease-out .9s both vdRayOn}.vd-sunrise-loop .vd-sun{animation:2.8s cubic-bezier(.16,1,.3,1) infinite vdSunLoop}.vd-sunrise-loop .vd-ray{animation:2.8s ease-out infinite vdRayLoop}@keyframes vdSunUp{0%{transform:translateY(7px)}}@keyframes vdRayOn{0%{opacity:0}}@keyframes vdSunLoop{0%{opacity:1;transform:translateY(8px)}55%,85%{opacity:1;transform:none}to{opacity:0;transform:none}}@keyframes vdRayLoop{0%,40%{opacity:0}58%,85%{opacity:1}to{opacity:0}}.nav-logo{display:none}.home-greeting{font-size:22px}.home-reminder{font-size:13.5px}@media (width>=900px){.home-greeting{font-size:38px}.home-reminder{font-size:16px}}.vd-logo{flex-direction:column;align-items:flex-end;font-family:Montserrat,Poppins,sans-serif;line-height:1;display:inline-flex}.vd-logo-word{letter-spacing:-.03em;font-size:30px;font-weight:800}.vd-logo-vine{background:linear-gradient(90deg,#5b3583,#d4568e);color:#0000;-webkit-background-clip:text;background-clip:text}.vd-logo-dots{color:#5b3583}.vd-logo-tag{letter-spacing:.02em;color:#715b83;margin-top:1px;font-size:8.5px;font-weight:500}.vd-photo-page .vd-logo-vine{color:#fff;background:0 0}.vd-photo-page .vd-logo-dots,.vd-photo-page .vd-logo-tag{color:#fff}.vd-photo-page .vd-bubble{filter:brightness(0)invert()}@media (prefers-reduced-motion:reduce){.vd-fire,.vd-flame,.vd-flame-path,.vd-fire-stop,.vd-ai-bubble,.vd-ai-halo,.vd-ai-spark,.vd-sunrise .vd-sun,.vd-sunrise .vd-ray,.vd-sunrise-loop .vd-sun,.vd-sunrise-loop .vd-ray{animation:none}}.carousel{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none;display:flex;overflow-x:auto}.carousel::-webkit-scrollbar{display:none}.carousel-slide{scroll-snap-align:start;flex:0 0 100%}.carousel-arrow{display:none}@media (hover:hover) and (pointer:fine){.carousel-arrow{border:1px solid var(--vd-hairline);width:32px;height:32px;color:var(--vd-purple);cursor:pointer;background:#fff;border-radius:999px;justify-content:center;align-items:center;margin:0 6px;padding:0 0 2px;font-size:20px;line-height:1;display:inline-flex}.carousel-arrow:hover:not(:disabled){background:var(--vd-tint)}.carousel-arrow:disabled{opacity:.35;cursor:default}}.note-actions{container-type:inline-size}@container (width<=339px){.note-action{flex-direction:column;gap:2px!important;font-size:11px!important}}.pager-dot{cursor:pointer;background:0 0;border:none;width:12px;height:24px;margin:-9px -3px;padding:9px 3px;transition:width .15s}.pager-dot:before{content:"";border-radius:var(--vd-radius-pill);background:#d6c9e0;height:100%;transition:background .15s;display:block}.pager-dot.active{width:22px}.pager-dot.active:before{background:var(--vd-purple)}#page-transition{z-index:9999;background:var(--vd-gradient-brand-moment);clip-path:circle(0px at var(--ox,90%) var(--oy,4%));pointer-events:none;transition:clip-path .6s cubic-bezier(.65,0,.25,1);position:fixed;inset:0}#page-transition.expand{clip-path:circle(150vmax at var(--ox,90%) var(--oy,4%))}@keyframes vdPageOut{to{opacity:0}}@keyframes vdPageIn{0%{opacity:0}}.page-out{pointer-events:none;animation:.15s ease-in forwards vdPageOut}.page-in{animation:.2s ease-out vdPageIn}.app-shell{min-height:100vh;display:flex}.app-main{flex:1;justify-content:center;min-width:0;display:flex}.app-page{width:100%;padding-bottom:calc(var(--vd-nav-height) + 20px + env(safe-area-inset-bottom));flex-direction:column;display:flex}@media (width>=900px){.app-page{max-width:720px}.app-main{padding:0 32px}}@media (width>=1280px){.app-page{max-width:960px}}.bottom-nav{left:10px;right:10px;bottom:calc(10px + env(safe-area-inset-bottom));z-index:10;background:#5b3583;border:1px solid #ffffff24;border-radius:26px;align-items:center;padding:6px 4px;display:flex;position:fixed;box-shadow:0 10px 30px -12px #28143c73}@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){@media (width<=899px){.bottom-nav{-webkit-backdrop-filter:blur(20px)saturate(1.8);backdrop-filter:blur(20px)saturate(1.8);background:#3f2160b8}.bottom-nav .nav-btn:not(.is-active){color:#ede6f4}}}@media (width>=900px){.bottom-nav{width:96px;height:100vh;box-shadow:none;background:#725d89;border:none;border-radius:0;flex-direction:column;justify-content:flex-start;align-items:center;gap:10px;padding:28px 16px;position:sticky;inset:0 auto auto}.bottom-nav .nav-btn:not(.is-active){color:#ede6f4}.nav-logo{color:#fff;flex-direction:column;align-items:center;gap:6px;margin-top:auto;display:flex}.nav-logo img{filter:brightness(0)invert();width:38px;height:38px}.nav-logo span{letter-spacing:-.03em;font-family:Montserrat,Poppins,sans-serif;font-size:17px;font-weight:800}.bottom-nav .nav-btn{border-radius:14px;flex:none;width:76px;padding:10px 0 8px}.bottom-nav .nav-btn.is-active{background:#ffffff29}.bottom-nav .nav-profile{display:inline-flex}.topbar-logo,.topbar-avatar{visibility:hidden}}@media (width>=1280px){.bottom-nav{align-items:stretch;gap:4px;width:220px;padding:28px 14px}.bottom-nav .nav-btn{flex-direction:row;justify-content:flex-start;gap:12px;width:auto;padding:10px 14px}.bottom-nav .nav-btn:after{display:none}.bottom-nav .nav-label{font-size:15px}.nav-logo{flex-direction:row;justify-content:center;gap:8px}.nav-logo img{width:42px;height:42px}.nav-logo span{font-size:26px}}.nav-label{white-space:nowrap;font-size:11px;font-weight:400;line-height:1.1}.nav-btn.is-active .nav-label{font-weight:500}.login-photo-layer{opacity:0;background-position:50%;background-size:cover;transition:opacity 1.6s;position:absolute;inset:0;transform:scale(1)}.login-photo-layer.active{opacity:1;animation:8s ease-out forwards loginKenBurns}@keyframes loginKenBurns{0%{transform:scale(1)}to{transform:scale(1.08)}}@keyframes vdKenBurns{0%{transform:scale(1)}to{transform:scale(1.12)translate(-2%,-1.5%)}}.ken-burns{animation:18s ease-in-out infinite alternate vdKenBurns}@keyframes vdNoteDotFloat{0%,to{translate:0}50%{translate:0 -5px}}@keyframes vdNoteRingTurn{to{rotate:360deg}}.note-dot{animation:vdNoteDotFloat var(--float,7s) ease-in-out var(--float-delay,0s) infinite}.note-dot.ring{transform-box:fill-box;transform-origin:50%;animation:vdNoteDotFloat var(--float,7s) ease-in-out var(--float-delay,0s) infinite, vdNoteRingTurn 40s linear infinite}@media (prefers-reduced-motion:reduce){.ken-burns,.note-dot{animation:none}}.login-row{flex-direction:column;gap:16px}@media (width>=900px){.login-row{flex-direction:row-reverse;gap:40px}}@keyframes vd-skeleton{0%{background-position:100% 0}to{background-position:-100% 0}}@keyframes floatChip{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-7px)rotate(-1.2deg)}}.vocab-chip{cursor:pointer;font-family:inherit;transition:background .15s,color .15s,border-color .15s;animation-name:floatChip;animation-timing-function:ease-in-out;animation-iteration-count:infinite}.vocab-chip.is-active{animation-play-state:paused}@keyframes countUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.stat-value{animation:.7s ease-out both countUp}.grow-bar{transition:width 1.1s cubic-bezier(.22,1,.36,1)}@media (prefers-reduced-motion:reduce){.grow-bar{transition:none}.streak-dot,.wall-dot,.vocab-chip,.login-photo-layer.active,.stat-value{animation:none}}.class-grid{flex-direction:column;gap:16px;padding:0 20px;display:flex}@media (width>=900px){.class-grid{grid-template-columns:repeat(2,1fr);gap:20px;padding:0;display:grid}}@media (width>=1280px){.class-grid{grid-template-columns:repeat(3,1fr)}}.promo-layout{grid-template-columns:minmax(0,1fr);gap:18px;display:grid}@media (width>=640px){.promo-layout{grid-template-columns:minmax(0,3fr) minmax(0,2fr);align-items:center;gap:24px}}.on-dark .pager-dot:before{background:#ffffff73}.on-dark .pager-dot.active:before{background:#fff}.filter-bar{border-bottom:1px solid var(--vd-hairline);align-items:stretch;gap:8px;display:flex}.filter-row{scrollbar-width:none;flex:1;gap:18px;min-width:0;padding-right:28px;display:flex;overflow-x:auto;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - 28px),#0000)}.filter-icon{width:36px;height:36px;color:var(--vd-ink-faint);cursor:pointer;background:0 0;border:none;border-radius:10px;justify-content:center;align-self:center;align-items:center;padding:0;display:flex;position:relative}.filter-icon:hover,.filter-icon.active{color:var(--vd-purple);background:var(--vd-tint)}.filter-icon-dot{background:var(--vd-purple);border:1.5px solid #fff;border-radius:999px;width:7px;height:7px;position:absolute;top:6px;right:6px}.filter-menu{z-index:20;border:1px solid var(--vd-hairline);transform-origin:100% 0;background:#fff;border-radius:12px;flex-direction:column;min-width:160px;padding:6px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 8px 24px #1a18161f}.filter-menu-item{text-align:left;cursor:pointer;color:var(--vd-ink);background:0 0;border:none;border-radius:8px;padding:10px 12px;font-family:inherit;font-size:14px;font-weight:500}.filter-menu-item:hover{background:#f6f3ef}.filter-menu-item.active{color:var(--vd-purple);background:var(--vd-tint)}.filter-row::-webkit-scrollbar{display:none}.filter-tab{cursor:pointer;white-space:nowrap;color:var(--vd-ink-faint);background:0 0;border:none;border-bottom:2px solid #0000;flex:none;padding:10px 0 8px;font-family:inherit;font-size:13.5px;font-weight:500;transition:color .15s,border-color .15s}.filter-tab:hover{color:var(--vd-ink)}.filter-tab.active{color:var(--vd-purple);border-bottom-color:var(--vd-purple)}@keyframes vdPopIn{0%{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}@keyframes vdPopOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.94)}}.pop-in{animation:.28s cubic-bezier(.2,.9,.3,1.2) both vdPopIn}.pop-out{animation:.18s ease-in both vdPopOut}@media (prefers-reduced-motion:reduce){.pop-in,.pop-out{animation-duration:10ms}}.view-toggle-thumb{transition:transform .25s}@media (prefers-reduced-motion:reduce){.view-toggle-thumb{transition:none}}.calendar-pager::-webkit-scrollbar{display:none}.class-card-grid{grid-template-columns:minmax(0,1fr);gap:16px;display:grid}@media (width>=760px){.class-card-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}}.lab-press{-webkit-tap-highlight-color:transparent;transition:transform .15s,box-shadow .2s}.lab-press:active{transform:scale(.98)}@media (hover:hover){.lab-press:hover{transform:translateY(-2px)}}@media (prefers-reduced-motion:reduce){.lab-press,.lab-press:hover,.lab-press:active{transition:none;transform:none}}.lab-hero-row .carousel{margin-bottom:-24px}.lab-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}@media (width>=1280px){.lab-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
