@import"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Spectral:ital,wght@0,400;0,600;1,400&display=swap";*,*:before,*:after{box-sizing:border-box}:root{color-scheme:light;--ink: #1b1a16;--ink-muted: #5c564e;--surface: #f9f3eb;--surface-strong: #f1e4d2;--accent: #d55a3a;--accent-strong: #b5442c;--accent-cool: #1d7a8a;--accent-soft: #f5c8a8;--accent-warm: #f0b24d;--accent-green: #3aa86a;--shadow: rgba(27, 26, 22, .12);--shadow-strong: rgba(27, 26, 22, .22);--border: rgba(27, 26, 22, .08);--glass: rgba(255, 255, 255, .72);--glass-strong: rgba(255, 255, 255, .9)}body{margin:0;font-family:Space Grotesk,Avenir Next,Trebuchet MS,sans-serif;color:var(--ink);min-height:100vh;background:radial-gradient(ellipse at top left,#fff8f0,#f8e8d8,#f0dcc8 60%,#e8d4c0);position:relative;overflow-x:hidden}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background-image:radial-gradient(circle at 25% 25%,rgba(213,90,58,.03) 0%,transparent 50%),radial-gradient(circle at 75% 75%,rgba(29,122,138,.03) 0%,transparent 50%),radial-gradient(rgba(0,0,0,.03) 1.5px,transparent 1.5px);background-size:800px 800px,600px 600px,24px 24px;opacity:.5;pointer-events:none;animation:subtleMove 60s ease-in-out infinite}@keyframes subtleMove{0%,to{background-position:0% 0%,100% 100%,0 0}50%{background-position:100% 100%,0% 0%,12px 12px}}body:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background:radial-gradient(circle at 15% 20%,rgba(213,90,58,.15),transparent 50%),radial-gradient(circle at 85% 15%,rgba(29,122,138,.12),transparent 55%),radial-gradient(circle at 70% 85%,rgba(58,168,106,.1),transparent 50%),radial-gradient(circle at 30% 70%,rgba(240,178,77,.08),transparent 45%);pointer-events:none;opacity:.8;animation:colorShift 45s ease-in-out infinite}@keyframes colorShift{0%,to{opacity:.8}50%{opacity:.6}}#root{position:relative;min-height:100vh}.app{display:flex;justify-content:center;padding:48px 20px 72px}.app--student{position:relative;overflow:hidden}.app-ambient{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;z-index:0;pointer-events:none}.orb{position:absolute;width:clamp(220px,35vw,460px);height:clamp(220px,35vw,460px);border-radius:50%;filter:blur(0);opacity:.55}.orb-1{top:-120px;left:-80px;background:radial-gradient(circle,rgba(213,90,58,.45),transparent 65%)}.orb-2{top:10%;right:-140px;background:radial-gradient(circle,rgba(29,122,138,.4),transparent 65%)}.orb-3{bottom:-160px;left:30%;background:radial-gradient(circle,rgba(58,168,106,.35),transparent 70%)}.app-shell{width:min(1040px,100%);display:grid;gap:28px;animation:fadeUp .6s ease both;position:relative;z-index:1}.student-shell{gap:clamp(24px,4vw,36px)}.teacher-shell{width:min(1600px,100%);gap:32px}.welcome{font-weight:600;letter-spacing:.02em;text-transform:uppercase;font-size:.75rem;color:var(--ink-muted);align-self:flex-start;padding:8px 14px;border-radius:999px;border:1.5px solid rgba(255,255,255,.8);background:linear-gradient(135deg,#fffffff2,#ffffffd9);box-shadow:0 4px 12px #1b1a1614,0 2px 6px #1b1a160a,inset 0 1px #fff;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:welcomePulse 2s ease-in-out infinite}@keyframes welcomePulse{0%,to{box-shadow:0 4px 12px #1b1a1614,0 2px 6px #1b1a160a,inset 0 1px #fff}50%{box-shadow:0 6px 16px #d55a3a1f,0 3px 8px #d55a3a0f,inset 0 1px #fff}}.student-header{display:flex;flex-wrap:wrap;gap:12px;align-items:center;align-self:flex-start}.streak-display{font-weight:600;letter-spacing:.02em;font-size:.85rem;color:var(--accent);padding:8px 14px;border-radius:999px;border:1.5px solid rgba(213,90,58,.3);background:linear-gradient(135deg,#fff0e6f2,#ffe6d7d9);box-shadow:0 4px 12px #d55a3a1f,0 2px 6px #d55a3a0f,inset 0 1px #fff;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:streakGlow 2s ease-in-out infinite}@keyframes streakGlow{0%,to{box-shadow:0 4px 12px #d55a3a1f,0 2px 6px #d55a3a0f,inset 0 1px #fff}50%{box-shadow:0 6px 20px #d55a3a33,0 3px 10px #d55a3a1a,inset 0 1px #fff}}.panel{background:var(--surface);border-radius:24px;padding:clamp(24px,5vw,40px);box-shadow:0 20px 50px #1b1a161f,0 8px 20px #1b1a1614,0 2px 8px #1b1a160a;border:1px solid var(--border);transition:all .3s cubic-bezier(.4,0,.2,1)}.panel-student{background:linear-gradient(135deg,#ffffffd9,#ffffffbf);border:1px solid rgba(255,255,255,.7);box-shadow:0 25px 65px #1b1a1626,0 10px 25px #1b1a161a,0 2px 8px #1b1a160d,inset 0 1px #ffffffe6;-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%)}.teacher-panel{background:linear-gradient(160deg,#ffffffeb,#f4eaded9);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.teacher-header{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap}.teacher-header h1{font-family:Spectral,Georgia,serif;margin:0 0 8px;font-size:clamp(2.1rem,3.5vw,3rem)}.teacher-controls{display:flex;gap:16px;align-items:flex-end}.teacher-tabs{display:flex;gap:10px;flex-wrap:wrap}.teacher-tab{border:1px solid var(--border);background:#fff;padding:10px 14px;border-radius:999px;font-weight:600;cursor:pointer;color:var(--ink);box-shadow:none}.teacher-tab.active{border-color:#d55a3a80;background:#d55a3a1f;color:#a13e2a}.control{display:flex;flex-direction:column;gap:8px;font-weight:600;color:var(--ink-muted);font-size:.85rem}.control select{padding:10px 12px;border-radius:12px;border:1px solid var(--border);background:#fff;font-family:inherit;font-weight:600;color:var(--ink)}.analytics-controls{margin-top:12px}.teacher-grid{display:grid;grid-template-columns:minmax(240px,.9fr) minmax(0,2.1fr);gap:24px}.teacher-analytics{background:linear-gradient(160deg,#ffffffeb,#f4eaded9);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:24px;border:1px solid var(--border);box-shadow:0 20px 50px #1b1a161f,0 8px 20px #1b1a1614,0 2px 8px #1b1a160a;padding:24px;display:flex;flex-direction:column;gap:24px}.analytics-header{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap}.analytics-title h2{margin:0;font-family:Spectral,Georgia,serif;font-size:1.8rem}.analytics-filters{display:flex;gap:16px;align-items:flex-end}.analytics-filters select{min-width:180px}.teacher-analytics .analytics-body{display:flex;flex-direction:column;gap:24px}.analytics-cards-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:20px}.teacher-analytics .card-progress-section{margin-top:8px;width:100%}.roster-list{display:grid;gap:12px;margin-top:18px}.roster-item{border:1px solid var(--border);border-radius:16px;padding:14px 16px;text-align:left;background:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:transform .2s ease,box-shadow .2s ease}.roster-item:hover{transform:translateY(-2px);box-shadow:0 12px 22px var(--shadow)}.roster-item.active{border-color:#d55a3a99;box-shadow:0 0 0 2px #d55a3a33}.roster-name{font-weight:600;color:var(--ink)}.roster-meta{font-size:.75rem;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-muted)}.analytics-body{display:grid;gap:24px;margin-top:20px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:14px;max-width:100%}.stat-card{background:#fff;border-radius:16px;padding:14px 16px;border:1px solid var(--border);display:grid;gap:6px}.stat-card p{margin:0;color:var(--ink-muted);font-size:.85rem}.stat-card strong{font-size:1.4rem}.stat-card.good{background:#2886501a;border-color:#2886504d}.trend-panel,.card-panel{background:#ffffffb3;border-radius:18px;padding:18px;border:1px solid var(--border);display:grid;gap:16px}.trend-header h3{margin:0;font-size:1.2rem}.heatmap-container{background:#fff;border-radius:16px;padding:20px;border:1px solid var(--border)}.heatmap-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.heatmap-header h3{margin:0;font-size:1.2rem}.heatmap-legend{display:flex;gap:16px;font-size:.85rem}.legend-item{display:flex;align-items:center;gap:6px}.legend-swatch{width:14px;height:14px;border-radius:3px}.legend-item.past .legend-swatch{background:#2d7a8c}.legend-item.future .legend-swatch{background:#f0b24d}.heatmap-grid{display:flex;flex-direction:column;gap:4px}.heatmap-day-labels{display:grid;grid-template-columns:repeat(7,28px);gap:4px;text-align:center;font-size:.75rem;color:var(--ink-muted);margin-bottom:6px}.heatmap-cells{display:grid;grid-template-columns:repeat(7,28px);gap:4px}.heatmap-cell{width:28px;height:28px;border-radius:50%;position:relative;cursor:default}.heatmap-cell.past.intensity-0{background:#e8f4f5}.heatmap-cell.past.intensity-1{background:#b8dde3}.heatmap-cell.past.intensity-2{background:#7ac0cc}.heatmap-cell.past.intensity-3{background:#4aa3b3}.heatmap-cell.past.intensity-4{background:#2d7a8c}.heatmap-cell.today{box-shadow:0 0 0 1px var(--ink)}.heatmap-cell.future.intensity-0{background:#fff4e6}.heatmap-cell.future.intensity-1{background:#ffe4c2}.heatmap-cell.future.intensity-2{background:#f8d08a}.heatmap-cell.future.intensity-3{background:#f0b24d}.heatmap-cell.future.intensity-4{background:#e09a30}.heatmap-struggling-row{display:flex;gap:20px;align-items:flex-start}.heatmap-struggling-row .heatmap-container{flex:1}.heatmap-struggling-row .struggling-section{flex:1;min-width:0;margin-top:0}.struggling-section{margin-top:20px}.struggling-list{display:grid;gap:12px}.struggling-card{background:#fff;border:1px solid var(--border);border-radius:12px;padding:14px;display:grid;gap:10px}.struggling-card-header{display:flex;align-items:center;gap:8px}.state-badge{padding:2px 8px;border-radius:4px;font-size:.75rem;font-weight:600;text-transform:uppercase}.state-badge.state-new{background:#e0e0e0;color:#555}.state-badge.state-learning{background:#f0b24d;color:#5a4000}.state-badge.state-relearning{background:#d55a3a;color:#fff}.state-badge.state-review{background:#2d7a8c;color:#fff}.mastered-badge{background:#3aa86a;color:#fff;padding:2px 8px;border-radius:4px;font-size:.75rem;font-weight:600}.warning-icon{font-size:1rem}.struggling-card-content{display:grid;gap:6px}.struggling-card-content .card-front{font-weight:600;margin:0}.struggling-card-content .card-back{color:var(--ink-muted);margin:0}.struggling-card-stats{display:flex;flex-wrap:wrap;gap:12px;font-size:.85rem;color:var(--ink-muted)}.struggling-card-stats .again-count{color:#d55a3a;font-weight:600}.card-header-badges{display:flex;gap:8px;margin-bottom:4px}.stat-card.warning{border-color:#f0b24d;background:#fff9f0}.stat-card.warning strong{color:#b8860b}.stat-card.danger{border-color:#d55a3a;background:#fff5f3}.stat-card.danger strong{color:#d55a3a}.problem-list{display:grid;gap:14px}.problem-card{border:1px solid var(--border);border-radius:16px;padding:16px;display:grid;gap:12px;background:#fff}.problem-card footer{display:flex;justify-content:space-between;font-weight:600;color:var(--accent-cool)}.card-stats-detail{display:flex;flex-direction:column;gap:8px;font-size:.85rem}.rating-counts{display:flex;flex-wrap:wrap;gap:6px}.rating-badge{padding:2px 8px;border-radius:4px;font-weight:600;background:var(--surface-strong)}.rating-badge.muted{color:var(--ink-muted)}.rating-badge.again{color:var(--accent)}.rating-badge.hard{color:var(--accent-warm)}.rating-badge.good{color:var(--accent-cool)}.rating-badge.easy{color:var(--accent-green)}.card-times{display:flex;flex-direction:column;color:var(--ink-muted)}.problem-text{margin:0;font-weight:600}.panel-header h1{font-family:Spectral,Georgia,serif;font-size:clamp(2rem,4vw,3rem);margin:0 0 12px}.panel-header .lede{color:var(--ink-muted);margin:0;font-size:1.05rem}.eyebrow{text-transform:uppercase;font-size:.7rem;letter-spacing:.18em;color:var(--ink-muted);font-weight:600;margin-bottom:12px}.pin-form{display:grid;gap:16px;margin-top:24px}.pin-form label{font-weight:600}.pin-form input{font-size:1.4rem;padding:14px 16px;border-radius:14px;border:2px solid var(--border);background:#fff;font-family:inherit;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px #1b1a160a}.pin-form input:hover{border-color:#d55a3a33;box-shadow:0 4px 12px #1b1a1614}.pin-form input:focus{outline:none;border-color:var(--accent);box-shadow:0 4px 16px #d55a3a26,0 0 0 4px #d55a3a1a;transform:translateY(-1px)}.pin-form button,.panel button,.deck-card{font-family:inherit}.pin-form button,.panel button{padding:14px 18px;border-radius:14px;border:none;background:linear-gradient(135deg,var(--accent) 0%,var(--accent-strong) 100%);color:#fff;font-weight:600;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 12px #d55a3a40,0 2px 4px #d55a3a26,inset 0 -2px #0000001a;position:relative;overflow:hidden}.pin-form button:before,.panel button:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s ease}.pin-form button:hover:before,.panel button:hover:before{left:100%}.pin-form button:disabled{cursor:not-allowed;opacity:.6;box-shadow:none}.panel button:hover:not(:disabled),.pin-form button:hover:not(:disabled){transform:translateY(-2px) scale(1.02);box-shadow:0 8px 20px #d55a3a59,0 4px 8px #d55a3a33,inset 0 -2px #0000001a}.panel button:active:not(:disabled),.pin-form button:active:not(:disabled){transform:translateY(0) scale(.98);box-shadow:0 2px 8px #d55a3a33,inset 0 2px 4px #00000026}.teacher-panel button{box-shadow:none}.teacher-panel button.ghost{background:transparent;color:var(--ink);border:1px solid var(--border)}.teacher-panel button.danger{background:#b54b34}.teacher-panel button.danger.ghost{color:#b54b34;border-color:#b54b3459;background:transparent}.teacher-panel .list-item{background:#fff;color:var(--ink);border:1px solid var(--border);box-shadow:none}.form-error{color:#a53b24;font-weight:600}.form-success{color:#1f6b3a;font-weight:600}.deck-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px;margin-top:24px}.deck-card{border:1.5px solid var(--border);border-radius:18px;background:linear-gradient(145deg,#fffffff2,#f7e8d8fa);padding:20px;display:flex;flex-direction:column;gap:16px;text-align:left;cursor:pointer;position:relative;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 12px #1b1a1614,0 2px 6px #1b1a160a}.deck-card:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(circle at top right,rgba(255,255,255,.8),transparent 50%);opacity:0;transition:opacity .3s ease;pointer-events:none}.deck-card:after{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .5s ease}.deck-card h2{margin:0 0 8px;font-size:1.35rem;transition:color .3s ease}.deck-card p{margin:0;color:var(--ink-muted);transition:color .3s ease}.deck-card:hover{transform:translateY(-6px) scale(1.02);box-shadow:0 20px 40px #1b1a161f,0 8px 16px #1b1a1614,0 0 0 1px #d55a3a1a;border-color:#d55a3a33}.deck-card:hover:before{opacity:1}.deck-card:hover:after{left:100%}.deck-card:hover h2{color:var(--accent)}.deck-card:active{transform:translateY(-2px) scale(1)}.deck-meta{display:flex;justify-content:space-between;font-weight:600;color:var(--accent-cool)}.deck-pill{padding:6px 10px;border-radius:999px;background:#fffc;border:1px solid rgba(27,26,22,.08);font-size:.8rem;letter-spacing:.02em}.session{display:grid;gap:20px}.session-shell{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;background:linear-gradient(135deg,#ffffffe0,#ffffffc7);border-radius:clamp(20px,5vw,28px);padding:clamp(16px,4vw,40px);border:1px solid rgba(255,255,255,.7);box-shadow:0 25px 65px #1b1a1626,0 10px 25px #1b1a161a,0 2px 8px #1b1a160d,inset 0 1px #fffffff2;-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%)}.session-header{display:grid;gap:16px;margin-bottom:8px}.session-header h1{font-family:Spectral,Georgia,serif;margin:0;font-size:clamp(1.5rem,5vw,2.8rem);line-height:1.2}.session-header .lede{font-size:clamp(.9rem,3vw,1.05rem);margin:4px 0 0}.session-header .eyebrow{margin-bottom:6px}.session-meta{display:flex;gap:8px;flex-wrap:wrap;align-items:center;font-weight:600;color:var(--accent-cool)}.session-meta span{background:#ffffffe6;padding:6px 12px;border-radius:999px;border:1px solid rgba(27,26,22,.08);font-size:.75rem;box-shadow:0 2px 6px #1b1a160a}.session-meta button{padding:8px 14px;font-size:.8rem;margin-left:auto}.session-progress{display:grid;gap:6px;margin-top:12px;font-weight:600;color:var(--ink-muted);font-size:.75rem}.progress-track{width:100%;height:8px;border-radius:999px;background:#1b1a160f;overflow:hidden;border:1px solid rgba(27,26,22,.06);box-shadow:inset 0 1px 3px #1b1a161a}.progress-fill{height:100%;border-radius:999px;background:var(--accent-cool);transition:width .4s cubic-bezier(.4,0,.2,1);box-shadow:0 0 8px #1d7a8a66}.session-meta .ghost{background:transparent;color:var(--ink);border:1px solid var(--border);box-shadow:none}.session-meta .ghost:hover:not(:disabled){transform:translateY(-2px)}.session-error{margin:0}.study-stage{display:grid;place-items:center;min-height:clamp(320px,50vh,450px);position:relative;overflow:visible;padding:20px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none}.swipe-zone{position:absolute;border-radius:16px;display:flex;align-items:center;justify-content:center;pointer-events:none;opacity:0;transition:opacity .2s ease,transform .2s ease,box-shadow .2s ease}.swipe-zone.visible{opacity:.6}.swipe-zone.active{opacity:1;transform:scale(1.05)}.swipe-zone.flash{animation:zoneFlash .5s ease-out}@keyframes zoneFlash{0%{opacity:1;transform:scale(1.1);box-shadow:0 0 30px currentColor}to{opacity:0;transform:scale(1);box-shadow:none}}.zone-content{display:flex;flex-direction:column;align-items:center;gap:8px}.zone-label{font-weight:700;font-size:1rem;text-transform:uppercase;letter-spacing:.1em;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.3)}.swipe-zone-left{left:0;top:50%;transform:translateY(-50%);width:140px;height:min(400px,50vh);background:linear-gradient(135deg,#d55a3a,#a13e2a);color:#d55a3a;border-radius:16px 0 0 16px}.swipe-zone-left.active{transform:translateY(-50%) scale(1.05);box-shadow:0 8px 24px #d55a3ab3}.swipe-zones-right{position:absolute;right:0;top:50%;transform:translateY(-50%);width:140px;height:min(400px,50vh);display:flex;flex-direction:column;gap:0;padding:0;pointer-events:none;opacity:0;transition:opacity .2s ease}.swipe-zones-right.visible{opacity:1}.swipe-zones-right .swipe-zone{flex:1 1 0;min-height:0;position:relative;width:100%;opacity:.7;border-radius:0;border:none;border-bottom:1px solid rgba(255,255,255,.2)}.swipe-zones-right .swipe-zone:last-child{border-bottom:none}.swipe-zones-right .swipe-zone.visible{opacity:.7}.swipe-zones-right .swipe-zone.active{opacity:1;transform:scale(1.05)}.zone-easy{background:linear-gradient(135deg,#4cbb77,#2d9957);color:#2d9957}.zone-easy.active{box-shadow:0 6px 30px #2d9957b3}.zone-good{background:linear-gradient(135deg,#47b3d1,#3593b0);color:#3593b0}.zone-good.active{box-shadow:0 6px 30px #3593b0b3}.zone-hard{background:linear-gradient(135deg,#f0b24d,#d9922c);color:#d9922c}.zone-hard.active{box-shadow:0 6px 30px #d9922cb3}.intent-indicator{position:absolute;top:20%;left:50%;transform:translate(-50%);pointer-events:none;z-index:100;animation:intentPulse .3s ease-out}.intent-indicator.fading{animation:intentFadeOut .5s ease-out forwards}@keyframes intentPulse{0%{opacity:0;transform:translate(-50%) scale(.8)}to{opacity:1;transform:translate(-50%) scale(1)}}@keyframes intentFadeOut{0%{opacity:1;transform:translate(-50%) scale(1)}to{opacity:0;transform:translate(-50%) scale(.9)}}.intent-label{display:block;font-size:clamp(2.5rem,8vw,4rem);font-weight:900;text-transform:uppercase;letter-spacing:.05em;padding:20px 40px;border-radius:20px;text-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 8px 32px #00000040}.intent-label-again{background:linear-gradient(135deg,#d55a3a,#a13e2a);color:#fff}.intent-label-easy{background:linear-gradient(135deg,#4cbb77,#2d9957);color:#fff}.intent-label-good{background:linear-gradient(135deg,#47b3d1,#3593b0);color:#fff}.intent-label-hard{background:linear-gradient(135deg,#f0b24d,#d9922c);color:#fff}.study-card{width:min(520px,90vw);height:min(400px,55vh);position:relative;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;transition:transform .2s ease;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;cursor:grab;-webkit-perspective:1000px;perspective:1000px;will-change:transform}.study-card.dragging{opacity:.6}@supports (-webkit-touch-callout: none){.study-card.dragging .study-card-inner.flipped .study-card-front{opacity:0!important}.study-card.dragging .study-card-inner.flipped .study-card-back{opacity:.6!important}}.study-card.card-is-new{box-shadow:0 0 0 4px var(--accent-cool)}.new-card-badge{position:absolute;top:-12px;left:50%;transform:translate(-50%);z-index:200;background:var(--accent-cool);color:#fff;padding:6px 16px;border-radius:999px;font-weight:700;font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;box-shadow:0 4px 12px #1d7a8a4d;pointer-events:none}.study-card:active{cursor:grabbing}.study-card.new-card-slide-in{animation:slideInFromBottom .4s cubic-bezier(.34,1.56,.64,1)}@keyframes slideInFromBottom{0%{transform:translateY(50vh) scale(.9);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.study-card-inner{width:100%;height:100%;position:relative;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;transition:transform .6s cubic-bezier(.4,0,.2,1)}.study-card-inner.flipped{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.study-card-face{position:absolute;top:0;right:0;bottom:0;left:0;padding:clamp(20px,5vw,28px);border-radius:clamp(20px,5vw,26px);background:linear-gradient(160deg,#fffffffa,#fdf6eff2);box-shadow:0 25px 50px #1b1a1626,0 10px 20px #1b1a161a,0 2px 8px #1b1a1614,inset 0 1px #fff;border:2px solid rgba(255,255,255,.9);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.study-card-face>*{position:relative;z-index:1}.study-card-face:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(circle at top right,rgba(255,255,255,.9),transparent 55%);opacity:.7;pointer-events:none;z-index:0}.study-card-back{-webkit-transform:rotateY(180deg);transform:rotateY(180deg);background:linear-gradient(135deg,#fff5e9fa,#f5e2d3f2)}.card-label{text-transform:uppercase;font-size:clamp(.65rem,2vw,.7rem);letter-spacing:.2em;color:var(--ink-muted);margin:0;font-weight:700;opacity:.7}.card-content{font-family:Spectral,Georgia,serif;font-size:clamp(1.5rem,5vw,2rem);text-align:center;line-height:1.4;display:flex;align-items:center;justify-content:center;flex:1;padding:10px 0}.card-hint{font-size:clamp(.75rem,2.5vw,.85rem);color:var(--ink-muted);margin:0;text-align:center;opacity:.8;font-style:italic}.study-card.intent-again{box-shadow:0 0 0 6px #d55a3acc}.study-card.intent-good{box-shadow:0 0 0 6px #3593b0cc}.study-card.intent-hard{box-shadow:0 0 0 6px #d9922ccc}.study-card.intent-easy{box-shadow:0 0 0 6px #2d9957cc}.gesture-legend{display:grid;grid-template-columns:1fr 1fr;gap:8px;font-size:clamp(.7rem,2vw,.85rem);margin-top:8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none}.tag{padding:10px 12px;border-radius:14px;text-align:center;font-weight:700;border:2px solid;transition:all .2s ease;box-shadow:0 2px 6px #1b1a1614;letter-spacing:.02em}.tag-again{background:linear-gradient(135deg,#d55a3a26,#d55a3a14);color:#a13e2a;border-color:#d55a3a4d}.tag-hard{background:linear-gradient(135deg,#f0b24d33,#f0b24d1f);color:#b97922;border-color:#f0b24d66}.tag-good{background:linear-gradient(135deg,#2d7a8c26,#2d7a8c14);color:#2d7a8c;border-color:#2d7a8c4d}.tag-easy{background:linear-gradient(135deg,#28865026,#28865014);color:#2b7d4d;border-color:#2886504d}.session-end{text-align:center;display:grid;gap:18px}.session-end button{justify-self:center}.session-actions{display:flex;justify-content:center;gap:12px;flex-wrap:wrap}.subtle{color:var(--ink-muted)}.teacher-form{display:grid;gap:12px}.teacher-form .field{display:grid;gap:6px;font-weight:600;font-size:.85rem;color:var(--ink-muted)}.teacher-form input,.teacher-form select,.teacher-form textarea{padding:10px 12px;border-radius:12px;border:2px solid var(--border);background:#fff;font-family:inherit;font-size:.95rem;color:var(--ink);transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 6px #1b1a160a}.teacher-form input:hover,.teacher-form select:hover,.teacher-form textarea:hover{border-color:#d55a3a33;box-shadow:0 3px 9px #1b1a160f}.teacher-form input:focus,.teacher-form select:focus,.teacher-form textarea:focus{outline:none;border-color:var(--accent-cool);box-shadow:0 4px 12px #1d7a8a1f,0 0 0 3px #1d7a8a14;transform:translateY(-1px)}.teacher-login{max-width:520px;margin:0 auto}.teacher-workspace{padding:24px;background:linear-gradient(160deg,#ffffffeb,#f4eaded9);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:24px;border:1px solid var(--border);box-shadow:0 20px 50px #1b1a161f,0 8px 20px #1b1a1614,0 2px 8px #1b1a160a}.workspace-grid{display:grid;grid-template-columns:minmax(280px,1.2fr) minmax(0,2fr);gap:24px}.workspace-grid.single{grid-template-columns:minmax(0,1fr)}.workspace-list,.workspace-editor{display:grid;gap:16px}.workspace-editor{max-width:900px;margin:0 auto}.editor-content-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(260px,1fr);gap:16px;align-items:start}.similar-cards-panel{border:1px solid var(--border);border-radius:14px;padding:14px;background:#fffc;display:grid;gap:10px}.similar-cards-panel h3{margin:0;font-size:1rem}.similar-cards-list{display:grid;gap:10px;max-height:480px;overflow:auto;padding-right:4px}.similar-card-item{display:grid;gap:8px;border:1px solid var(--border);border-radius:12px;padding:10px;background:#fff}.similar-card-item.exact{border-color:#2d7a8c73;box-shadow:0 0 0 2px #2d7a8c1f}.similar-card-meta{display:flex;gap:8px;align-items:center;color:var(--ink-muted);font-size:.8rem;flex-wrap:wrap}.similar-tag{background:#2d7a8c1f;color:var(--accent-cool);border-radius:999px;padding:2px 8px;font-size:.75rem;font-weight:600}.similar-card-front,.similar-card-back{margin:0;color:var(--ink);font-size:.88rem;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.similar-card-back{color:var(--ink-muted)}.list-header{display:flex;justify-content:space-between;gap:16px;align-items:flex-end}.dense-list{display:grid;gap:8px;max-height:600px;overflow-y:auto;overflow-x:hidden;padding-right:8px}.list-item{width:100%;text-align:left;border:1px solid var(--border);border-radius:12px;padding:12px 14px;background:#fff;display:grid;gap:6px;cursor:pointer;transition:all .2s ease;box-shadow:0 1px 3px #1b1a160a;overflow:hidden}.list-item:hover{border-color:#2d7a8c4d;box-shadow:0 2px 6px #1b1a1614;transform:translate(2px)}.list-item.active{border-color:#2d7a8c80;box-shadow:0 0 0 2px #2d7a8c2e;background:#2d7a8c08}.list-item-row{display:flex;gap:10px;align-items:center}.list-item-row .list-item{flex:1}.list-title{font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-subtitle{font-size:.82rem;color:var(--ink-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editor-header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.editor-actions{display:flex;gap:12px;flex-wrap:wrap}.notice{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:12px 14px;border-radius:12px;background:#d55a3a14;border:1px solid rgba(213,90,58,.3)}.notice p{margin:6px 0 0;font-size:.85rem;color:var(--ink-muted)}.notice-actions{display:flex;gap:10px;flex-wrap:wrap}.milestone-panel{display:grid;gap:10px}.milestone-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px}.checkbox{display:flex;gap:8px;align-items:center;font-weight:600;color:var(--ink)}.preview-panel{border-top:1px solid var(--border);padding-top:16px}.preview-panel h3{margin:12px 0 6px;font-size:1rem}.markdown{display:grid;gap:8px;font-family:Spectral,Georgia,serif}.markdown h1,.markdown h2,.markdown h3,.markdown p{margin:0}.markdown ul,.markdown ol{margin:0;padding-left:20px}.markdown code{font-family:Space Grotesk,Avenir Next,Trebuchet MS,sans-serif;background:#1b1a1614;padding:2px 6px;border-radius:6px}@keyframes fadeUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 720px){.app{padding:24px 16px 48px}.panel{padding:clamp(20px,4vw,32px)}.panel-student{max-width:100%;overflow-x:hidden}.panel-header{word-wrap:break-word}.pin-form{max-width:100%}.pin-form input,.pin-form button{width:100%;max-width:100%;box-sizing:border-box}.session-header{align-items:flex-start}.session-meta{text-align:left}.study-card{height:320px}.teacher-header{align-items:flex-start}.teacher-grid,.workspace-grid,.editor-content-grid{grid-template-columns:1fr}.trend-bars{grid-template-columns:repeat(15,minmax(6px,1fr))}}.data-table{width:100%;border-radius:16px;background:#fff;border:1px solid var(--border);overflow:hidden}.data-table-header{display:flex;position:sticky;top:0;z-index:10;background:var(--surface-strong);border-bottom:2px solid var(--border);font-weight:600;font-size:.85rem;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.05em}.data-table-header-cell{padding:12px 14px;display:flex;align-items:center;gap:6px;transition:background .2s ease;-webkit-user-select:none;user-select:none;box-sizing:border-box}.data-table-header-cell.sortable{cursor:pointer}.data-table-header-cell.sortable:hover{background:#1b1a160a}.sort-indicator{opacity:.3;font-size:.9em;transition:opacity .2s ease}.sort-indicator.sorted{opacity:1;color:var(--accent-cool)}.data-table-row{display:flex;border-bottom:1px solid var(--border);cursor:pointer;transition:all .2s ease;background:#fff}.data-table-row:hover{background:#2d7a8c08;transform:translate(2px);box-shadow:0 2px 6px #1b1a1614}.data-table-row.selected{background:#2d7a8c0f;border-left:3px solid var(--accent-cool)}.data-table-cell{padding:12px 14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;box-sizing:border-box}.table-actions{display:flex;gap:4px}.table-actions button{padding:4px 8px;font-size:1em}.data-table-loading,.data-table-empty{padding:40px;text-align:center;color:var(--ink-muted)}.success-rate{font-weight:600;padding:4px 8px;border-radius:6px;font-size:.9em}.success-rate-low{color:var(--accent);background:#d55a3a1a}.success-rate-medium{color:var(--accent-warm);background:#f0b24d26}.success-rate-high{color:var(--accent-green);background:#3aa86a1f}.status-badge{padding:4px 10px;border-radius:999px;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;white-space:nowrap}.status-badge-new{background:#2d7a8c1f;color:var(--accent-cool);border:1px solid rgba(45,122,140,.3)}.status-badge-learning{background:#f0b24d26;color:var(--accent-warm);border:1px solid rgba(240,178,77,.3)}.status-badge-relearning{background:#d55a3a1f;color:var(--accent);border:1px solid rgba(213,90,58,.3)}.status-badge-review{background:#3aa86a1f;color:var(--accent-green);border:1px solid rgba(58,168,106,.3)}.grade-count{font-size:.8rem;font-weight:600;padding:2px 6px;border-radius:4px}.grade-count-again{color:var(--accent)}.grade-count-hard{color:var(--accent-warm)}.grade-count-good{color:var(--accent-cool)}.grade-count-easy{color:var(--accent-green)}.collapsible-section{margin:20px 0;border:1px solid var(--border);border-radius:16px;background:#ffffffb3;overflow:hidden}.collapsible-header{padding:14px 18px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:background .2s ease;-webkit-user-select:none;user-select:none}.collapsible-header:hover{background:#1b1a1608}.collapsible-header h3{margin:0;font-weight:600;color:var(--ink);font-size:1.1rem}.collapsible-icon{transition:transform .3s ease;color:var(--ink-muted);font-size:.8em}.collapsible-icon.open{transform:rotate(90deg)}.collapsible-content{padding:0 18px 18px}.table-controls{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap;align-items:center}.table-controls select,.table-controls input{padding:10px 12px;border-radius:12px;border:2px solid var(--border);background:#fff;font-family:inherit;font-size:.95rem;transition:all .2s ease}.table-controls select:hover,.table-controls input:hover{border-color:#d55a3a33}.table-controls select:focus,.table-controls input:focus{outline:none;border-color:var(--accent-cool);box-shadow:0 0 0 3px #2d7a8c1a}.table-controls input[type=text]{flex:1;min-width:200px}.table-controls button{padding:10px 16px;border-radius:12px;border:2px solid var(--border);background:#fff;font-family:inherit;font-size:.95rem;cursor:pointer;transition:all .2s ease}.table-controls button:hover{border-color:#d55a3a33;background:var(--surface)}.table-controls button.active{background:var(--accent-cool);color:#fff;border-color:var(--accent-cool)}.card-progress-section{margin-top:32px}.card-progress-section h3{margin:0;font-size:1.2rem}.live-history-panel{max-width:900px}.live-indicator{display:inline-block;width:8px;height:8px;background:var(--accent-green);border-radius:50%;margin-left:6px;animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.9)}}.live-sessions-table .student-name{display:flex;align-items:center;gap:8px}.live-sessions-table .live-indicator{margin-left:0}.session-row:hover{background:var(--surface)}.empty-state{text-align:center;padding:48px 24px;color:var(--ink-muted)}.empty-state p{margin:8px 0}.empty-state .secondary{font-size:.9rem;opacity:.8}.session-divider{display:flex;align-items:center;gap:16px;margin:24px 0 16px;color:var(--ink-muted);font-size:.85rem;font-weight:500}.session-divider:before,.session-divider:after{content:"";flex:1;height:1px;background:var(--border)}.session-events{display:flex;flex-direction:column;gap:12px}.session-event-card{display:grid;grid-template-columns:auto 1fr auto;gap:16px;align-items:start;padding:16px;background:#fff;border-radius:12px;border:2px solid var(--border);transition:all .2s ease}.session-event-card.event-reviewed{cursor:pointer}.session-event-card.event-reviewed:hover{border-color:#d55a3a33;box-shadow:0 4px 12px var(--shadow)}.session-event-card.event-shown{border-color:var(--accent-cool);background:#1d7a8a0d}.event-grade{display:flex;align-items:center}.grade-badge{padding:6px 12px;border-radius:8px;font-size:.85rem;font-weight:600;text-transform:uppercase}.grade-badge.grade-again{background:#dc354526;color:#dc3545}.grade-badge.grade-hard{background:#ff980026;color:#e67e00}.grade-badge.grade-good{background:#1d7a8a26;color:var(--accent-cool)}.grade-badge.grade-easy{background:#3aa86a26;color:var(--accent-green)}.status-badge{padding:6px 12px;border-radius:8px;font-size:.85rem;font-weight:500}.status-badge.currently-viewing{background:#1d7a8a26;color:var(--accent-cool)}.event-content{min-width:0}.card-preview{margin:0;font-size:.95rem;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-expanded{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.transition-description{margin:0;font-size:.9rem;color:var(--ink-muted)}.next-schedule{margin:8px 0 0;font-size:.85rem;color:var(--accent-cool);font-weight:500}.event-meta{text-align:right;display:flex;flex-direction:column;gap:4px}.time-ago{font-size:.85rem;color:var(--ink-muted)}.transition-text{font-size:.8rem;color:var(--ink-muted)}.event-left{display:flex;flex-direction:column;gap:8px;align-items:flex-start}.card-state-badge{font-size:.75rem;color:var(--ink-muted);background:var(--surface);padding:4px 8px;border-radius:6px}.card-state-badge.state-new{background:#d55a3a26;color:var(--accent);font-weight:600}.session-event-card.event-reviewed{cursor:default}.loading-text{text-align:center;color:var(--ink-muted);padding:24px}
