:root{--primary: #4f46e5;--primary-dark: #4338ca;--danger: #ef4444;--bg: #f3f4f6;--surface: #ffffff;--text: #111827;--muted: #6b7280;--border: #e5e7eb;--radius: 12px;--shadow: 0 1px 3px rgba(0, 0, 0, .1), 0 1px 2px rgba(0, 0, 0, .06)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--text);min-height:100dvh;-webkit-font-smoothing:antialiased}#root{min-height:100dvh}.screen{max-width:640px;margin:0 auto;padding:0 1rem 3rem}.header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 0 1rem;gap:1rem}.header h1{font-size:1.5rem;font-weight:700;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem}.btn-primary,.btn-secondary,.btn-ghost{display:inline-flex;align-items:center;justify-content:center;padding:.5rem 1.1rem;border-radius:8px;font-size:.875rem;font-weight:600;cursor:pointer;border:none;min-height:44px;white-space:nowrap;transition:background .12s;font-family:inherit;line-height:1}.btn-primary{background:var(--primary);color:#fff}.btn-primary:active{background:var(--primary-dark)}.btn-secondary{background:var(--border);color:var(--text)}.btn-secondary:active{background:#d1d5db}.btn-ghost{background:transparent;color:var(--muted)}.btn-ghost:active{background:var(--border)}.btn-danger{color:var(--danger)}.btn-danger:active{background:#fee2e2;color:var(--danger)}.btn-sm{min-height:36px;padding:.3rem .75rem;font-size:.8rem}button:disabled{opacity:.45;cursor:not-allowed}.input,.textarea{width:100%;padding:.75rem;border:1.5px solid var(--border);border-radius:8px;font-size:1rem;font-family:inherit;background:var(--surface);color:var(--text);outline:none;transition:border-color .12s;text-align:start}.input:focus,.textarea:focus{border-color:var(--primary)}.textarea{resize:vertical;min-height:96px}.row{display:flex;align-items:center}.gap{gap:.5rem}.muted{color:var(--muted);font-size:.9rem;text-align:center;padding:2.5rem 0}.back-btn{display:inline-flex;align-items:center;gap:.3rem;color:var(--primary);font-weight:600;font-size:.9rem;cursor:pointer;background:none;border:none;padding:1rem 0 0;font-family:inherit}.new-deck-form{display:flex;flex-direction:column;gap:.75rem;margin-bottom:.75rem}.deck-list{list-style:none;display:flex;flex-direction:column;gap:.75rem}.deck-item{display:flex;flex-direction:column;gap:.65rem}.deck-info{display:flex;flex-direction:column;gap:.4rem}.deck-actions{display:flex;flex-wrap:wrap;gap:.4rem}.deck-level-stats{display:flex;flex-direction:column;gap:.3rem}.deck-name{font-weight:600;font-size:1rem;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.deck-count{font-size:.8rem;color:var(--muted);font-weight:400}.level-stats{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.level-bar{display:flex;height:10px;border-radius:99px;overflow:hidden;background:var(--border)}.level-bar-seg{height:100%;transition:width .3s ease;min-width:0}.level-bar-1{background:#f87171}.level-bar-2{background:#fbbf24}.level-bar-3{background:#34d399}.level-legend{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.level-total{font-size:.78rem;color:var(--muted);margin-left:auto}.card-list{list-style:none;display:flex;flex-direction:column;gap:.75rem}.card-item{display:flex;flex-direction:column;gap:.375rem}.card-q{font-weight:600;font-size:.95rem;line-height:1.4;text-align:start}.card-a{color:var(--muted);font-size:.875rem;line-height:1.4;text-align:start}.card-actions{display:flex;align-items:center;gap:.5rem;padding-top:.25rem}.level-badge{display:inline-flex;align-items:center;padding:.15rem .55rem;border-radius:99px;font-size:.72rem;font-weight:700;letter-spacing:.02em}.level-1{background:#fee2e2;color:#b91c1c}.level-2{background:#fef3c7;color:#92400e}.level-3{background:#d1fae5;color:#065f46}.form-group{display:flex;flex-direction:column;gap:.45rem;margin-bottom:1rem}.form-group label{font-weight:600;font-size:.875rem}.practice-screen{display:flex;flex-direction:column;height:100dvh;max-width:640px;margin:0 auto;padding:0 1rem;overflow:hidden;touch-action:none;overscroll-behavior:none}.practice-header{display:flex;align-items:center;gap:.75rem;padding:1rem 0 .5rem;flex-shrink:0}.practice-deck-name{flex:1;font-weight:700;font-size:1rem;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.practice-progress{font-size:.875rem;font-weight:600;color:var(--muted);white-space:nowrap}.practice-area{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.25rem;min-height:0}.swipe-container{width:100%;touch-action:none;-webkit-user-select:none;user-select:none;cursor:pointer;will-change:transform}.card-perspective{perspective:1200px}.practice-card{position:relative;width:100%;height:280px;transform-style:preserve-3d;transition:transform .4s cubic-bezier(.4,0,.2,1)}.practice-card.flipped{transform:rotateY(180deg)}.practice-card-face{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.75rem 1.5rem;border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow:hidden}.practice-card-back-face{transform:rotateY(180deg);background:#f0f5ff}.practice-card-label{font-size:.7rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:.75rem}.practice-card-text{font-size:1.2rem;font-weight:600;text-align:start;line-height:1.5;overflow-y:auto;max-height:160px;width:100%}.practice-card-hint{margin-top:1rem;font-size:.78rem;color:var(--muted)}.swipe-overlay{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--radius);pointer-events:none}.swipe-overlay-correct{background:#16a34a1f;box-shadow:inset 0 0 0 2px #16a34a73}.swipe-overlay-wrong{background:#ef44441a;box-shadow:inset 0 0 0 2px #ef444466}.swipe-indicators{display:flex;justify-content:space-between;width:100%;padding:0 .25rem}.swipe-indicator{font-size:.875rem;font-weight:700;display:flex;align-items:center;gap:.25rem;transition:opacity .1s}.swipe-indicator-wrong{color:var(--danger)}.swipe-indicator-correct{color:#16a34a}.card-history{display:flex;gap:1rem;margin-top:.85rem}.card-history-correct{font-size:.8rem;font-weight:700;color:#16a34a}.card-history-wrong{font-size:.8rem;font-weight:700;color:var(--danger)}.verdict-actions{display:flex;gap:.75rem;padding:.5rem 0 .25rem;flex-shrink:0}.verdict-btn{flex:1;height:52px;border:none;border-radius:12px;font-size:1rem;font-weight:700;font-family:inherit;cursor:pointer;transition:filter .1s}.verdict-btn:disabled{opacity:.45;cursor:not-allowed}.verdict-wrong{background:#fee2e2;color:#b91c1c}.verdict-wrong:active{filter:brightness(.92)}.verdict-correct{background:#dcfce7;color:#15803d}.verdict-correct:active{filter:brightness(.92)}.practice-actions{display:flex;gap:.75rem;justify-content:center;padding:.5rem 0 max(1.25rem,env(safe-area-inset-bottom));flex-shrink:0}.done-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100dvh;gap:1.75rem;text-align:center;padding:2rem}.done-title{font-size:1.75rem;font-weight:800;color:var(--text)}.done-stats{display:flex;gap:3rem}.done-stat{display:flex;flex-direction:column;align-items:center;gap:.25rem}.done-stat-value{font-size:2.5rem;font-weight:800;line-height:1}.done-stat-label{font-size:.8rem;color:var(--muted);font-weight:600;letter-spacing:.04em;text-transform:uppercase}.upload-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:3rem 1.5rem;border:2px dashed var(--border);border-radius:var(--radius);cursor:pointer;background:var(--surface);transition:border-color .15s,background .15s}.upload-zone:hover{border-color:var(--primary);background:#f5f3ff}.upload-icon{font-size:2rem;color:var(--primary)}.upload-label{font-weight:600;font-size:1rem}.upload-sub{font-size:.82rem;color:var(--muted)}.import-meta{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:.5rem}.import-filename{font-weight:600;font-size:.9rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.toggle-row{display:flex;align-items:center;gap:.6rem;font-size:.9rem;font-weight:500;padding:.75rem 0;cursor:pointer;-webkit-user-select:none;user-select:none}.toggle-row input[type=checkbox]{width:18px;height:18px;accent-color:var(--primary);cursor:pointer}.mapping-hint{font-size:.85rem;color:var(--muted);margin-bottom:.75rem}.preview-scroll{overflow-x:auto;border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:1rem}.preview-table{border-collapse:collapse;width:100%;min-width:max-content;background:var(--surface);font-size:.85rem}.preview-col-header{padding:.5rem .6rem .4rem;border-bottom:2px solid var(--border);text-align:left;white-space:nowrap;vertical-align:bottom;background:#f9fafb}.col-assign-btns{display:flex;gap:.25rem;margin-bottom:.35rem}.col-assign-btn{font-size:.72rem;font-weight:800;padding:.15rem .45rem;border-radius:5px;border:1.5px solid var(--border);background:var(--surface);color:var(--muted);cursor:pointer;font-family:inherit;line-height:1.4;transition:background .1s,border-color .1s,color .1s}.col-assign-btn.active-q{background:var(--primary);border-color:var(--primary);color:#fff}.col-assign-btn.active-a{background:#16a34a;border-color:#16a34a;color:#fff}.col-header-name{font-size:.8rem;font-weight:600;color:var(--text)}.preview-cell{padding:.45rem .6rem;border-bottom:1px solid var(--border);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted)}.preview-cell.col-q{background:#eef2ff;color:var(--text)}.preview-cell.col-a{background:#f0fdf4;color:var(--text)}.import-footer{display:flex;flex-direction:column;gap:.75rem}.mapping-summary{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}.mapping-tag{display:inline-flex;align-items:center;padding:.2rem .6rem;border-radius:99px;font-size:.78rem;font-weight:700}.tag-q{background:#e0e7ff;color:#3730a3}.tag-a{background:#dcfce7;color:#166534}.tag-err{background:#fee2e2;color:#b91c1c}.update-prompt{position:fixed;bottom:max(1.25rem,env(safe-area-inset-bottom));left:50%;transform:translate(-50%);width:calc(100% - 2rem);max-width:600px;background:var(--text);color:#fff;border-radius:var(--radius);box-shadow:0 8px 24px #00000040;padding:1rem 1.1rem;display:flex;align-items:center;gap:1rem;z-index:999;animation:slide-up .25s ease}@keyframes slide-up{0%{transform:translate(-50%) translateY(120%)}to{transform:translate(-50%) translateY(0)}}.update-prompt-body{flex:1;min-width:0}.update-prompt-title{font-weight:700;font-size:.9rem}.update-prompt-sub{font-size:.78rem;opacity:.7;margin-top:.1rem}.update-prompt-actions{display:flex;gap:.4rem;flex-shrink:0}.update-prompt .btn-primary{background:#fff;color:var(--text)}.update-prompt .btn-primary:active{background:#e5e7eb}.update-prompt .btn-ghost{color:#ffffffa6}.version-badge{font-size:.8rem;font-weight:700;color:var(--muted);background:var(--border);padding:.2rem .6rem;border-radius:99px}.changelog,.release-card{display:flex;flex-direction:column;gap:.75rem}.release-header{display:flex;align-items:baseline;gap:.75rem}.release-version{font-size:1rem;font-weight:800;color:var(--primary)}.release-date{font-size:.8rem;color:var(--muted)}.release-changes{padding-left:1.25rem;display:flex;flex-direction:column;gap:.35rem}.release-changes li{font-size:.875rem;line-height:1.55;color:var(--text)}.home-footer{display:flex;justify-content:center;padding:2rem 0 .5rem}.version-link{background:var(--border);border:none;color:var(--muted);font-size:.82rem;font-weight:700;cursor:pointer;font-family:inherit;padding:.3rem .85rem;border-radius:99px}.version-link:active{background:#d1d5db}.install-banner{display:flex;align-items:flex-start;gap:.75rem;background:#eef2ff;border:1.5px solid #c7d2fe;border-radius:var(--radius);padding:.85rem 1rem;margin:.75rem 0 .25rem}.install-banner-body{flex:1;min-width:0}.install-banner-title{font-weight:700;font-size:.9rem;color:#3730a3;margin-bottom:.2rem}.install-banner-sub{font-size:.82rem;color:#4338ca;line-height:1.5}.install-banner-close{background:none;border:none;color:#6366f1;font-size:1rem;cursor:pointer;padding:0;line-height:1;flex-shrink:0}.backup-nudge{display:flex;align-items:flex-start;gap:.75rem;background:#fffbeb;border:1.5px solid #fde68a;border-radius:var(--radius);padding:.75rem 1rem;margin-bottom:.75rem}.backup-nudge-body{flex:1;min-width:0}.backup-nudge-title{font-weight:700;font-size:.875rem;color:#92400e;margin-bottom:.15rem}.backup-nudge-sub{font-size:.8rem;color:#b45309;line-height:1.5}.backup-nudge-close{background:none;border:none;color:#d97706;font-size:1rem;cursor:pointer;padding:0;line-height:1;flex-shrink:0}.sheet-picker{margin-bottom:.75rem}.sheet-picker-label{font-weight:600;font-size:.9rem;margin-bottom:.75rem}.sheet-list{list-style:none;display:flex;flex-direction:column;gap:.25rem}.sheet-checkbox-row{border-radius:8px;transition:background .1s}.sheet-checkbox-row:hover{background:var(--bg)}.sheet-checkbox-label{display:flex;align-items:center;gap:.65rem;padding:.55rem .5rem;cursor:pointer;font-size:.95rem;font-weight:500;-webkit-user-select:none;user-select:none}.sheet-checkbox-label input[type=checkbox]{width:18px;height:18px;accent-color:var(--primary);cursor:pointer;flex-shrink:0}.mapping-progress{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;padding:.5rem 0 .75rem}.mapping-progress-text{font-size:.82rem;color:var(--muted);font-weight:600}.mapping-progress-name{font-size:.82rem;font-weight:700;color:var(--primary)}.mapping-progress-dots{display:flex;gap:.3rem;align-items:center;margin-left:auto}.mapping-dot{width:8px;height:8px;border-radius:50%;background:var(--border);transition:background .15s}.mapping-dot.active{background:var(--primary)}.mapping-dot.done{background:#16a34a}.tag-count{background:#f0f9ff;color:#0369a1}.summary-card{display:flex;flex-direction:column;gap:1rem}.summary-title{font-size:1.25rem;font-weight:800;color:var(--text)}.summary-totals{display:flex;gap:2.5rem}.summary-stat{display:flex;flex-direction:column;align-items:flex-start;gap:.15rem}.summary-stat-value{font-size:2rem;font-weight:800;line-height:1}.summary-stat-value.added{color:#16a34a}.summary-stat-value.skipped{color:var(--muted)}.summary-stat-label{font-size:.75rem;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.summary-sheet-list{list-style:none;display:flex;flex-direction:column;gap:0;border-top:1px solid var(--border);padding-top:.75rem}.summary-sheet-row{display:flex;align-items:center;gap:.5rem;padding:.35rem 0;font-size:.875rem;border-bottom:1px solid var(--border)}.summary-sheet-name{flex:1;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.summary-sheet-added{color:#16a34a;font-weight:700}.summary-sheet-skipped{color:var(--muted);font-size:.8rem}
