*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#1f2937;background:#f8fafc}.app{min-height:100vh;display:flex;flex-direction:column}.navbar{background:#fff;border-bottom:1px solid #e5e7eb;box-shadow:0 1px 2px #0f172a0f}.navbar-list{display:flex;gap:.25rem;list-style:none;margin:0;padding:.75rem 1rem}.navbar-tab{display:inline-flex;align-items:center;gap:.5rem;padding:.625rem 1rem;border:none;border-radius:.5rem;background:transparent;color:#4b5563;font-size:.95rem;font-weight:500;cursor:pointer;transition:background-color .15s ease,color .15s ease}.navbar-tab:hover{background:#f3f4f6;color:#111827}.navbar-tab--active,.navbar-tab--active:hover{background:#eff6ff;color:#1d4ed8}.navbar-icon{width:1.125rem;height:1.125rem}.app-main{flex:1;padding:1.5rem}.page{max-width:48rem;margin:0 auto}.page--full-width{max-width:none;width:100%;margin:0}.page-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}.page-header h1{margin:0;font-size:1.75rem;font-weight:700}.page-add-button{margin-top:0;padding:.625rem 1rem;border:none;border-radius:.5rem;background-color:#60a5fa;color:#fff;font-size:.95rem;font-weight:500;cursor:pointer;white-space:nowrap}.page-add-button:hover{background-color:#3b82f6}.page-mode-button{display:inline-flex;align-items:center;gap:.5rem;margin-top:0;padding:.625rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background-color:#fff;color:#374151;font-size:.95rem;font-weight:500;cursor:pointer;white-space:nowrap}.page-mode-button:hover{background-color:#f9fafb}.page-mode-button-icon{width:1rem;height:1rem}.page-header-actions{display:flex;align-items:center;gap:.75rem}.page-header-toggles{display:flex;flex-direction:column;gap:.375rem;margin:0 auto}.page-header-toggle{display:grid;grid-template-columns:1fr auto;align-items:center;gap:.375rem;cursor:pointer;line-height:1}.page-header-toggle-label{font-size:.75rem;font-weight:500;color:#374151;white-space:nowrap}.page-header-toggles .toggle-slider{width:2.0625rem;height:1.125rem}.page-header-toggles .toggle-slider:before{top:.09375rem;left:.09375rem;width:.9375rem;height:.9375rem;box-shadow:0 .5px 1px #0f172a33}.page-header-toggles .toggle input:checked+.toggle-slider:before{transform:translate(.9375rem)}.page-header-toggles .toggle input:focus-visible+.toggle-slider{outline-width:1px;outline-offset:1px}.knowledge-base-section+.knowledge-base-section{margin-top:2rem}.knowledge-base-status-message{margin:0 0 1.25rem;color:#15803d;font-size:.95rem}.knowledge-base-import-input{display:none}.knowledge-base-section-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.knowledge-base-section-title{margin:0;font-size:1.25rem;font-weight:600;color:#111827}.preferences-section{max-width:32rem}.preferences-section--usage{margin-top:2.5rem;max-width:40rem}.preferences-section-title{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#111827}.preferences-section-description{margin:0 0 1.25rem;color:#4b5563;line-height:1.5}.preferences-form{display:flex;flex-direction:column;gap:1rem}.preferences-field{display:flex;flex-direction:column;gap:.5rem}.preferences-field-label{font-size:.875rem;font-weight:500;color:#374151}.preferences-field input{width:100%;box-sizing:border-box;padding:.625rem .75rem;border:1px solid #d1d5db;border-radius:.5rem;font-size:.95rem;color:#111827;background:#fff}.preferences-field input:focus{outline:2px solid #bfdbfe;border-color:#60a5fa}.preferences-save-message{margin:0 0 1rem;color:#15803d;font-size:.95rem}.preferences-token-total{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin:0 0 1.25rem;padding:.9rem 1rem;border:1px solid #e5e7eb;border-radius:.75rem;background:#f9fafb}.preferences-token-total-label{color:#4b5563;font-size:.95rem}.preferences-token-total-value{color:#111827;font-size:1.35rem;font-weight:650;font-variant-numeric:tabular-nums}.preferences-token-total-cost{color:#4b5563;font-size:.95rem;font-weight:400}.preferences-token-chart{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.65rem;align-items:end;min-height:11rem;padding:1rem .75rem .75rem;border:1px solid #e5e7eb;border-radius:.75rem;background:#fff}.preferences-token-chart-bar{display:flex;flex-direction:column;align-items:center;gap:.4rem;min-width:0}.preferences-token-chart-value{color:#6b7280;font-size:.7rem;font-variant-numeric:tabular-nums;line-height:1}.preferences-token-chart-track{display:flex;align-items:flex-end;width:100%;height:7rem;padding:0 .2rem}.preferences-token-chart-fill{width:100%;min-height:.2rem;border-radius:.35rem .35rem .15rem .15rem;background:linear-gradient(180deg,#60a5fa,#2563eb)}.preferences-token-chart-label{color:#6b7280;font-size:.68rem;line-height:1.2;text-align:center;overflow-wrap:anywhere}.preferences-section--anki{margin-top:2.5rem;max-width:40rem}.anki-warning{margin:0 0 1.25rem;padding:.85rem 1rem;border:1px solid #f59e0b;border-radius:.75rem;background:#fffbeb}.anki-warning-title-row{display:flex;align-items:center;gap:.5rem}.anki-warning-text{margin:0;flex:1;min-width:0;color:#92400e;line-height:1.45;font-size:.95rem}.anki-sync-banner{position:fixed;top:0;left:0;right:0;z-index:100;display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin:0;padding:.35rem 1.25rem;border:none;border-bottom:1px solid #f59e0b;border-radius:0;background:#fffbeb;box-shadow:0 1px 2px #92400e14}.app:has(.anki-sync-banner) .navbar{margin-top:2.1rem}.anki-sync-banner-text{margin:0;flex:1;min-width:0;color:#92400e;line-height:1.3;font-size:.85rem}.anki-sync-banner-button{flex-shrink:0;border:1px solid #d97706;border-radius:.35rem;background:#fff;color:#92400e;font:inherit;font-size:.8rem;font-weight:600;padding:.2rem .65rem;line-height:1.3;cursor:pointer}.anki-sync-banner-button:hover:not(:disabled){background:#fff7ed}.anki-sync-banner-button:disabled{opacity:.65;cursor:not-allowed}.anki-deck-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.anki-deck-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.9rem 1rem;border:1px solid #e5e7eb;border-radius:.75rem;background:#fff}.anki-deck-row-main{display:flex;flex-wrap:wrap;align-items:center;gap:.65rem .85rem;min-width:0}.anki-deck-name{font-weight:600;color:#111827}.anki-deck-status{display:inline-flex;align-items:center;padding:.2rem .55rem;border-radius:999px;font-size:.75rem;font-weight:600;line-height:1.2}.anki-deck-status--not_configured{background:#f3f4f6;color:#4b5563}.anki-deck-status--not_synchronized{background:#ffedd5;color:#c2410c}.anki-deck-status--synchronized{background:#dcfce7;color:#15803d}.anki-deck-mapped-name{color:#6b7280;font-size:.85rem;overflow-wrap:anywhere}.anki-deck-row-actions{display:flex;flex-shrink:0;align-items:center;gap:.5rem}.anki-deck-action-button{display:inline-flex;align-items:center;gap:.4rem}.anki-deck-action-icon{width:.95rem;height:.95rem;flex-shrink:0}.anki-deck-row .page-add-button{flex-shrink:0;margin-top:0}.anki-deck-row .page-add-button:disabled{opacity:.55;cursor:not-allowed}.anki-deck-select{width:100%;box-sizing:border-box;padding:.625rem .875rem;border:1px solid #d1d5db;border-radius:.5rem;background:#fff;color:#111827;font-size:.95rem}.anki-deck-select:focus{outline:2px solid #bfdbfe;border-color:#60a5fa}.anki-guide-modal{max-width:36rem;max-height:min(90vh,44rem);overflow-y:auto}.anki-guide-steps{list-style:none;margin:0 0 1.5rem;padding:0;display:flex;flex-direction:column;gap:1.25rem}.anki-guide-step{display:flex;flex-direction:column;gap:.75rem}.anki-guide-step-header{display:flex;gap:.75rem;align-items:flex-start}.anki-guide-step-number{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:999px;background:#2563eb;color:#fff;font-size:.8rem;font-weight:700}.anki-guide-step-title{margin:0 0 .25rem;font-size:.95rem;font-weight:600;color:#111827}.anki-guide-step-description{margin:0;color:#4b5563;font-size:.9rem;line-height:1.45}.anki-guide-step-image{width:100%;border:1px solid #e5e7eb;border-radius:.5rem;background:#f9fafb;display:block}.anki-setup-modal{max-width:34rem;max-height:min(90vh,48rem);overflow-y:auto}.anki-sync-modal{max-width:40rem;max-height:min(90vh,52rem);overflow-y:auto}.anki-sync-modal--partial{max-width:44rem;max-height:min(90vh,48rem)}.anki-sync-lead{margin:0 0 1.25rem;color:#4b5563;font-size:.95rem;line-height:1.5}.anki-sync-panel{margin-bottom:1rem;padding:1rem 1.1rem;border:1px solid #e5e7eb;border-radius:.75rem;background:#f9fafb}.anki-sync-panel--push{border-color:#bfdbfe;background:#f8fbff}.anki-sync-panel--pull{border-color:#e5e7eb;background:#f3f4f6}.anki-sync-panel-header{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.35rem 1rem;margin-bottom:.45rem}.anki-sync-panel-title{margin:0;font-size:1.05rem;font-weight:700;color:#111827}.anki-sync-panel-count{margin:0;color:#374151;font-size:.875rem;font-weight:600}.anki-sync-panel-copy{margin:0 0 .95rem;color:#6b7280;font-size:.875rem;line-height:1.45}.anki-sync-panel--pull .anki-sync-panel-copy{color:#6b7280}.anki-sync-panel--pull .modal-button-confirm-primary,.anki-sync-panel--pull .modal-button-confirm,.anki-sync-panel--pull .page-add-button{opacity:.92}.anki-sync-actions{display:flex;flex-direction:column;gap:.55rem}.anki-sync-actions .page-add-button,.anki-sync-actions .modal-button-cancel,.anki-sync-actions .modal-button-confirm,.anki-sync-actions .modal-button-confirm-primary{width:100%;justify-content:center}.anki-sync-footer{margin-top:.5rem}.anki-sync-partial-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .75rem;margin-bottom:.85rem}.anki-sync-partial-count{margin-left:auto;color:#6b7280;font-size:.875rem}.anki-sync-card-list{display:flex;flex-direction:column;gap:.35rem;max-height:min(50vh,22rem);margin-bottom:1.25rem;padding-right:.25rem;overflow-y:auto}.anki-sync-card-row{display:grid;grid-template-columns:2rem minmax(4rem,.9fr) minmax(5rem,1fr) minmax(6rem,1.4fr);gap:.65rem;align-items:center;padding:.55rem .65rem;border:1px solid #e5e7eb;border-radius:.5rem;background:#fff;color:#111827;font-size:.9rem;cursor:pointer}.anki-sync-card-row--header{position:sticky;top:0;z-index:1;border-color:transparent;background:#f9fafb;color:#6b7280;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.02em;cursor:default}.anki-sync-card-check{display:inline-flex;align-items:center;justify-content:center}.anki-sync-card-writting{font-size:1.05rem;font-weight:600}.anki-sync-card-row--writting{grid-template-columns:2rem minmax(8rem,1.6fr) minmax(4rem,.8fr)}.anki-sync-unsyncable{margin-top:1rem;padding:.85rem 1rem;border:1px solid #fde68a;border-radius:.75rem;background:#fffbeb}.anki-sync-unsyncable-title{margin:0 0 .4rem;font-size:.9rem;font-weight:600;color:#92400e}.anki-sync-unsyncable-text{margin:0;color:#92400e;font-size:.875rem;line-height:1.45}.anki-sync-unsyncable-chars{font-weight:600;font-size:1rem}.anki-setup-description{white-space:pre-wrap}.anki-field-mapping{margin:0;padding:.85rem 1rem 1rem;border:1px solid #e5e7eb;border-radius:.75rem;display:flex;flex-direction:column;gap:.85rem}.anki-field-mapping-legend{padding:0 .25rem;font-size:.875rem;font-weight:600;color:#111827}.anki-field-mapping-hint{margin:0;color:#6b7280;font-size:.85rem;line-height:1.4}.anki-field-description{font-weight:400;color:#6b7280}.anki-note-type-label-row{display:flex;align-items:center;gap:.5rem;margin-bottom:.35rem}.anki-note-type-label-row .modal-field-label{margin:0}.anki-note-type-info-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.anki-note-type-info-header .modal-title{margin:0}.anki-note-type-directions{margin:0 0 1rem;padding-left:1.25rem;color:#374151;line-height:1.5}.anki-note-type-info-actions{flex-wrap:wrap}.anki-mandatory-field-list{list-style:none;margin:0 0 .75rem;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}.anki-mandatory-field-item{padding:.3rem .65rem;border-radius:999px;background:#eff6ff;color:#1d4ed8;font-size:.85rem;font-weight:600}.anki-optional-field-row{display:flex;gap:.75rem;align-items:center}.anki-optional-field-row input[type=text]{flex:1;box-sizing:border-box;padding:.625rem .875rem;border:1px solid #d1d5db;border-radius:.5rem;background:#fff;color:#111827;font-size:.95rem}.anki-optional-field-row .modal-button-cancel{flex-shrink:0}.chat-intro{margin:0 0 1.5rem;font-size:1.125rem;font-weight:500;color:#111827}.chat-character-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:1rem}.chat-character-card{display:flex;flex-direction:column;align-items:center;gap:1rem;width:100%;padding:1.25rem;border:1px solid #e5e7eb;border-radius:.75rem;background:#fff;box-shadow:0 1px 2px #0f172a0f;text-align:center;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.chat-character-card:hover{border-color:#bfdbfe;box-shadow:0 8px 20px #0f172a14;transform:translateY(-1px)}.chat-character-card:focus-visible{outline:2px solid #60a5fa;outline-offset:2px}.chat-character-avatar-image{width:6rem;height:6rem}.chat-character-avatar-image--compact{width:3rem;height:3rem}.chat-character-card-content{display:flex;flex-direction:column;gap:.5rem}.chat-character-card-name{margin:0;font-size:1.125rem;font-weight:600;color:#111827}.chat-character-card-chinese-name{font-weight:500;color:#4b5563}.chat-character-card-description{margin:0;color:#4b5563;line-height:1.5;font-size:.95rem}.chat-challenges-section{margin-top:2.5rem}.chat-section-title{margin:0 0 .35rem;font-size:1.25rem;font-weight:650;color:#111827}.chat-section-description{margin:0 0 1.25rem;color:#4b5563;line-height:1.5}.challenge-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:1rem}.challenge-card-avatar-wrap{position:relative;display:inline-flex}.challenge-card--completed{border-color:#86efac;background:linear-gradient(180deg,#f0fdf4,#fff 55%);box-shadow:0 1px 2px #16a34a14}.challenge-card--completed:hover{border-color:#4ade80;box-shadow:0 8px 20px #16a34a1f}.challenge-card-completed-badge{position:absolute;right:-.2rem;bottom:-.15rem;display:inline-flex;align-items:center;justify-content:center;width:1.7rem;height:1.7rem;border-radius:9999px;border:2px solid #ffffff;background:#16a34a;color:#fff;box-shadow:0 1px 3px #16653440}.challenge-card-completed-icon{width:.95rem;height:.95rem}.challenge-card-completed-label{display:inline-flex;align-self:center;margin-top:.15rem;padding:.15rem .55rem;border-radius:9999px;background:#dcfce7;color:#166534;font-size:.78rem;font-weight:650;letter-spacing:.01em}.chat-modal-dialog{display:flex;flex-direction:column;width:min(48rem,100%);height:min(40rem,calc(100vh - 2rem));padding:0;border-radius:.75rem;background:#fff;box-shadow:0 20px 25px -5px #0f172a26;overflow:hidden}.chat-modal-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.25rem;border-bottom:1px solid #e5e7eb;background:#f9fafb}.chat-modal-participant{display:flex;align-items:center;gap:.75rem;min-width:0}.chat-modal-participant-text{min-width:0}.chat-modal-participant-name{margin:0;font-size:1.125rem;font-weight:600;color:#111827}.chat-modal-participant-chinese-name{font-weight:500;color:#4b5563}.chat-modal-header-actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.chat-modal-clear-button{display:inline-flex;align-items:center;gap:.4rem;padding:.4rem .7rem;border:1px solid #d1d5db;border-radius:.5rem;background:#fff;color:#4b5563;font-size:.8125rem;font-weight:500;line-height:1.2;white-space:nowrap;cursor:pointer}.chat-modal-clear-button:hover:not(:disabled){border-color:#fca5a5;background:#fef2f2;color:#b91c1c}.chat-modal-clear-button:disabled{opacity:.45;cursor:not-allowed}.chat-modal-clear-icon{width:.95rem;height:.95rem;flex-shrink:0}.chat-modal-close-button{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:1px solid #d1d5db;border-radius:.5rem;background:#fff;color:#4b5563;cursor:pointer}.chat-modal-close-button:hover{border-color:#9ca3af;background:#f3f4f6;color:#111827}.chat-modal-close-icon{width:1rem;height:1rem;display:block;flex-shrink:0}.chat-modal-tasks{flex-shrink:0;padding:.85rem 1.1rem .95rem;border-bottom:1px solid #e5e7eb;background:#fffbeb}.chat-modal-tasks-title{margin:0 0 .65rem;font-size:.95rem;font-weight:650;color:#92400e}.chat-modal-task-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.45rem 1rem;margin:0;padding:0;list-style:none}.chat-modal-task-item{margin:0}.chat-modal-task-label{display:flex;align-items:flex-start;gap:.5rem;color:#374151;font-size:.92rem;line-height:1.4;cursor:default}.chat-modal-task-label input{margin-top:.15rem;accent-color:#ea580c;cursor:default}.chat-modal-task-label input:disabled{opacity:1}.chat-modal-task-text--done{color:#6b7280;text-decoration:line-through}.chat-modal-messages{flex:1;overflow-y:auto;overflow-x:hidden;padding:1.25rem;background:#fff;display:flex;flex-direction:column}.chat-modal-confetti{pointer-events:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:10000;overflow:hidden}.chat-modal-confetti-piece{position:absolute;top:-16px;border-radius:2px;opacity:.95;will-change:transform,opacity;animation-name:chat-modal-confetti-fall;animation-timing-function:linear;animation-fill-mode:forwards}@keyframes chat-modal-confetti-fall{0%{transform:translateZ(0) rotate(0);opacity:1}85%{opacity:1}to{transform:translate3d(var(--confetti-drift, 0),110vh,0) rotate(var(--confetti-rotation, 180deg));opacity:0}}.chat-modal-empty-state{margin:0;color:#6b7280;text-align:center;line-height:1.5}.chat-message-list{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:.5rem .4rem 0;list-style:none}.chat-message-row{display:flex;max-width:85%}.chat-message-row--user{align-self:flex-end;justify-content:flex-end;margin-left:auto}.chat-message-row--assistant{align-self:flex-start;justify-content:flex-start;margin-right:auto}.chat-message-row--segmented{max-width:100%;width:100%;align-self:stretch;margin-left:0;margin-right:0}.chat-message-segments{display:flex;flex-direction:column;align-items:stretch;gap:.45rem;width:100%}.chat-message-segments .chat-message-stage{align-self:stretch;width:100%;text-align:center}.chat-message-segments .chat-message--assistant{align-self:flex-start;max-width:85%}.chat-message-row--stage{align-self:center;justify-content:center;max-width:100%;width:100%;margin:.15rem 0}.chat-message-shell{position:relative;max-width:100%;overflow:visible}.chat-message{max-width:100%;padding:.75rem 1rem;border-radius:1rem;line-height:1.5;white-space:pre-wrap;word-break:break-word}.chat-message--user{background:#dbeafe;color:#1e3a8a}.chat-message--assistant{background:#f3f4f6;color:#111827}.chat-message-stage{margin:0;padding:.2rem .75rem;color:#6b7280;font-style:italic;font-size:.95rem;line-height:1.5;text-align:center;white-space:pre-wrap;word-break:break-word}.chat-message-stage-group{display:flex;flex-direction:column;align-items:center;gap:.2rem}.chat-message-warning-button,.page-content .chat-message-warning-button{position:absolute;top:0;left:0;z-index:2;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;min-width:1.75rem;min-height:1.75rem;max-width:1.75rem;max-height:1.75rem;margin:0;padding:0;aspect-ratio:1 / 1;border:1.5px solid #f59e0b;border-radius:9999px;background:#fffbeb;color:#d97706;font-size:inherit;line-height:0;cursor:pointer;transform:translate(-50%,-55%);box-shadow:0 1px 3px #0000001f}.chat-message-warning-button:hover,.page-content .chat-message-warning-button:hover{background:#fef3c7;border-color:#d97706;color:#b45309}.chat-message-warning-icon{width:.95rem;height:.95rem;display:block;flex-shrink:0}.chat-modal-typing-indicator{margin:.75rem 0 0;color:#6b7280;font-size:.875rem;font-style:italic}.chat-modal-error{margin:0;padding:0 1.25rem}.chat-modal-composer{display:flex;flex-direction:column;gap:.5rem;padding:1rem 1.25rem 1.25rem;border-top:1px solid #e5e7eb;background:#f9fafb}.chat-modal-composer-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.chat-modal-composer-row{display:flex;gap:.75rem}.chat-modal-composer-row input{flex:1;min-width:0;padding:.625rem .75rem;border:1px solid #d1d5db;border-radius:.5rem;font-size:.95rem;color:#111827;background:#fff}.chat-modal-composer-row input:focus{outline:2px solid #bfdbfe;border-color:#60a5fa}.chat-modal-composer-row .page-add-button{flex-shrink:0}.chat-modal-challenge-complete{display:flex;align-items:center;justify-content:center;gap:.65rem;padding:1.1rem 1.25rem;border-top:1px solid #86efac;background:#dcfce7;color:#166534;font-size:1.05rem;font-weight:650}.chat-modal-challenge-complete-icon{width:1.45rem;height:1.45rem;flex-shrink:0;color:#15803d}.pinyin-grid-bleed{width:100vw;margin-left:calc(50% - 50vw);padding:0 10px;box-sizing:border-box}.pinyin-grid-wrapper{overflow:auto;max-height:calc(100vh - 12rem);width:100%;border:1px solid #e5e7eb;border-radius:.5rem;background:#fff}.pinyin-grid{width:100%;min-width:100%;table-layout:auto;border-collapse:separate;border-spacing:0;font-size:.8125rem}.pinyin-grid th,.pinyin-grid td{padding:.375rem .5rem;border-bottom:1px solid #e5e7eb;border-right:1px solid #e5e7eb;text-align:center;vertical-align:top}.pinyin-grid thead th{position:sticky;top:0;z-index:2;background:#374151;font-weight:600;color:#fff;white-space:nowrap}.pinyin-grid-corner-col{min-width:4.5rem}.pinyin-grid-final-col{width:auto}.pinyin-grid-corner{position:sticky;left:0;z-index:3;width:4.5rem;background:#374151;color:#fff}.pinyin-grid-row-header{position:sticky;left:0;z-index:1;width:4.5rem;background:#374151;font-weight:600;color:#fff;text-align:left}.pinyin-grid tbody td{color:#111827}.pinyin-grid-cell-invalid{background:#f3f4f6}.pinyin-grid-cell-highlight{background:#fef9c3}.pinyin-grid-char-tone-1{color:#f59e0b}.pinyin-grid-char-tone-2{color:#16a34a}.pinyin-grid-char-tone-3{color:#2563eb}.pinyin-grid-char-tone-4{color:#dc2626}.pinyin-grid-char-tone-none{color:#000}.pinyin-grid-char-clickable{cursor:pointer}.character-words-modal-content{margin-bottom:1rem}.character-words-modal-heading{margin:0 0 .5rem;font-size:.95rem;font-weight:600;color:#111827}.character-words-modal-list{margin:0;padding-left:1.25rem;color:#374151;font-size:.95rem;line-height:1.5}.pinyin-grid-cell-content{display:inline-block;width:100%}.pinyin-grid-cell-line{display:block;line-height:1.4;white-space:nowrap}.form-warning{margin:0;color:#b45309;font-size:.875rem;line-height:1.4}.form-warning-row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .75rem}.form-warning-action{margin-top:0;padding:.375rem .75rem;border:none;border-radius:.375rem;background-color:#60a5fa;color:#fff;font-size:.875rem;font-weight:500;cursor:pointer;white-space:nowrap}.form-warning-action:hover{background-color:#3b82f6}.page-content{color:#374151;line-height:1.6}.home-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));gap:1rem;margin-bottom:2rem}.home-hsk-card{display:flex;gap:1.25rem;align-items:center;padding:1.5rem;margin-bottom:1.5rem;border-radius:1rem;background:linear-gradient(135deg,#eff6ff,#fef3c7 55%,#fff7ed);border:1px solid #fde68a;box-shadow:0 10px 25px #f59e0b1f}.home-hsk-badge{flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;width:5.5rem;height:5.5rem;border-radius:50%;background:linear-gradient(145deg,#f59e0b,#d97706);color:#fff;box-shadow:0 8px 16px #d9770659}.home-hsk-badge-label{font-size:.75rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;opacity:.95}.home-hsk-badge-level{font-size:1.75rem;font-weight:800;line-height:1}.home-hsk-content{flex:1;min-width:0}.home-hsk-title-row{display:flex;align-items:center;gap:.5rem;margin:0 0 .875rem}.home-hsk-title{margin:0;font-size:1.25rem;font-weight:700;color:#92400e}.page-content .home-hsk-info-button{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.5rem;height:1.5rem;margin:0;padding:0;border:0;border-radius:0;background:transparent;color:#b45309;cursor:pointer}.page-content .home-hsk-info-button:hover,.page-content .home-hsk-info-button:focus-visible{background:transparent;color:#92400e;outline:none}.home-hsk-info-icon{width:1.35rem;height:1.35rem}.home-hsk-info-text{margin:0;font-size:.95rem;color:#374151;line-height:1.5}.home-hsk-subtitle{margin:0 0 .875rem;font-size:.95rem;color:#78350f;line-height:1.4}.home-hsk-progress-track{overflow:hidden;height:.625rem;border-radius:9999px;background:#ffffffbf;border:1px solid #fcd34d}.home-hsk-progress-fill{height:100%;border-radius:9999px;background:linear-gradient(90deg,#fbbf24,#f59e0b,#ea580c);transition:width .35s ease}.home-hsk-progress-label{margin:0;font-size:.875rem;font-weight:600;color:#b45309}.home-hsk-progress-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem 1rem;margin-top:.625rem}.home-hsk-missing-button{padding:.25rem .625rem;border:1px solid #f59e0b;border-radius:9999px;background:#ffffffb3;color:#b45309;font-size:.75rem;font-weight:600;cursor:pointer}.home-hsk-missing-button:hover{background:#fff;border-color:#d97706}.home-missing-characters-hint{margin:0 0 .75rem;font-size:.95rem;line-height:1.5;font-style:italic;color:#4b5563}.home-missing-characters-scroll{max-height:14rem;overflow-y:auto;padding-right:.25rem}.home-missing-characters-list{margin:0;font-size:1.25rem;line-height:1.8;word-break:break-word}.page-content .home-missing-character-button{display:inline;margin:0;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;color:inherit;font:inherit;font-size:inherit;line-height:inherit;letter-spacing:inherit;text-align:inherit;-moz-appearance:none;appearance:none;-webkit-appearance:none;cursor:pointer}.page-content .home-missing-character-button:hover,.page-content .home-missing-character-button:focus-visible{background:transparent;color:#2563eb;text-decoration:underline;outline:none}.home-metric-card{padding:1.25rem;border:1px solid #e5e7eb;border-radius:.75rem;background:#fff;box-shadow:0 1px 2px #0f172a0f}.home-metric-value{margin:0 0 .375rem;font-size:2rem;font-weight:700;color:#111827;line-height:1.1}.home-metric-label{margin:0;font-size:.95rem;color:#4b5563;line-height:1.4}.home-motivation-list{display:flex;flex-direction:column;gap:.75rem;margin:0;padding:0;list-style:none}.home-motivation-item{display:flex;align-items:flex-start;gap:.75rem;padding:.875rem 1rem;border:1px solid #fde68a;border-radius:.75rem;background:#fffbeb;color:#92400e;line-height:1.5}.home-motivation-icon{flex-shrink:0;width:1.25rem;height:1.25rem;margin-top:.125rem;color:#d97706}.page-content button{margin-top:1rem;padding:.625rem 1rem;border:1px solid #d1d5db;border-radius:.5rem;background:#fff;color:#111827;font-size:.95rem;cursor:pointer}.page-content button:hover{background:#f9fafb}.table-wrapper{overflow-x:auto}.table-wrapper--scrollable{overflow-y:auto;border:1px solid #e5e7eb;border-radius:.5rem;background:#fff;max-height:calc(var(--table-header-height) + var(--table-visible-rows, 5) * var(--table-row-height))}.table-wrapper--scrollable .table{border:none;border-radius:0}.table-wrapper--scrollable .table thead th{position:sticky;top:0;z-index:1;box-shadow:0 1px #e5e7eb}.table-wrapper--compact{--table-header-height: 2rem;--table-row-height: 1.625rem}.table{width:100%;border-collapse:collapse;background:#fff;border:1px solid #e5e7eb;border-radius:.5rem}.table th,.table td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid #e5e7eb}.table th{background:#f9fafb;font-size:.875rem;font-weight:600;color:#374151}.table--compact th,.table--compact td{padding:.375rem .75rem;font-size:.8125rem;line-height:1.2}.table--compact thead tr{height:var(--table-header-height)}.table--compact tbody tr{height:var(--table-row-height)}.table--compact .table-edit-button,.table--compact .table-delete-button{padding:.125rem .5rem;font-size:.75rem}.table tbody tr:last-child td{border-bottom:none}.table tbody tr:hover{background:#f9fafb}.table-actions-header{width:1%}.table-actions{width:1%;white-space:nowrap;text-align:right}.table-row-actions{display:flex;justify-content:flex-end;gap:.5rem}.table-edit-button,.table-delete-button{margin-top:0;padding:.375rem .75rem;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;opacity:0;transition:opacity .15s ease,background-color .15s ease}.table-edit-button{background-color:#60a5fa;color:#fff}.page-content .table-edit-button{background-color:#60a5fa;color:#fff;border:none}.table-row:hover .table-edit-button,.table-row:hover .table-delete-button{opacity:1}.table-edit-button:hover,.page-content .table-edit-button:hover{background-color:#3b82f6;color:#fff}.table-delete-button{background-color:#dc2626;color:#fff}.page-content .table-delete-button{background-color:#dc2626;color:#fff;border:none}.table-delete-button:hover,.page-content .table-delete-button:hover{background-color:#b91c1c;color:#fff}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;padding:1rem;background:#0f172a73;z-index:1000}.modal-overlay.modal-overlay--stacked{z-index:1100}.modal-dialog{width:100%;max-width:28rem;padding:1.5rem;border-radius:.75rem;background:#fff;box-shadow:0 20px 25px -5px #0f172a26}.modal-title{margin:0 0 1.25rem;font-size:1.25rem;font-weight:700;color:#111827}.modal-form{display:flex;flex-direction:column;gap:1rem}.modal-field{display:flex;flex-direction:column;gap:.5rem}.modal-field-checkbox,.modal-field-toggle{flex-direction:row;align-items:center;justify-content:space-between}.modal-field-toggle .modal-field-label{margin:0}.toggle{position:relative;display:inline-flex;align-items:center;cursor:pointer}.toggle input{position:absolute;opacity:0;width:0;height:0}.toggle-slider{position:relative;display:inline-block;width:2.75rem;height:1.5rem;border-radius:9999px;background:#d1d5db;transition:background-color .2s ease}.toggle-slider:before{content:"";position:absolute;top:.125rem;left:.125rem;width:1.25rem;height:1.25rem;border-radius:50%;background:#fff;transition:transform .2s ease;box-shadow:0 1px 2px #0f172a33}.toggle input:checked+.toggle-slider{background:#60a5fa}.toggle input:checked+.toggle-slider:before{transform:translate(1.25rem)}.toggle input:focus-visible+.toggle-slider{outline:2px solid #bfdbfe;outline-offset:2px}.modal-field-label{font-size:.875rem;font-weight:600;color:#374151}.modal-field input[type=text]{width:100%;margin-top:0;padding:.625rem .875rem;border:1px solid #d1d5db;border-radius:.5rem;background:#fff;color:#111827;font-size:.95rem}.modal-field input[type=text]:read-only{background:#f3f4f6;color:#6b7280}.modal-field input[type=text]:focus{outline:2px solid #bfdbfe;border-color:#60a5fa}.modal-message{margin:0 0 1.5rem;color:#111827;line-height:1.5}.modal-actions{display:flex;justify-content:flex-end;gap:.75rem}.modal-button-cancel,.modal-button-confirm,.modal-button-confirm-primary{margin-top:0;padding:.625rem 1rem;border-radius:.5rem;font-size:.95rem;font-weight:500;cursor:pointer}.modal-button-cancel{border:1px solid #d1d5db;background:#fff;color:#111827}.modal-button-cancel:hover{background:#f9fafb}.modal-button-confirm{border:none;background-color:#dc2626;color:#fff}.modal-button-confirm:hover{background-color:#b91c1c}.modal-button-confirm-primary{border:none;background-color:#60a5fa;color:#fff}.modal-button-confirm-primary:hover{background-color:#3b82f6}.modal-button-confirm-primary:disabled{background-color:#d1d5db;color:#9ca3af;cursor:not-allowed}.modal-button-confirm-primary:disabled:hover{background-color:#d1d5db}.table-empty,.table-error{margin:0}.table-error{color:#b91c1c}.search-bar{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.search-bar-label{font-size:.875rem;font-weight:600;color:#374151}.search-bar input{width:100%;padding:.625rem .875rem;border:1px solid #d1d5db;border-radius:.5rem;background:#fff;color:#111827;font-size:.95rem}.search-bar input:focus{outline:2px solid #bfdbfe;border-color:#60a5fa}.welcome-auth{--welcome-ink: #0c2a3a;--welcome-sea: #1a5c6e;--welcome-mist: #d8ece8;--welcome-accent: #e8a54b;--welcome-surface: rgba(255, 252, 247, .92);position:relative;isolation:isolate;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2rem 1.25rem;overflow:hidden;font-family:Manrope,Segoe UI,sans-serif;color:var(--welcome-ink);background:radial-gradient(ellipse 80% 60% at 10% 20%,#2a7a7a 0%,transparent 55%),radial-gradient(ellipse 70% 50% at 90% 80%,#1e4d6b 0%,transparent 50%),linear-gradient(160deg,#0a2433,#134455 45%,#1a5c5c)}.welcome-auth-atmosphere{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none}.welcome-auth-glyph{position:absolute;right:-4%;bottom:-8%;font-family:Fraunces,Georgia,serif;font-size:clamp(14rem,42vw,28rem);font-weight:700;line-height:1;color:#d8ece814;-webkit-user-select:none;user-select:none;animation:welcome-glyph-drift 18s ease-in-out infinite alternate}.welcome-auth-content{position:relative;z-index:1;width:min(100%,26rem);display:flex;flex-direction:column;gap:1.75rem}.welcome-auth-brand{text-align:center;animation:welcome-rise .7s ease-out both}.welcome-auth-brand-mark{margin:0 0 .75rem;font-family:Fraunces,Georgia,serif;font-size:clamp(2.5rem,8vw,3.5rem);font-weight:700;letter-spacing:-.02em;color:#f7faf8;text-shadow:0 2px 24px rgba(0,0,0,.25)}.welcome-auth-tagline{margin:0 auto;max-width:22rem;font-size:1.05rem;font-weight:400;line-height:1.55;color:var(--welcome-mist)}.welcome-auth-form{display:flex;flex-direction:column;gap:1rem;padding:1.5rem 1.35rem 1.35rem;border:1px solid rgba(255,255,255,.18);border-radius:1rem;background:var(--welcome-surface);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 18px 40px #06182447;animation:welcome-rise .7s ease-out .12s both}.welcome-auth-form-title{margin:0 0 .25rem;font-family:Fraunces,Georgia,serif;font-size:1.35rem;font-weight:600;color:var(--welcome-ink)}.welcome-auth-field{display:flex;flex-direction:column;gap:.4rem}.welcome-auth-label{font-size:.85rem;font-weight:600;color:#2c4a55}.welcome-auth-field input{width:100%;padding:.7rem .85rem;border:1px solid #b7c9ce;border-radius:.55rem;background:#fff;color:var(--welcome-ink);font-family:inherit;font-size:.95rem}.welcome-auth-field input:focus{outline:2px solid rgba(26,92,110,.35);border-color:var(--welcome-sea)}.welcome-auth-submit{margin-top:.35rem;padding:.8rem 1rem;border:none;border-radius:.55rem;background:var(--welcome-sea);color:#f7faf8;font-family:inherit;font-size:1rem;font-weight:700;cursor:pointer;transition:background-color .18s ease,transform .18s ease}.welcome-auth-submit:hover{background:#154a59}.welcome-auth-submit:active{transform:translateY(1px)}.welcome-auth-switch{margin:.25rem 0 0;text-align:center;font-size:.9rem;color:#3d5c66}.welcome-auth-switch-button{padding:0;border:none;background:none;color:var(--welcome-sea);font-family:inherit;font-size:inherit;font-weight:700;cursor:pointer;text-decoration:underline;text-underline-offset:.15em}.welcome-auth-switch-button:hover{color:#0f3a47}@keyframes welcome-rise{0%{opacity:0;transform:translateY(.85rem)}to{opacity:1;transform:translateY(0)}}@keyframes welcome-glyph-drift{0%{transform:translateZ(0) rotate(-4deg)}to{transform:translate3d(-2%,-3%,0) rotate(2deg)}}@media(max-width:480px){.welcome-auth{align-items:flex-start;padding-top:2.5rem}.welcome-auth-form{padding:1.25rem 1.1rem 1.1rem}}
