:root{--primary: #4f46e5;--primary-dark: #4338ca;--on-primary: #ffffff;--secondary: #818cf8;--accent: #16a34a;--accent-soft: #dcfce7;--bg: #eef2ff;--fg: #312e81;--muted: #6b7280;--surface: #ffffff;--border: #c7d2fe;--destructive: #dc2626;--warning: #d97706;--radius-lg: 28px;--radius-md: 20px;--radius-sm: 14px;--shadow-clay: 0 8px 24px rgba(79, 70, 229, .14), 0 2px 6px rgba(49, 46, 129, .08);--shadow-clay-lg: 0 16px 40px rgba(79, 70, 229, .18), 0 4px 10px rgba(49, 46, 129, .08);--font-display: "Baloo 2", system-ui, sans-serif;--font-body: "Nunito", system-ui, sans-serif;--ease-spring: cubic-bezier(.34, 1.56, .64, 1)}*{box-sizing:border-box;margin:0;padding:0}html,body{min-height:100dvh}body{font-family:var(--font-body);font-size:16px;line-height:1.55;color:var(--fg);background:var(--bg);overflow-x:hidden;-webkit-font-smoothing:antialiased}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit;touch-action:manipulation}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible{outline:3px solid var(--primary);outline-offset:2px;border-radius:6px}h1,h2,h3{font-family:var(--font-display);line-height:1.2}.app-shell{min-height:100dvh;display:flex;flex-direction:column;align-items:center;position:relative;isolation:isolate}.blob{position:fixed;border-radius:50%;filter:blur(60px);opacity:.5;z-index:-1;animation:blob-drift 14s ease-in-out infinite alternate}.blob-1{width:340px;height:340px;background:#c7d2fe;top:-80px;left:-100px}.blob-2{width:280px;height:280px;background:#fbcfe8;bottom:-60px;right:-80px;animation-delay:-5s}.blob-3{width:220px;height:220px;background:#bbf7d0;top:40%;right:-110px;animation-delay:-9s}@keyframes blob-drift{0%{transform:translate(0) scale(1)}to{transform:translate(24px,-20px) scale(1.08)}}.stage{width:100%;max-width:640px;padding:16px 20px 48px;display:flex;flex-direction:column;flex:1}.progress-header{display:flex;align-items:center;gap:10px;padding:14px 0 18px}.skill-seg{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--muted);transition:color .25s ease}.skill-seg.active{color:var(--primary)}.skill-seg.done{color:var(--accent)}.skill-seg .seg-icon{width:34px;height:34px;display:grid;place-items:center;border-radius:12px;background:var(--surface);box-shadow:var(--shadow-clay);transition:transform .3s var(--ease-spring),background .25s ease}.skill-seg.active .seg-icon{background:var(--primary);color:var(--on-primary);transform:scale(1.12)}.skill-seg.done .seg-icon{background:var(--accent);color:#fff}.seg-track{width:100%;height:7px;border-radius:99px;background:#c7d2feb3;overflow:hidden}.seg-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--secondary),var(--primary));transition:width .4s var(--ease-spring)}.skill-seg.done .seg-fill{background:var(--accent)}.seg-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.card{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-clay-lg);padding:28px 24px;animation:card-in .42s var(--ease-spring) both}@keyframes card-in{0%{opacity:0;transform:translateY(26px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.card.leaving{animation:card-out .24s ease-in both}@keyframes card-out{to{opacity:0;transform:translateY(-18px) scale(.98)}}.q-count{font-size:13px;font-weight:700;color:var(--secondary);text-transform:uppercase;letter-spacing:.08em;margin-bottom:10px}.q-text{font-family:var(--font-display);font-size:22px;font-weight:600;margin-bottom:20px}.passage{border-radius:var(--radius-md);padding:16px 18px;margin-bottom:20px;font-size:16px;white-space:pre-line}.passage.sign{background:#fef9c3;border:2px dashed #eab308;font-family:var(--font-display);text-align:center;font-weight:700;color:#713f12}.passage.message{background:#ecfdf5;border-radius:4px var(--radius-md) var(--radius-md) var(--radius-md);border:1.5px solid #a7f3d0;color:#064e3b}.passage.article{background:#f5f7ff;border-left:5px solid var(--secondary);color:#3730a3}.options{display:grid;gap:12px}.option-btn{display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:14px 18px;border-radius:var(--radius-md);background:var(--surface);border:2.5px solid var(--border);font-size:16px;font-weight:600;text-align:left;color:var(--fg);transition:transform .16s var(--ease-spring),border-color .16s ease,background .16s ease,box-shadow .16s ease}.option-btn:hover{border-color:var(--secondary);box-shadow:var(--shadow-clay);transform:translateY(-2px)}.option-btn:active{transform:scale(.96)}.option-btn.selected{border-color:var(--primary);background:#eef2ff;animation:lock-in .35s var(--ease-spring)}.option-btn.selected .option-dot{background:var(--primary);border-color:var(--primary)}.option-btn.selected .option-dot:after{opacity:1;transform:scale(1)}@keyframes lock-in{0%{transform:scale(1)}40%{transform:scale(1.04)}to{transform:scale(1)}}.option-dot{flex-shrink:0;width:24px;height:24px;border-radius:50%;border:2.5px solid var(--border);display:grid;place-items:center;transition:all .16s ease}.option-dot:after{content:"";width:10px;height:10px;border-radius:50%;background:#fff;opacity:0;transform:scale(0);transition:all .2s var(--ease-spring)}.chip-answer-line{min-height:60px;border-radius:var(--radius-md);border:2.5px dashed var(--border);background:#ffffffb3;padding:10px;display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:18px;transition:border-color .2s ease}.chip-answer-line.has-chips{border-style:solid;border-color:var(--secondary)}.chip-line-hint{color:var(--muted);font-size:14px;font-style:italic;padding-left:6px}.chip-pool{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}.chip{min-height:44px;padding:9px 18px;border-radius:99px;font-size:16px;font-weight:700;background:var(--surface);border:2px solid var(--border);color:var(--fg);box-shadow:0 3px 0 var(--border);transition:transform .14s var(--ease-spring),opacity .14s ease,box-shadow .14s ease;animation:chip-pop .26s var(--ease-spring) both}@keyframes chip-pop{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}.chip:hover{transform:translateY(-2px)}.chip:active{transform:scale(.92);box-shadow:0 1px 0 var(--border)}.chip.placed{background:var(--primary);color:var(--on-primary);border-color:var(--primary-dark);box-shadow:0 3px 0 var(--primary-dark)}.chip.ghost{opacity:.25;pointer-events:none;box-shadow:none}.gap-sentence{font-size:21px;font-family:var(--font-display);font-weight:600;margin-bottom:22px;text-align:center}.gap-slot{display:inline-block;min-width:90px;border-bottom:3px solid var(--secondary);color:var(--primary);text-align:center;padding:0 6px}.gap-slot.filled{animation:lock-in .35s var(--ease-spring)}.play-orb{width:116px;height:116px;border-radius:50%;margin:8px auto 6px;display:grid;place-items:center;color:#fff;background:linear-gradient(145deg,var(--secondary),var(--primary));box-shadow:var(--shadow-clay-lg);transition:transform .18s var(--ease-spring),opacity .18s ease;position:relative}.play-orb:hover:not(:disabled){transform:scale(1.06)}.play-orb:active:not(:disabled){transform:scale(.93)}.play-orb:disabled{opacity:.45;cursor:not-allowed}.play-orb.playing:before,.play-orb.playing:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:3px solid var(--secondary);animation:sonar 1.6s ease-out infinite}.play-orb.playing:after{animation-delay:.8s}@keyframes sonar{0%{transform:scale(1);opacity:.8}to{transform:scale(1.55);opacity:0}}.plays-left{text-align:center;font-size:13px;font-weight:700;color:var(--muted);margin-bottom:18px}.eq-bars{display:flex;gap:5px;align-items:flex-end;height:26px;justify-content:center;margin-bottom:4px}.eq-bars span{width:6px;border-radius:3px;background:var(--secondary);animation:eq .9s ease-in-out infinite alternate}.eq-bars span:nth-child(1){height:40%;animation-delay:0ms}.eq-bars span:nth-child(2){height:90%;animation-delay:.12s}.eq-bars span:nth-child(3){height:60%;animation-delay:.24s}.eq-bars span:nth-child(4){height:100%;animation-delay:.36s}.eq-bars span:nth-child(5){height:50%;animation-delay:.48s}@keyframes eq{0%{transform:scaleY(.4)}to{transform:scaleY(1)}}.writing-area{width:100%;min-height:180px;border-radius:var(--radius-md);border:2.5px solid var(--border);padding:16px;font-family:var(--font-body);font-size:16px;line-height:1.6;color:var(--fg);background:#fdfdff;resize:vertical;transition:border-color .2s ease,box-shadow .2s ease}.writing-area:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 4px #4f46e526}.word-meter{display:flex;align-items:center;gap:10px;margin-top:12px;font-size:14px;font-weight:700;color:var(--muted)}.word-meter .meter-track{flex:1;height:8px;border-radius:99px;background:#c7d2feb3;overflow:hidden}.word-meter .meter-fill{height:100%;border-radius:99px;background:var(--warning);transition:width .3s ease,background .3s ease}.word-meter.ok .meter-fill{background:var(--accent)}.word-meter.ok .meter-count{color:var(--accent)}.mic-orb{width:116px;height:116px;border-radius:50%;margin:10px auto;display:grid;place-items:center;color:#fff;background:linear-gradient(145deg,#f472b6,#db2777);box-shadow:var(--shadow-clay-lg);transition:transform .18s var(--ease-spring);position:relative}.mic-orb:hover{transform:scale(1.06)}.mic-orb:active{transform:scale(.93)}.mic-orb.recording{background:linear-gradient(145deg,#ef4444,#b91c1c);animation:rec-pulse 1.2s ease-in-out infinite}@keyframes rec-pulse{0%,to{box-shadow:0 0 #ef444473,var(--shadow-clay-lg)}50%{box-shadow:0 0 0 22px #ef444400,var(--shadow-clay-lg)}}.rec-timer{text-align:center;font-family:var(--font-display);font-size:28px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--fg);margin-bottom:4px}.rec-timer.warn{color:var(--destructive)}.rec-hint{text-align:center;color:var(--muted);font-size:14px;margin-bottom:14px}.audio-preview{width:100%;margin:14px 0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:52px;padding:14px 30px;border-radius:99px;font-family:var(--font-display);font-size:17px;font-weight:700;transition:transform .16s var(--ease-spring),box-shadow .16s ease,opacity .16s ease}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:linear-gradient(145deg,var(--secondary),var(--primary));color:var(--on-primary);box-shadow:0 6px 0 var(--primary-dark),var(--shadow-clay)}.btn-primary:hover:not(:disabled){transform:translateY(-2px)}.btn-primary:active:not(:disabled){transform:translateY(3px);box-shadow:0 2px 0 var(--primary-dark)}.btn-ghost{background:transparent;color:var(--primary);border:2px solid var(--border)}.btn-ghost:hover:not(:disabled){border-color:var(--primary)}.btn-row{display:flex;gap:12px;justify-content:center;margin-top:24px;flex-wrap:wrap}.section-intro{text-align:center;padding:30px 10px}.section-intro .intro-icon{width:96px;height:96px;margin:0 auto 20px;border-radius:32px;display:grid;place-items:center;color:#fff;background:linear-gradient(145deg,var(--secondary),var(--primary));box-shadow:var(--shadow-clay-lg);animation:intro-bounce .7s var(--ease-spring) both}@keyframes intro-bounce{0%{opacity:0;transform:scale(.3) rotate(-12deg)}60%{transform:scale(1.1) rotate(3deg)}to{opacity:1;transform:scale(1) rotate(0)}}.section-intro h2{font-size:30px;margin-bottom:6px}.section-intro .intro-part{font-size:13px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--secondary);margin-bottom:14px}.section-intro p{color:var(--muted);max-width:400px;margin:0 auto 8px}.welcome-hero{text-align:center;padding-top:26px}.welcome-hero h1{font-size:clamp(30px,7vw,42px);font-weight:800;margin:14px 0 10px}.welcome-hero h1 .hi-en{color:var(--primary)}.welcome-hero .subtitle{color:var(--muted);font-size:17px;max-width:420px;margin:0 auto 26px}.skill-pills{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-bottom:30px}.skill-pill{display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:99px;background:var(--surface);box-shadow:var(--shadow-clay);font-weight:700;font-size:14px;animation:chip-pop .4s var(--ease-spring) both}.skill-pill svg{color:var(--primary)}.skill-pill:nth-child(1){animation-delay:80ms}.skill-pill:nth-child(2){animation-delay:.16s}.skill-pill:nth-child(3){animation-delay:.24s}.skill-pill:nth-child(4){animation-delay:.32s}.field{text-align:left;margin-bottom:16px}.field label{display:block;font-weight:700;font-size:14px;margin-bottom:6px}.field input{width:100%;min-height:52px;padding:13px 16px;border-radius:var(--radius-sm);border:2.5px solid var(--border);font-family:var(--font-body);font-size:16px;color:var(--fg);background:#fdfdff;transition:border-color .2s ease,box-shadow .2s ease}.field input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 4px #4f46e526}.error-note{background:#fef2f2;border:1.5px solid #fecaca;color:var(--destructive);border-radius:var(--radius-sm);padding:10px 14px;font-size:14px;font-weight:600;margin-top:12px}.result-gauge{width:190px;height:190px;margin:6px auto 14px;position:relative}.result-gauge svg{transform:rotate(-90deg)}.gauge-track{stroke:#c7d2feb3}.gauge-fill{stroke:url(#gauge-grad);stroke-linecap:round;transition:stroke-dashoffset 1.2s cubic-bezier(.22,1,.36,1)}.gauge-center{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;text-align:center}.gauge-center .level-big{font-family:var(--font-display);font-size:52px;font-weight:800;color:var(--primary);line-height:1}.gauge-center .level-name{font-size:13px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.skill-results{display:grid;gap:12px;margin-top:22px}.skill-row{display:flex;align-items:center;gap:12px;animation:card-in .4s var(--ease-spring) both}.skill-row:nth-child(1){animation-delay:.5s}.skill-row:nth-child(2){animation-delay:.64s}.skill-row:nth-child(3){animation-delay:.78s}.skill-row:nth-child(4){animation-delay:.92s}.skill-row .row-icon{width:38px;height:38px;flex-shrink:0;border-radius:12px;display:grid;place-items:center;background:#eef2ff;color:var(--primary)}.skill-row .row-body{flex:1}.skill-row .row-name{font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px}.skill-row .row-track{height:10px;border-radius:99px;background:#c7d2fe99;overflow:hidden}.skill-row .row-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--secondary),var(--primary));transition:width .9s cubic-bezier(.22,1,.36,1)}.skill-row .row-level{font-family:var(--font-display);font-weight:800;font-size:19px;color:var(--primary);width:44px;text-align:right}.skill-row .row-level.pending{font-size:13px;color:var(--warning)}.review-note{margin-top:18px;background:#fffbeb;border:1.5px solid #fde68a;color:#92400e;border-radius:var(--radius-sm);padding:12px 16px;font-size:14px;font-weight:600}.confetti-piece{position:fixed;top:-14px;width:10px;height:14px;border-radius:3px;z-index:50;animation:confetti-fall linear both;pointer-events:none}@keyframes confetti-fall{to{transform:translateY(105vh) rotate(720deg);opacity:.6}}.center{text-align:center}.muted{color:var(--muted);font-size:14px}.mt-8{margin-top:8px}.mt-16{margin-top:16px}.spinner{width:44px;height:44px;margin:20px auto;border-radius:50%;border:4px solid var(--border);border-top-color:var(--primary);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:420px){.stage{padding:12px 14px 40px}.card{padding:22px 18px}.q-text{font-size:19px}.seg-label{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
