:root{--ink: #0F1117;--ink-55: rgba(15, 17, 23, .55);--ink-10: rgba(15, 17, 23, .07);--ink-6: rgba(15, 17, 23, .04);--blue: #2557D6;--blue-bg: #EEF3FD;--blue-mid: #BFDBFE;--green: #16A34A;--green-bg: #F0FDF4;--amber: #B45309;--amber-bg: #FEF9EC;--red: #DC2626;--red-bg: #FEF2F2;--surface: #FAFAF9;--white: #ffffff;--serif: "Noto Sans TC", sans-serif;--sans: "DM Sans", system-ui, -apple-system, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", ui-monospace, monospace;--r: 10px;--r-lg: 14px;--r-xl: 24px;--shadow-card-hover: 0 2px 8px rgba(15, 17, 23, .06);--shadow-dropdown: 0 4px 16px rgba(15, 17, 23, .08);--shadow-modal: 0 8px 48px rgba(15, 17, 23, .1);--color-primary-50: var(--blue-bg);--color-primary-100: var(--blue-bg);--color-primary-200: var(--blue-mid);--color-primary-300: var(--blue-mid);--color-primary-400: var(--blue);--color-primary-500: var(--blue);--color-primary-600: var(--blue);--color-primary-700: var(--blue);--color-primary-800: var(--ink);--color-neutral-0: var(--white);--color-neutral-50: var(--surface);--color-neutral-100: var(--ink-6);--color-neutral-200: var(--ink-10);--color-neutral-300: rgba(15, 17, 23, .15);--color-neutral-400: var(--ink-55);--color-neutral-500: var(--ink-55);--color-neutral-600: rgba(15, 17, 23, .7);--color-neutral-700: rgba(15, 17, 23, .85);--color-neutral-800: var(--ink);--color-neutral-900: var(--ink);--color-success-50: var(--green-bg);--color-success-100: var(--green-bg);--color-success-500: var(--green);--color-success-600: var(--green);--color-success-700: var(--green);--color-warning-50: var(--amber-bg);--color-warning-100: var(--amber-bg);--color-warning-500: var(--amber);--color-warning-600: var(--amber);--color-danger-50: var(--red-bg);--color-danger-100: var(--red-bg);--color-danger-500: var(--red);--color-danger-600: var(--red);--color-ai-50: var(--blue-bg);--color-ai-100: var(--blue-bg);--color-ai-200: var(--blue-mid);--color-ai-500: var(--blue);--color-ai-600: var(--blue);--color-ai-700: var(--blue);--surface-page: var(--surface);--surface-card: var(--white);--surface-1: var(--white);--surface-2: var(--surface);--surface-secondary: var(--surface);--surface-base: var(--white);--border-base: var(--ink-10);--border-strong: rgba(15, 17, 23, .15);--border-light: var(--ink-10);--border-focus: var(--blue);--text-primary: var(--ink);--text-secondary: var(--ink-55);--text-tertiary: var(--ink-55);--text-placeholder: var(--ink-55);--text-inverse: var(--white);--text-link: var(--blue);--text-link-hover: var(--blue);--shadow-xs: 0 1px 2px rgba(15, 17, 23, .04);--shadow-sm: var(--shadow-card-hover);--shadow-md: var(--shadow-card-hover);--shadow-lg: var(--shadow-dropdown);--shadow-xl: var(--shadow-modal);--font-sans: var(--sans);--text-xs: 15px;--text-sm: 17px;--text-base: 19px;--text-lg: 22px;--text-xl: 26px;--text-2xl: 30px;--text-3xl: 34px;--font-normal: 400;--font-medium: 500;--font-semibold: 500;--font-bold: 700;--leading-normal: 1.5;--leading-relaxed: 1.65;--leading-loose: 1.75;--tracking-wide: .025em;--tracking-wider: .1em;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-7: 28px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--space-20: 80px;--radius-sm: 4px;--radius-base: 8px;--radius-md: 8px;--radius-lg: var(--r-lg);--radius-xl: var(--r-xl);--radius-full: 9999px;--primary-100: var(--blue-bg);--primary-300: var(--blue-mid);--primary-600: var(--blue);--amber-100: var(--amber-bg);--amber-700: var(--amber);--red-500: var(--red);--red-600: var(--red)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-text-size-adjust:100%}body{font-family:var(--sans);font-size:var(--text-base);font-weight:400;line-height:1.75;color:var(--ink);background:var(--surface);min-height:100vh;color-scheme:light;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--blue);text-decoration:none}a:hover{opacity:.88}button,input,select,textarea{font-family:inherit;font-size:inherit}h1,h2,h3,h4{font-family:var(--serif);font-weight:700;line-height:1.2;color:var(--ink)}h1{font-size:30px;font-weight:900}h2{font-size:20px}h3{font-size:15px;font-weight:500}.btn-primary{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;background:var(--ink);color:var(--white);font-family:var(--sans);font-size:var(--text-xs);font-weight:500;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s;text-decoration:none;line-height:1;-webkit-user-select:none;user-select:none;white-space:nowrap}.btn-primary:hover:not(:disabled){opacity:.88}.btn-primary:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.btn-primary-lg{padding:12px 26px;font-size:15px}.btn-blue{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;background:var(--blue);color:var(--white);font-family:var(--sans);font-size:var(--text-xs);font-weight:500;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s;text-decoration:none;line-height:1;-webkit-user-select:none;user-select:none;white-space:nowrap}.btn-blue:hover:not(:disabled){opacity:.88}.btn-blue:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;background:transparent;color:var(--ink);font-family:var(--sans);font-size:var(--text-xs);font-weight:500;border:.5px solid var(--ink-10);border-radius:8px;cursor:pointer;transition:opacity .15s;text-decoration:none;line-height:1;white-space:nowrap}.btn-secondary:hover:not(:disabled){opacity:.88}.btn-secondary:disabled{opacity:.4;cursor:not-allowed}.btn-ghost{display:inline-flex;align-items:center;gap:4px;padding:10px 20px;background:var(--blue-bg);color:var(--blue);font-family:var(--sans);font-size:var(--text-xs);font-weight:500;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s;white-space:nowrap}.btn-ghost:hover:not(:disabled){opacity:.88}.btn-danger{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;background:var(--red-bg);color:var(--red);font-family:var(--sans);font-size:var(--text-xs);font-weight:500;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s}.btn-danger:hover:not(:disabled){opacity:.88}.btn-outline{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;background:var(--white);color:var(--ink);font-family:var(--sans);font-size:var(--text-sm);font-weight:500;border:.5px solid var(--ink-10);border-radius:8px;cursor:pointer;transition:opacity .15s}.btn-outline:hover:not(:disabled){background:var(--surface)}.btn-outline:disabled{opacity:.4;cursor:not-allowed}.btn-warning{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;background:var(--amber-bg);color:var(--amber);font-family:var(--sans);font-size:var(--text-sm);font-weight:500;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s}.btn-warning:hover:not(:disabled){opacity:.88}.btn-back{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;background:transparent;color:var(--ink-55);font-family:var(--sans);font-size:var(--text-xs);font-weight:500;border:none;border-radius:8px;cursor:pointer;transition:color .15s,background .15s;margin-bottom:16px}.btn-back:hover{color:var(--ink);background:var(--ink-6)}.btn-google{display:inline-flex;align-items:center;justify-content:center;gap:12px;width:100%;padding:12px 24px;background:var(--white);color:var(--ink);font-family:var(--sans);font-weight:500;font-size:15px;border:.5px solid var(--ink-10);border-radius:8px;cursor:pointer;text-decoration:none;transition:opacity .15s,box-shadow .15s}.btn-google:hover{box-shadow:var(--shadow-card-hover);color:var(--ink)}.btn-sm{padding:6px 13px!important;font-size:12px!important}.role-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:24px}.btn-role{padding:24px 16px;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);cursor:pointer;text-align:center;transition:border-color .15s,box-shadow .15s}.btn-role:hover:not(:disabled){border-color:var(--blue);box-shadow:var(--shadow-card-hover)}.btn-role:disabled{opacity:.4;cursor:not-allowed}.btn-role-icon{font-size:2.5rem;margin-bottom:8px;display:block}.btn-role-label{font-family:var(--serif);font-size:20px;font-weight:700;color:var(--ink);display:block;margin-bottom:4px}.btn-role-desc{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55)}.card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:18px 20px;transition:border-color .15s,box-shadow .15s}.card-sm{border-radius:var(--r);padding:16px}.card-hover{cursor:pointer;transition:border-color .15s,box-shadow .15s}.card-hover:hover{border-color:#0f11172e;box-shadow:var(--shadow-card-hover)}.badge{display:inline-block;font-family:var(--sans);font-size:var(--text-xs);font-weight:500;padding:4px 12px;border-radius:20px;white-space:nowrap}.badge-purple{background:var(--blue-bg);color:var(--blue)}.badge-gray,.badge-outline{background:transparent;border:.5px solid var(--ink-10);color:var(--ink-55)}.badge-ink{background:var(--ink);color:var(--white)}.form-group{display:flex;flex-direction:column;gap:4px}.form-label{font-family:var(--sans);font-size:var(--text-xs);font-weight:500;color:var(--ink)}.input,.textarea,.select{font-family:var(--sans);font-size:var(--text-sm);font-weight:400;padding:9px 13px;color:var(--ink);background:var(--white);border:.5px solid rgba(15,17,23,.2);border-radius:8px;transition:border-color .15s,box-shadow .15s;outline:none;width:100%}.input:hover,.textarea:hover,.select:hover{border-color:#0f11174d}.input:focus,.textarea:focus,.select:focus{border:1.5px solid var(--blue);box-shadow:0 0 0 3px var(--blue-bg)}.input.error{border:1.5px solid var(--red);box-shadow:0 0 0 3px var(--red-bg)}.input:disabled,.textarea:disabled,.select:disabled{opacity:.4;cursor:not-allowed}.input::placeholder,.textarea::placeholder{color:var(--ink-55)}select.input{-moz-appearance:none;appearance:none;-webkit-appearance:none;padding-right:32px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%230F1117' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;cursor:pointer}.textarea{resize:vertical;min-height:80px;line-height:1.65}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%230F1117' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px;cursor:pointer}.form-hint{font-size:13px;color:var(--ink-55)}.form-error{font-size:13px;color:var(--red)}.app-sidebar{position:fixed;top:0;left:0;bottom:0;width:220px;background:var(--white);border-right:.5px solid var(--ink-10);display:flex;flex-direction:column;z-index:100;padding:var(--space-4) 0;transition:width .2s ease;overflow:hidden}.app-sidebar.collapsed{width:64px}.app-sidebar-brand{display:flex;align-items:center;padding:var(--space-2) var(--space-5);margin-bottom:var(--space-4);min-height:32px}.app-sidebar.collapsed .app-sidebar-brand{justify-content:center;padding:var(--space-2) 0}.app-sidebar-logo{height:36px;width:auto;transition:opacity .15s}.app-sidebar.collapsed .app-sidebar-logo{display:none}.app-sidebar-logo-icon{height:32px;width:32px;display:none}.app-sidebar.collapsed .app-sidebar-logo-icon{display:block}.app-sidebar-nav{flex:1;display:flex;flex-direction:column;gap:2px;padding:0 var(--space-3)}.app-sidebar.collapsed .app-sidebar-nav{padding:0 8px}.app-sidebar-link{font-family:var(--sans);font-size:var(--text-sm);font-weight:500;color:var(--ink-55);text-decoration:none;padding:10px 12px;border-radius:8px;display:flex;align-items:center;gap:10px;transition:color .15s,background .15s;white-space:nowrap;overflow:hidden}.app-sidebar.collapsed .app-sidebar-link{justify-content:center;padding:10px}.app-sidebar.collapsed .app-sidebar-link span{display:none}.app-sidebar-link:hover{color:var(--ink);background:var(--ink-6)}.app-sidebar-link.active{color:var(--blue);background:var(--blue-bg);font-weight:600}.app-sidebar-bottom{padding:var(--space-3) var(--space-4);border-top:.5px solid var(--ink-10);display:flex;flex-direction:column;gap:var(--space-2);align-items:stretch}.app-sidebar.collapsed .app-sidebar-bottom{padding:var(--space-3) 8px;align-items:center}.app-sidebar-user{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);font-weight:500;text-align:center}.app-sidebar.collapsed .app-sidebar-user,.app-sidebar.collapsed .app-sidebar-bottom .btn-ghost{display:none}.app-sidebar-toggle{background:none;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 12px;border-radius:8px;color:var(--ink-55);font-family:var(--sans);font-size:var(--text-xs);transition:color .15s,background .15s;width:100%}.app-sidebar-toggle:hover{background:var(--ink-6);color:var(--ink)}.app-sidebar.collapsed .app-sidebar-toggle{padding:8px}.app-sidebar-toggle-label{white-space:nowrap}.app-sidebar.collapsed .app-sidebar-toggle-label{display:none}.page-main{margin-left:220px;flex:1;min-height:100vh;transition:margin-left .2s ease}.app-sidebar.collapsed~.page-main{margin-left:64px}.page-top-actions{position:fixed;top:16px;right:24px;z-index:200;display:flex;align-items:center;gap:var(--space-2)}.topbar{position:sticky;top:0;z-index:100;height:56px;background:var(--white);border-bottom:.5px solid var(--ink-10);display:flex;align-items:center;justify-content:space-between;padding:0 28px}.topbar.topbar-mobile-only{display:none}.topbar-brand{display:flex;align-items:center;gap:8px}.topbar-logo{height:32px;width:auto;flex-shrink:0;border-radius:4px}.topbar-right{display:flex;align-items:center;gap:var(--space-3)}.topbar-user{font-size:var(--text-sm);color:var(--text-secondary)}.dashboard-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.dashboard-widget{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);cursor:grab;transition:box-shadow .15s,opacity .15s;-webkit-user-select:none;user-select:none;overflow:hidden}.dashboard-widget.full{grid-column:1 / -1}.dashboard-widget:hover{box-shadow:var(--shadow-card-hover)}.dashboard-widget.dragging{opacity:.4}.dashboard-widget.drop-target{border:1.5px dashed var(--blue-mid);background:var(--blue-bg)}.dashboard-widget-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:.5px solid var(--ink-10)}.dashboard-widget-title{font-family:var(--sans);font-size:var(--text-xs);font-weight:500;color:var(--ink)}.dashboard-widget-close{background:none;border:none;cursor:pointer;color:var(--ink-55);font-size:var(--text-xs);padding:2px 6px;border-radius:4px;opacity:0;transition:opacity .15s,background .15s,color .15s}.dashboard-widget:hover .dashboard-widget-close{opacity:1}.dashboard-widget-close:hover{background:var(--red-bg);color:var(--red)}.dashboard-widget-body{padding:16px}.summary-cards-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}.summary-card{display:flex;flex-direction:column;align-items:center;padding:16px 12px;border-radius:var(--r);background:var(--surface);transition:transform .12s}.summary-card:hover{transform:translateY(-2px)}.summary-card-icon{width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:15px;margin-bottom:8px}.summary-card-value{font-family:var(--serif);font-size:32px;font-weight:900;color:var(--ink);line-height:1}.summary-card-label{font-family:var(--sans);font-size:13px;color:var(--ink-55);margin-top:4px}.activity-overview{display:flex;flex-direction:column;gap:12px}.activity-row{display:flex;align-items:center;gap:12px}.activity-row-left{display:flex;align-items:center;gap:8px;min-width:100px;flex-shrink:0}.activity-row-icon{width:28px;height:28px;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:var(--text-xs)}.activity-row-label{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink);font-weight:500}.activity-row-bar-wrap{flex:1;height:4px;background:var(--ink-10);border-radius:2px;overflow:hidden}.activity-row-bar{height:100%;border-radius:2px;transition:width .5s ease}.activity-row-value{font-family:var(--sans);font-size:var(--text-xs);font-weight:500;color:var(--ink);min-width:50px;text-align:right}.sidebar{width:220px;flex-shrink:0;background:var(--white);border-right:.5px solid var(--ink-10);padding:16px 12px;max-height:calc(100vh - 72px);overflow-y:auto;position:sticky;top:72px}.sidebar-title{font-family:var(--sans);font-size:13px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-55);padding:14px 18px 6px;margin-bottom:8px}.sidebar-item{display:flex;align-items:center;gap:9px;width:100%;padding:8px 12px;margin:0 6px 4px;border-radius:8px;cursor:pointer;font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);border:none;border-left:2px solid transparent;background:transparent;text-align:left;transition:background .12s,color .12s}.sidebar-item:hover{background:var(--ink-6);color:var(--ink)}.sidebar-item.is-active{background:var(--blue-bg);color:var(--blue);font-weight:500;border-left-color:var(--blue)}.sidebar-item-meta{font-size:13px;color:var(--ink-55);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-compact{width:130px;flex-shrink:0;display:flex;flex-direction:column;gap:4px;position:sticky;top:72px;max-height:calc(100vh - 88px);overflow-y:auto}.tabs{display:flex;border-bottom:.5px solid var(--ink-10);gap:4px;margin-bottom:20px}.tab-btn{padding:8px 16px;background:transparent;border:none;border-bottom:2px solid transparent;margin-bottom:-.5px;font-family:var(--sans);font-size:var(--text-xs);font-weight:500;color:var(--ink-55);cursor:pointer;transition:color .15s,border-color .15s;border-radius:8px 8px 0 0}.tab-btn:hover{color:var(--ink)}.tab-btn.is-active{color:var(--blue);border-bottom-color:var(--blue)}.table{width:100%;border-collapse:collapse;font-family:var(--sans);font-size:var(--text-sm)}.table th{text-align:left;padding:12px 16px;border-bottom:.5px solid var(--ink-10);font-size:var(--text-xs);font-weight:500;color:var(--ink-55);text-transform:uppercase;letter-spacing:.1em;white-space:nowrap}.table td{padding:14px 16px;border-bottom:.5px solid var(--ink-10);color:var(--ink);vertical-align:middle}.table tbody tr:last-child td{border-bottom:none}.table tbody tr:hover td{background:var(--surface)}.table tbody tr.clickable-row{cursor:pointer}.pagination{display:flex;justify-content:center;align-items:center;gap:8px;margin-top:var(--space-4);font-family:var(--sans);font-size:var(--text-sm)}.pagination-btn{background:var(--white);border:.5px solid var(--ink-10);border-radius:8px;padding:6px 14px;font-size:var(--text-xs);font-family:var(--sans);color:var(--ink);cursor:pointer;transition:border-color .15s}.pagination-btn:hover:not(:disabled){border-color:var(--blue);color:var(--blue)}.pagination-btn:disabled{opacity:.35;cursor:not-allowed}.pagination-info{color:var(--ink-55);font-size:var(--text-xs);min-width:60px;text-align:center}.card-list{display:flex;flex-direction:column;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);overflow:hidden}.card-list-item{padding:var(--space-3) var(--space-4);font-family:var(--sans);font-size:var(--text-sm);border-bottom:.5px solid var(--ink-10)}.card-list-item:last-child{border-bottom:none}.card-list-item:hover{background:var(--surface)}.toggle{width:44px;height:24px;border-radius:12px;border:none;cursor:pointer;position:relative;transition:background .2s;flex-shrink:0}.toggle.on{background:var(--green)}.toggle.off{background:var(--ink-10)}.toggle-knob{width:18px;height:18px;border-radius:50%;background:var(--white);position:absolute;top:3px;transition:left .2s}.toggle.on .toggle-knob{left:23px}.toggle.off .toggle-knob{left:3px}.filter-bar{display:flex;align-items:center;gap:12px;padding:12px 0;margin-bottom:12px;border-bottom:.5px solid var(--ink-10);flex-wrap:wrap}.filter-bar-item{min-width:0}.filter-bar-item .input,.filter-bar-item .select{font-size:var(--text-xs);padding:6px 8px;height:34px}.editable-cell{cursor:pointer;border-bottom:1px dashed transparent;transition:border-color .15s}.editable-cell:hover{border-bottom-color:var(--blue)}.inline-edit-input,.inline-edit-select{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink);border:1.5px solid var(--blue);border-radius:8px;padding:4px 8px;outline:none;background:var(--white);width:100%;max-width:200px;transition:box-shadow .15s}.inline-edit-input:focus,.inline-edit-select:focus{box-shadow:0 0 0 3px var(--blue-bg)}.inline-edit-select{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%230F1117' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;padding-right:24px;cursor:pointer;max-width:120px}.alert{display:flex;gap:12px;padding:12px 16px;border-radius:var(--r);font-family:var(--sans);font-size:var(--text-xs);border:.5px solid transparent;line-height:1.65}.alert-info{background:var(--blue-bg);border-color:var(--blue-mid);color:var(--blue)}.alert-success{background:var(--green-bg);color:var(--green)}.alert-warning{background:var(--amber-bg);color:var(--amber)}.alert-danger{background:var(--red-bg);color:var(--red)}.alert-ai{background:var(--blue-bg);border-color:var(--blue-mid);color:var(--blue)}.ai-block{background:var(--blue-bg);border:.5px solid var(--blue-mid);border-left:3px solid var(--blue);border-radius:0 var(--r) var(--r) 0;padding:20px;margin-top:16px}.ai-block-label{display:flex;align-items:center;gap:8px;font-family:var(--sans);font-size:13px;font-weight:500;color:var(--blue);text-transform:uppercase;letter-spacing:.1em;margin-bottom:12px}.ai-cursor{animation:blink 1s step-end infinite;color:var(--blue)}@keyframes blink{0%,to{opacity:.7}50%{opacity:0}}.streaming-indicator{display:flex;align-items:center;gap:8px;color:var(--blue);font-family:var(--sans);font-size:var(--text-xs);padding:12px 0}.streaming-indicator-dots span{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--blue);margin:0 2px;animation:bounce-dot 1.2s infinite ease-in-out}.streaming-indicator-dots span:nth-child(2){animation-delay:.2s}.streaming-indicator-dots span:nth-child(3){animation-delay:.4s}@keyframes bounce-dot{0%,80%,to{transform:scale(.6);opacity:.5}40%{transform:scale(1);opacity:1}}.inline-form{background:var(--surface);border:.5px solid var(--ink-10);border-radius:var(--r);padding:16px;margin-bottom:16px;display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;animation:slide-down .15s ease}@keyframes slide-down{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@keyframes toast-in{0%{opacity:0;transform:translate(-50%) translateY(12px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.invite-box{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 16px;background:var(--blue-bg);border:.5px solid var(--blue-mid);border-radius:var(--r);font-family:var(--sans);font-size:var(--text-xs);margin-bottom:16px;color:var(--blue)}.invite-code{font-family:var(--font-mono);font-size:14px;font-weight:700;color:var(--blue);background:var(--white);border:.5px solid var(--blue-mid);border-radius:8px;padding:4px 12px;letter-spacing:.05em}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f111766;z-index:2000;display:flex;align-items:center;justify-content:center;padding:16px}.modal-card{background:var(--white);border-radius:var(--r-xl);box-shadow:var(--shadow-modal);width:100%;max-width:460px;max-height:85vh;display:flex;flex-direction:column}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:.5px solid var(--ink-10)}.modal-title{font-family:var(--serif);font-size:20px;font-weight:700;color:var(--ink)}.modal-close{background:none;border:none;cursor:pointer;font-size:20px;color:var(--ink-55);line-height:1;padding:0}.modal-close:hover{color:var(--ink)}.modal-body{padding:20px;overflow-y:auto}.modal-footer{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;border-top:.5px solid var(--ink-10)}.invite-code-display{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--surface);border:.5px dashed var(--blue-mid);border-radius:var(--r);padding:12px 16px}.invite-code-display code{font-family:var(--font-mono);font-size:var(--text-xs);font-weight:500;color:var(--blue);letter-spacing:.05em;word-break:break-all}.class-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px}.class-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:20px;display:flex;flex-direction:column;gap:16px;transition:box-shadow .15s}.class-card:hover{box-shadow:var(--shadow-card-hover)}.class-card-header{display:flex;justify-content:space-between;align-items:baseline}.class-card-name{font-family:var(--serif);font-size:var(--text-xl);font-weight:700;color:var(--ink)}.class-card-count{font-family:var(--sans);font-size:var(--text-sm);color:var(--ink-55);white-space:nowrap}.class-card-units{display:flex;flex-wrap:wrap;gap:4px;min-height:24px}.class-card-actions{display:flex;gap:8px;border-top:.5px solid var(--ink-10);padding-top:12px}.class-card-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:4px;background:none;border:.5px solid var(--ink-10);border-radius:8px;padding:8px;font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);cursor:pointer;transition:background .15s,color .15s}.class-card-btn:hover{background:var(--ink-6);color:var(--ink)}.class-card-btn-icon{font-size:var(--text-xs)}.assign-unit-list{display:flex;flex-direction:column;gap:8px;max-height:360px;overflow-y:auto}.assign-unit-item{display:flex;align-items:center;gap:12px;padding:8px 12px;border:.5px solid var(--ink-10);border-radius:8px;cursor:pointer;transition:background .1s,border-color .1s}.assign-unit-item:hover{background:var(--surface)}.assign-unit-item.is-selected{background:var(--blue-bg);border-color:var(--blue-mid)}.assign-unit-item input[type=checkbox]{accent-color:var(--blue);width:16px;height:16px;flex-shrink:0}.member-row{display:flex;align-items:center;gap:12px;padding:8px 12px;border:.5px solid var(--ink-10);border-radius:8px}.score-display{font-family:var(--serif);font-size:30px;font-weight:900;margin-bottom:8px}.score-high{color:var(--green)}.score-medium{color:var(--amber)}.score-low{color:var(--red)}.page-shell{display:flex;min-height:100vh;background:var(--surface)}.page-content{flex:1;padding:48px 40px;width:100%;box-sizing:border-box}.page-content-narrow{max-width:760px}.section-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}@media (max-width: 1023px){.section-grid{grid-template-columns:1fr}}.editor-layout{display:flex;gap:20px;align-items:flex-start}.editor-layout-3col{display:grid;grid-template-columns:220px 1fr 1fr;height:calc(100vh - 56px);overflow:hidden}.selection-menu{position:fixed;z-index:1000;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r);box-shadow:var(--shadow-dropdown);padding:8px;display:flex;flex-direction:column;gap:4px;min-width:140px;transform:translate(-50%) translateY(calc(-100% - 6px))}.selection-menu-word{font-family:var(--sans);font-size:13px;color:var(--ink-55);padding:0 8px;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.selection-menu-btn{background:none;border:none;padding:8px 12px;border-radius:8px;cursor:pointer;font-family:var(--sans);font-size:var(--text-xs);text-align:left;color:var(--ink)}.selection-menu-btn:hover{background:var(--ink-6)}.word-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f111766;z-index:2000;display:flex;align-items:center;justify-content:center;padding:16px}.word-modal{background:var(--white);border-radius:var(--r-xl);box-shadow:var(--shadow-modal);width:100%;max-width:560px;max-height:90vh;overflow-y:auto;display:flex;flex-direction:column}.word-modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:.5px solid var(--ink-10)}.word-modal-body{padding:24px;display:flex;flex-direction:column;gap:16px}.word-modal-footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:.5px solid var(--ink-10)}.editor-main{flex:1;min-width:0}.lesson-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:20px}.empty-state{display:flex;flex-direction:column;align-items:center;padding:48px 32px;color:var(--ink-55);text-align:center;gap:12px}.empty-state-icon{opacity:.45;line-height:0}.empty-state-title{font-family:var(--sans);font-size:15px;font-weight:500;color:var(--ink)}.empty-state-desc{font-family:var(--sans);font-size:var(--text-xs)}.page-login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--surface);padding:16px}.card-login{max-width:440px;width:100%;padding:48px 40px;text-align:center;background:var(--white);border-radius:var(--r-xl);border:.5px solid var(--ink-10);box-shadow:var(--shadow-modal)}.login-logo{display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:24px}.login-dot{width:10px;height:10px;background:var(--blue);border-radius:50%}.login-title{font-family:var(--serif);font-size:24px;font-weight:900;color:var(--ink);margin-bottom:8px}.login-divider{border:none;border-top:.5px solid var(--ink-10);margin:24px 0}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.section-title{font-family:var(--serif);font-size:20px;font-weight:700;color:var(--ink)}.join-class-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:16px 20px;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);margin-bottom:32px}.join-class-bar-label{font-family:var(--sans);font-size:var(--text-xs);font-weight:500;color:var(--ink);white-space:nowrap}.markdown-view h2{font-family:var(--serif);font-size:1.5em;font-weight:700;margin:1.2em 0 .5em;color:var(--ink)}.markdown-view h3{font-family:var(--serif);font-size:1.25em;font-weight:700;margin:1em 0 .3em;color:var(--ink)}.markdown-view p{font-family:var(--sans);font-size:1em;line-height:1.75;margin-bottom:.5em;color:var(--ink)}.markdown-view ul,.markdown-view ol{padding-left:1.5em;margin:.5em 0}.markdown-view li{font-size:1em;line-height:1.75;margin-bottom:.25em}.markdown-view strong{font-weight:700}.markdown-view em{font-style:italic}.markdown-view table{border-collapse:collapse;width:100%;font-size:.85em;margin:.75em 0}.markdown-view th,.markdown-view td{border:.5px solid var(--ink-10);padding:.5em .75em;text-align:left}.markdown-view th{background:var(--surface);font-weight:500}.markdown-view hr{border:none;border-top:.5px solid var(--ink-10);margin:16px 0}.markdown-view blockquote{border-left:2px solid var(--blue-mid);margin:12px 0;padding:8px 16px;background:var(--surface);color:var(--ink-55);font-style:italic}.reading-bottom-card{position:fixed;bottom:env(safe-area-inset-bottom,0px);left:0;right:0;z-index:10;max-height:50dvh;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;touch-action:pan-y;background:var(--white);border-top:1px solid var(--ink-10);box-shadow:0 -4px 24px #0000001a;border-radius:var(--r-lg) var(--r-lg) 0 0;padding:4px 0;animation:slide-up-card .2s ease-out}.reading-bottom-card .grammar-inline-card{border:none;margin:0}@keyframes slide-up-card{0%{transform:translateY(40px);opacity:0}to{transform:translateY(0);opacity:1}}@media (min-width: 860px){.reading-bottom-card{position:fixed;bottom:auto;top:var(--card-top, 80px);right:16px;left:auto;width:340px;max-height:calc(100vh - var(--card-top, 80px) - 20px);border-radius:var(--r-lg);border-top:none;border:1px solid var(--ink-10);box-shadow:0 8px 32px #0000001f;animation:slide-in-right .2s ease-out}}@keyframes slide-in-right{0%{transform:translate(40px);opacity:0}to{transform:translate(0);opacity:1}}.reading-body{font-family:var(--sans);font-size:var(--text-lg, 20px);line-height:2;color:var(--ink);margin-bottom:32px;white-space:pre-wrap}.reading-body img,.rich-body img{max-width:100%;max-height:85vh;width:auto;height:auto;object-fit:contain;border-radius:var(--r)}.reading-layout{max-width:720px;margin:0 auto;padding:32px 24px 64px}.reading-aside{display:none}.explanation-mobile{display:block}@media (min-width: 1200px){.reading-layout.has-explanation{max-width:1380px;display:flex;gap:48px;align-items:flex-start}.reading-layout.has-explanation .reading-main{flex:1;min-width:0}.reading-aside{display:block;width:360px;flex-shrink:0;position:sticky;top:32px;max-height:calc(100vh - 140px);overflow-y:auto;padding-bottom:32px}.explanation-mobile{display:none}}.vocab-word{cursor:pointer;border-radius:3px;padding:0 2px;transition:background .12s}.vocab-keyword{border-bottom:1.5px dashed var(--green);background:var(--green-bg);border-radius:3px}.vocab-keyword:hover,.vocab-keyword.active{background:#16a34a29}.vocab-phrase{border-bottom:1.5px dashed var(--amber);background:var(--amber-bg);border-radius:3px}.vocab-phrase:hover,.vocab-phrase.active{background:#b4530929}.vocab-grammar{background:var(--blue-bg);border-radius:3px;padding:0 2px;cursor:pointer}.vocab-grammar:hover,.vocab-grammar.active{background:var(--blue-mid)}.vocab-keyword:focus-visible,.vocab-phrase:focus-visible,.vocab-grammar:focus-visible,.topbar button:focus-visible,.icon-btn:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.grammar-inline-card{display:block;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:var(--space-3) var(--space-4);margin:var(--space-1) 0 var(--space-2)}.vocab-legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:20px;font-family:var(--sans);font-size:13px;color:var(--ink-55)}.vocab-legend-item{display:flex;align-items:center;gap:5px}.vocab-legend-dot{display:inline-block;width:30px;height:14px;border:1.5px dashed;border-radius:5px;background:transparent;flex-shrink:0;vertical-align:middle}.word-popup{position:fixed;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:14px 16px;max-width:300px;z-index:999;font-family:var(--sans);font-size:var(--text-xs);line-height:1.65;box-shadow:var(--shadow-dropdown)}.popup-word{font-family:var(--serif);font-size:18px;font-weight:700;margin-bottom:2px;color:var(--ink)}.popup-phonetic{color:var(--ink-55);font-size:13px;margin-bottom:6px;font-family:monospace}.popup-zh{font-size:14px;color:var(--green);margin-bottom:4px;font-weight:500}.popup-pos{font-size:13px;color:var(--ink-55);background:var(--surface);padding:1px 7px;border-radius:20px;display:inline-block;margin-bottom:6px}.popup-example{font-size:13px;color:var(--ink-55);font-style:italic;border-left:2px solid var(--blue-mid);padding-left:8px;line-height:1.6;margin-top:4px}.vocab-tooltip{position:fixed;background:var(--ink);color:var(--white);border-radius:var(--r);padding:12px 16px;max-width:300px;z-index:1000;font-family:var(--sans);font-size:var(--text-xs);line-height:1.65;box-shadow:var(--shadow-modal);pointer-events:none}.vocab-tooltip-word{font-weight:700;font-size:14px;margin-bottom:4px}.vocab-tooltip-pos{opacity:.65;font-weight:400;font-size:var(--text-xs)}.vocab-tooltip-def{margin-bottom:4px;opacity:.9}.vocab-tooltip-ex{font-style:italic;opacity:.7;font-size:13px}.vocab-tooltip-etymology{margin-top:4px;opacity:.75;font-size:13px;color:var(--green)}@keyframes sense-peek{0%{transform:translate(0)}30%{transform:translate(-28px)}50%{transform:translate(-28px)}to{transform:translate(0)}}.grammar-tag{font-family:var(--sans);font-size:13px;padding:2px 9px;border-radius:20px;font-weight:500;white-space:nowrap;flex-shrink:0}.grammar-tag-struct{background:var(--amber-bg);color:var(--amber)}.grammar-tag-phrase{background:var(--blue-bg);color:var(--blue)}.grammar-tag-conj{background:var(--green-bg);color:var(--green)}.grammar-tag-tense,.grammar-tag-contrast{background:var(--red-bg);color:var(--red)}.note-card{background:var(--white);border:.5px solid var(--ink-10);border-left:3px solid var(--green);border-radius:var(--r);padding:var(--space-3) var(--space-4);margin-bottom:var(--space-2);transition:border-left-color .15s,box-shadow .15s}.note-card:hover{box-shadow:var(--shadow-card-hover)}.note-word{font-family:var(--sans);font-size:var(--text-base);font-weight:700;color:var(--ink)}.note-phonetic{font-size:13px;color:var(--ink-55);font-family:monospace;margin-left:4px}.note-zh{font-size:var(--text-sm);color:var(--green);font-weight:500}.note-pos{font-size:12px;color:var(--ink-55);background:var(--ink-6);padding:2px 8px;border-radius:20px;font-weight:500}.note-sentence{font-size:var(--text-xs);color:var(--ink-55);font-style:italic;line-height:1.65;margin-top:var(--space-1)}.note-count{font-size:13px;color:var(--ink-55);margin-bottom:var(--space-3)}.grammar-example-box{background:var(--surface);border-radius:var(--r);padding:10px 14px;margin-top:10px}.grammar-example-en{font-size:var(--text-xs);line-height:1.65;color:var(--ink)}.grammar-example-zh{font-size:13px;color:var(--ink-55);margin-top:4px;font-style:italic}.grammar-hl{color:var(--green);font-weight:500}.quiz-opt{background:var(--white);border:.5px solid var(--ink-10);border-radius:8px;padding:10px 14px;font-family:var(--sans);font-size:var(--text-xs);cursor:pointer;text-align:left;transition:background .15s,border-color .15s;color:var(--ink);width:100%;line-height:1.5}.quiz-opt:hover:not(:disabled){background:var(--surface);border-color:#0f11172e}.quiz-opt.correct{background:var(--green-bg);border-color:var(--green);color:var(--green)}.quiz-opt.wrong{background:var(--red-bg);border-color:var(--red);color:var(--red)}.quiz-opt:disabled{cursor:default}.file-dropzone{border:1.5px dashed var(--ink-10);border-radius:var(--r-lg);padding:40px 24px;text-align:center;background:var(--surface);cursor:pointer;transition:border-color .15s,background .15s;display:block;margin-bottom:20px}.file-dropzone:hover{border-color:var(--blue);background:var(--blue-bg)}.file-dropzone input[type=file]{display:none}.file-dropzone-icon{font-size:2rem;margin-bottom:8px;opacity:.5;display:block}.file-dropzone-label{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55)}.file-dropzone-label strong{color:var(--blue)}.option-group{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.option-label{display:flex;align-items:flex-start;gap:12px;padding:8px 12px;border:.5px solid var(--ink-10);border-radius:8px;cursor:pointer;transition:border-color .12s,background .12s}.option-label:not(.is-disabled):hover{border-color:var(--blue-mid);background:var(--blue-bg)}.option-label.is-selected{border-color:var(--blue);background:var(--blue-bg)}.option-label.is-disabled{cursor:not-allowed;opacity:.4}.option-label input[type=radio]{display:none}.option-radio{width:18px;height:18px;min-width:18px;border:2px solid rgba(15,17,23,.15);border-radius:50%;margin-top:1px;transition:border-color .12s,background .12s;display:flex;align-items:center;justify-content:center}.option-label.is-selected .option-radio{border-color:var(--blue);background:var(--blue)}.option-label.is-selected .option-radio:after{content:"";width:6px;height:6px;background:#fff;border-radius:50%}.option-text{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink);line-height:1.65}.loading-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;color:var(--ink-55);font-family:var(--sans);font-size:14px}.loading-text{color:var(--ink-55);font-family:var(--sans);font-size:var(--text-xs);text-align:center;padding:32px}@media (max-width: 1023px){.editor-layout-3col{grid-template-columns:180px 1fr 1fr}.sidebar{width:180px}}@media (max-width: 767px){:root{--text-2xl: 24px;--text-xl: 20px}.topbar{padding:0 12px}.dashboard-grid{grid-template-columns:1fr}.summary-cards-row{grid-template-columns:repeat(3,1fr)}.page-content{padding:16px 12px}.card{padding:16px}.editor-layout-3col{grid-template-columns:1fr;grid-template-rows:auto 1fr auto;height:auto;min-height:calc(100vh - 56px);overflow:visible}.editor-layout-3col>.sidebar{grid-row:auto;width:100%;max-height:none;height:auto;position:static;display:flex;flex-direction:row;overflow-x:auto;overflow-y:hidden;padding:8px 12px;border:none;border-bottom:.5px solid var(--ink-10);border-radius:0;gap:4px}.editor-layout-3col>.sidebar .sidebar-title{display:none}.editor-layout-3col>.sidebar .sidebar-item{white-space:nowrap;flex-shrink:0;width:auto;margin-bottom:0;padding:4px 12px}.tabs{overflow-x:auto;flex-wrap:nowrap}.tab-btn{white-space:nowrap;flex-shrink:0}.btn-primary,.btn-secondary,.btn-ghost,.btn-danger{min-height:44px}.input,.textarea,.select{min-height:44px;font-size:16px}.word-modal-overlay{align-items:flex-end;padding:0}.word-modal{max-width:100%;width:100%;border-radius:var(--r-lg) var(--r-lg) 0 0;max-height:80vh}.lesson-grid{grid-template-columns:1fr;gap:12px}.section-grid{gap:12px}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.rte-wrapper{border:.5px solid var(--ink-10);border-radius:8px;overflow:hidden;background:var(--white);transition:border-color .15s,box-shadow .15s}.rte-wrapper:focus-within{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-bg)}.rte-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 8px;background:var(--surface);border-bottom:.5px solid var(--ink-10)}.rte-btn{padding:3px 8px;background:none;border:1px solid transparent;border-radius:4px;cursor:pointer;font-family:var(--sans);font-size:var(--text-xs);color:var(--ink);line-height:1.4;transition:background .1s}.rte-btn:hover{background:var(--blue-bg)}.rte-btn.active{background:var(--blue-bg);border-color:var(--blue-mid);color:var(--blue)}.rte-select{padding:3px 6px;font-family:var(--sans);font-size:var(--text-xs);border:.5px solid var(--ink-10);border-radius:4px;background:var(--white);color:var(--ink);cursor:pointer}.rte-divider{width:1px;height:20px;background:var(--ink-10);margin:0 4px;flex-shrink:0}.rte-content{padding:12px 16px;font-family:var(--sans);font-size:17px;line-height:1.8;color:var(--ink);outline:none}.rte-content .ProseMirror{outline:none;min-height:inherit}.rte-content .ProseMirror p{margin:0 0 .75em}.rte-content .ProseMirror h1{font-family:var(--serif);font-size:1.6em;font-weight:700;margin:.5em 0}.rte-content .ProseMirror h2{font-family:var(--serif);font-size:1.35em;font-weight:700;margin:.5em 0}.rte-content .ProseMirror h3{font-family:var(--serif);font-size:1.15em;font-weight:700;margin:.5em 0}.rte-content .ProseMirror ul,.rte-content .ProseMirror ol{padding-left:1.5em;margin:0 0 .75em}.rte-content .ProseMirror a{pointer-events:auto;cursor:text}.rte-content .ProseMirror p.is-editor-empty:before{content:attr(data-placeholder);float:left;color:var(--ink-55);pointer-events:none;height:0}.note-rte-content .ProseMirror{outline:none;min-height:50px}.note-rte-content .ProseMirror p{margin:0 0 .3em}.note-rte-content .ProseMirror p:last-child{margin-bottom:0}.rte-bubble{display:flex;align-items:center;gap:2px;background:var(--ink);border-radius:var(--r);padding:5px 8px;box-shadow:var(--shadow-dropdown);z-index:9999}.rte-bubble-btn{padding:3px 8px;background:none;border:1px solid transparent;border-radius:5px;cursor:pointer;font-family:var(--sans);font-size:var(--text-xs);color:#ffffffe6;line-height:1.4;transition:background .1s;white-space:nowrap}.rte-bubble-btn:hover{background:#ffffff1f}.rte-bubble-btn.active{background:#fff3;border-color:#ffffff40}.rte-bubble-sep{width:1px;height:18px;background:#ffffff26;margin:0 3px;flex-shrink:0}.rte-bubble-swatch{width:18px;height:18px;border-radius:50%;border:2px solid transparent;cursor:pointer;flex-shrink:0;transition:transform .1s,border-color .1s}.rte-bubble-swatch:hover{transform:scale(1.2)}.rte-bubble-swatch.active{border-color:#fff;transform:scale(1.15)}.rte-link-bubble{display:flex;align-items:center;gap:6px;background:var(--surface-primary, #fff);border:1px solid var(--border-base, #e2e2e2);border-radius:var(--radius-md, 8px);padding:4px 8px;box-shadow:0 4px 12px #0000001a;z-index:9999}.rte-link-input{border:1px solid var(--border-base, #ddd);border-radius:var(--radius-sm, 4px);padding:3px 8px;font-size:13px;min-width:200px;outline:none;color:var(--text-primary);background:var(--surface-primary, #fff)}.rte-link-input:focus{border-color:var(--color-primary-400, #7c3aed)}.rte-link-action{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;border-radius:var(--radius-sm, 4px);cursor:pointer;color:var(--text-secondary);flex-shrink:0}.rte-link-action:hover{background:var(--color-neutral-100, #f3f3f3);color:var(--text-primary)}.rte-link-remove:hover{color:var(--color-red-600, #dc2626)}.rte-toolbar-swatch{width:16px;height:16px;border-radius:50%;border:2px solid transparent;cursor:pointer;flex-shrink:0;transition:transform .1s,border-color .1s}.rte-toolbar-swatch:hover{transform:scale(1.2)}.rte-toolbar-swatch.active{border-color:var(--blue)}.rich-body{font-family:var(--sans);line-height:1.9;font-size:var(--text-lg, 20px)}.rich-body h1{font-family:var(--serif);font-size:1.5em;font-weight:700;margin:.6em 0 .3em}.rich-body h2{font-family:var(--serif);font-size:1.25em;font-weight:700;margin:.5em 0 .3em}.rich-body h3{font-family:var(--serif);font-size:1.1em;font-weight:700;margin:.4em 0 .2em}.rich-body p{margin:0 0 .75em}.rich-body ul,.rich-body ol{padding-left:1.5em;margin:0 0 .75em}.rich-body mark{border-radius:2px;padding:0 1px}.rich-body ruby rt{font-size:.8em;color:var(--ink-55);font-style:normal;font-weight:400;text-decoration:none}ruby{ruby-align:center}ruby rt{font-size:.85em;font-style:normal;font-weight:400;text-decoration:none}.hamburger-btn{display:none;background:none;border:none;cursor:pointer;padding:8px;margin-left:auto}.hamburger-icon{display:block;width:20px;height:2px;background:var(--ink);position:relative;transition:background .2s}.hamburger-icon:before,.hamburger-icon:after{content:"";position:absolute;left:0;width:100%;height:2px;background:var(--ink);transition:transform .2s}.hamburger-icon:before{top:-6px}.hamburger-icon:after{top:6px}.hamburger-icon.open{background:transparent}.hamburger-icon.open:before{top:0;transform:rotate(45deg)}.hamburger-icon.open:after{top:0;transform:rotate(-45deg)}.mobile-menu{position:fixed;top:56px;right:0;left:0;background:var(--white);border-bottom:.5px solid var(--ink-10);box-shadow:var(--shadow-dropdown);padding:8px;z-index:900;display:none}.mobile-menu-item{display:block;width:100%;padding:12px 16px;text-align:left;background:none;border:none;font-family:var(--sans);font-size:14px;color:var(--ink);cursor:pointer;border-radius:8px;transition:background .15s}.mobile-menu-item:hover{background:var(--ink-6)}.mobile-menu-item.active{color:var(--blue);background:var(--blue-bg);font-weight:500}.mobile-backdrop{display:none}@media (max-width: 768px){.app-sidebar{display:none!important}.topbar.topbar-mobile-only{display:flex!important}.page-shell{flex-direction:column}.page-main,.app-sidebar.collapsed~.page-main{margin-left:0!important}.hamburger-btn,.mobile-menu{display:block}.mobile-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#0f11174d;z-index:899}.page-top-actions{display:none}}.game-group-header{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:8px;border-bottom:.5px solid var(--ink-10)}.game-group-icon{font-size:20px}.game-group-label{font-family:var(--serif);font-size:15px;font-weight:700;color:var(--ink)}.game-group-count{font-family:var(--sans);font-size:13px;background:var(--ink-10);color:var(--ink-55);padding:0 8px;border-radius:10px;font-weight:500}.game-group-desc{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);margin-left:auto}.game-session-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}.game-session-card{cursor:pointer;transition:box-shadow .15s}.game-session-list{display:flex;flex-direction:column;gap:1px;background:var(--ink-06);border-radius:var(--r);overflow:hidden}.game-session-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:12px 16px;background:var(--white);cursor:pointer;transition:background .12s}.game-session-row:hover{background:var(--color-neutral-50)}.game-session-row-main{display:flex;flex-direction:column;gap:2px;min-width:0}.game-session-row-title{font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.game-session-row-meta{font-size:var(--text-xs);color:var(--text-tertiary)}.game-session-row-end{display:flex;align-items:center;gap:var(--space-2);flex-shrink:0}.game-session-row-delete{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;border-radius:var(--r-sm);cursor:pointer;color:var(--text-placeholder);opacity:0;transition:all .12s}.game-session-row:hover .game-session-row-delete{opacity:1}.game-session-row-delete:hover{background:var(--color-danger-50);color:var(--color-danger-500)}.game-session-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.game-session-icon{font-size:20px}.game-session-mode{font-family:var(--sans);font-weight:500;font-size:14px}.game-session-units{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);margin-bottom:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.game-session-meta{display:flex;gap:12px;font-family:var(--sans);font-size:13px;color:var(--ink-55)}.game-play-area{max-width:700px;margin:0 auto;padding-top:16px}.game-result-card{max-width:480px;margin:24px auto;text-align:center;padding:32px;background:var(--white);border-radius:var(--r-lg);border:.5px solid var(--ink-10)}.game-result-icon{font-size:48px;margin-bottom:12px}.game-result-title{font-family:var(--serif);font-size:24px;font-weight:900;margin-bottom:16px}.game-result-score{font-family:var(--serif);font-size:56px;font-weight:900;color:var(--blue);line-height:1;margin-bottom:16px}.game-result-score span{font-size:15px;color:var(--ink-55);font-weight:400}.game-result-details{display:flex;justify-content:center;gap:24px;font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);margin-bottom:16px}.game-result-details strong{display:block;font-size:15px;color:var(--ink)}.game-result-share{display:flex;align-items:center;justify-content:center;gap:8px;font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);margin-top:12px}.game-result-share code{background:var(--ink-6);padding:4px 8px;border-radius:4px;font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:2px;font-weight:500}.wizard-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f111766;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px}.wizard-card{position:relative;background:var(--white);border-radius:var(--r-xl);width:100%;max-width:560px;max-height:90vh;overflow-y:auto;padding:24px;box-shadow:var(--shadow-modal)}.wizard-steps{display:flex;justify-content:center;gap:24px;margin-bottom:24px}.wizard-step{display:flex;flex-direction:column;align-items:center;gap:4px;opacity:.4}.wizard-step.active{opacity:1}.wizard-step-dot{width:28px;height:28px;border-radius:50%;background:var(--ink-10);color:var(--ink-55);font-family:var(--sans);font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center}.wizard-step.active .wizard-step-dot{background:var(--blue);color:#fff}.wizard-step.done .wizard-step-dot{background:var(--green);color:#fff}.wizard-step-label{font-family:var(--sans);font-size:13px;color:var(--ink-55)}.wizard-body{margin-bottom:20px}.wizard-title{font-family:var(--serif);font-size:20px;font-weight:700;margin-bottom:16px}.wizard-label{display:block;font-family:var(--sans);font-size:var(--text-xs);font-weight:500;color:var(--ink-55);margin-bottom:8px}.wizard-option-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}.wizard-option{padding:16px;border:.5px solid var(--ink-10);border-radius:var(--r);background:var(--white);cursor:pointer;text-align:left;transition:all .15s}.wizard-option:hover{border-color:var(--blue-mid)}.wizard-option.selected{border-color:var(--blue);background:var(--blue-bg)}.wizard-option-title{font-family:var(--sans);font-weight:500;margin-bottom:4px}.wizard-option-desc{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55)}.wizard-option-row{display:flex;gap:8px;flex-wrap:wrap}.wizard-chip{padding:4px 12px;border-radius:20px;border:.5px solid var(--ink-10);background:var(--white);font-family:var(--sans);font-size:var(--text-xs);cursor:pointer;transition:all .15s}.wizard-chip:hover{border-color:var(--blue-mid)}.wizard-chip.selected{border-color:var(--blue);background:var(--blue-bg);color:var(--blue);font-weight:500}.wizard-unit-list{display:flex;flex-direction:column;gap:8px;max-height:240px;overflow-y:auto}.wizard-unit-item{display:flex;align-items:center;gap:12px;padding:8px 12px;border:.5px solid var(--ink-10);border-radius:8px;cursor:pointer;transition:all .15s}.wizard-unit-item:hover{border-color:var(--blue-mid)}.wizard-unit-item.selected{border-color:var(--blue);background:var(--blue-bg)}.wizard-unit-item input[type=checkbox]{accent-color:var(--blue)}.wizard-mode-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.wizard-mode-card{padding:16px;border:.5px solid var(--ink-10);border-radius:var(--r);background:var(--white);cursor:pointer;text-align:center;transition:all .15s;display:flex;flex-direction:column;align-items:center;gap:4px}.wizard-mode-card:hover{border-color:var(--blue-mid)}.wizard-mode-card.selected{border-color:var(--blue);background:var(--blue-bg)}.wizard-mode-icon{font-size:24px}.wizard-mode-label{font-family:var(--sans);font-weight:500;font-size:var(--text-xs)}.wizard-mode-desc{font-family:var(--sans);font-size:13px;color:var(--ink-55)}.wizard-footer{display:flex;justify-content:space-between;align-items:center;padding-top:16px;border-top:.5px solid var(--ink-10)}.tab-bar{display:flex;gap:4px;border-bottom:.5px solid var(--ink-10)}.tab-item{padding:8px 16px;font-family:var(--sans);font-size:var(--text-xs);font-weight:500;color:var(--ink-55);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:all .15s}.tab-item:hover{color:var(--ink)}.tab-item.active{color:var(--blue);border-bottom-color:var(--blue)}.view-toggle{display:inline-flex;border:.5px solid var(--ink-10);border-radius:8px;overflow:hidden}.view-toggle-btn{display:flex;align-items:center;justify-content:center;padding:6px 10px;font-family:var(--sans);font-size:var(--text-xs);background:var(--white);border:none;cursor:pointer;color:var(--ink-55);transition:all .15s}.view-toggle-btn:not(:last-child){border-right:.5px solid var(--ink-10)}.view-toggle-btn:hover{background:var(--ink-6)}.view-toggle-btn.active{background:var(--blue-bg);color:var(--blue);font-weight:500}@media (max-width: 640px){.game-session-grid{grid-template-columns:1fr}.wizard-mode-grid{grid-template-columns:1fr 1fr}.wizard-card{max-width:100%}}rt{white-space:nowrap}.notification-bell-btn{position:relative;background:none;border:none;cursor:pointer;padding:6px;border-radius:8px;color:var(--ink-55);transition:color .15s,background .15s;display:flex;align-items:center;justify-content:center}.notification-bell-btn:hover{color:var(--ink);background:var(--ink-6)}.notification-badge{position:absolute;top:2px;right:0;background:var(--red);color:var(--white);font-family:var(--sans);font-size:13px;font-weight:500;min-width:16px;height:16px;border-radius:999px;display:flex;align-items:center;justify-content:center;padding:0 4px;border:2px solid var(--white);line-height:1}.notification-panel{position:fixed;top:56px;right:var(--space-3);width:380px;max-width:calc(100vw - var(--space-4) * 2);max-height:480px;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-xl);box-shadow:var(--shadow-dropdown);z-index:1000;display:flex;flex-direction:column;overflow:hidden}.notification-panel-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:.5px solid var(--ink-10);font-family:var(--serif);font-size:15px;font-weight:700}.notification-panel-list{overflow-y:auto;flex:1}.notification-item{display:flex;align-items:flex-start;gap:12px;padding:12px 20px;cursor:pointer;transition:background .15s;border-bottom:.5px solid var(--ink-6)}.notification-item:last-child{border-bottom:none}.notification-item:hover{background:var(--surface)}.notification-item.unread{background:var(--blue-bg)}.notification-item.unread:hover{background:var(--blue-mid)}.notification-icon{font-size:1.1rem;flex-shrink:0;width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:var(--ink-6);border-radius:50%;margin-top:2px}.notification-item.unread .notification-icon{background:var(--blue-bg)}.notification-content{flex:1;min-width:0}.notification-title{font-family:var(--sans);font-size:var(--text-xs);line-height:1.5;color:var(--ink)}.notification-item.unread .notification-title{font-weight:500}.notification-time{font-family:var(--sans);font-size:13px;color:var(--ink-55);margin-top:2px}.notification-empty{padding:40px 24px;text-align:center;color:var(--ink-55);font-family:var(--sans);font-size:var(--text-xs)}.market-section{margin-bottom:24px}.market-search-bar{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:16px;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:12px 16px}.market-search-input{flex:1;min-width:200px;padding:9px 13px;border:.5px solid rgba(15,17,23,.2);border-radius:8px;font-family:var(--sans);font-size:var(--text-xs);color:var(--ink);background:var(--surface);outline:none;transition:border-color .15s,box-shadow .15s}.market-search-input:focus{border:1.5px solid var(--blue);box-shadow:0 0 0 3px var(--blue-bg)}.market-search-input::placeholder{color:var(--ink-55)}.custom-select{position:relative}.custom-select-trigger{display:inline-flex;align-items:center;gap:8px;padding:9px 13px;border:.5px solid rgba(15,17,23,.2);border-radius:8px;font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);background:var(--surface);cursor:pointer;transition:all .15s;white-space:nowrap}.custom-select-trigger:hover{border-color:#0f11174d;color:var(--ink)}.custom-select-trigger.open{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-bg)}.custom-select-trigger.has-value{color:var(--ink);font-weight:500}.custom-select-arrow{color:var(--ink-55);transition:transform .2s;flex-shrink:0}.custom-select-trigger.open .custom-select-arrow{transform:rotate(180deg)}.custom-select-dropdown{position:absolute;top:calc(100% + 4px);left:0;min-width:100%;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r);box-shadow:var(--shadow-dropdown);z-index:100;padding:4px 0;overflow:hidden}.custom-select-option{display:block;width:100%;padding:8px 16px;border:none;background:none;font-family:var(--sans);font-size:var(--text-xs);color:var(--ink);cursor:pointer;text-align:left;transition:background .1s;white-space:nowrap}.custom-select-option:hover{background:var(--surface)}.custom-select-option.selected{color:var(--blue);font-weight:500;background:var(--blue-bg)}.market-tag-toggle-btn{display:inline-flex;align-items:center;gap:4px;padding:9px 13px;border:.5px solid rgba(15,17,23,.2);border-radius:8px;background:var(--surface);font-family:var(--sans);font-size:var(--text-xs);color:var(--blue);font-weight:500;cursor:pointer;transition:all .15s;white-space:nowrap}.market-tag-toggle-btn:hover{background:var(--blue-bg);border-color:var(--blue-mid)}.market-tag-toggle-btn.active{background:var(--blue-bg);border-color:var(--blue);color:var(--blue)}.market-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}.market-card{display:flex;flex-direction:column;gap:8px;padding:18px 20px;border:.5px solid var(--ink-10);border-radius:var(--r-lg);background:var(--white);text-decoration:none;color:inherit;transition:border-color .15s,box-shadow .15s}.market-card:hover{border-color:#0f11172e;box-shadow:var(--shadow-card-hover)}.market-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.market-card-title{font-family:var(--serif);font-size:15px;font-weight:700;margin:0;line-height:1.3}.market-card-type{font-family:var(--sans);font-size:13px;color:var(--ink-55);background:var(--surface);padding:3px 10px;border-radius:20px;flex-shrink:0}.market-card-desc{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);margin:0;line-height:1.65}.market-card-meta{display:flex;gap:4px;flex-wrap:wrap}.market-card-badge{font-family:var(--sans);font-size:13px;padding:3px 10px;background:var(--surface);border-radius:20px;color:var(--ink-55)}.market-card-tags{display:flex;gap:4px;flex-wrap:wrap}.market-tag-chip{font-family:var(--sans);font-size:13px;font-weight:500;padding:3px 10px;border-radius:20px;border:.5px solid var(--ink-10);background:var(--white);cursor:pointer;transition:all .15s;color:var(--ink-55)}.market-tag-chip:hover{border-color:var(--blue-mid);background:var(--blue-bg);color:var(--blue)}.market-tag-chip.selected{background:var(--blue-bg);border-color:var(--blue);color:var(--blue);font-weight:500}.market-card-footer{display:flex;justify-content:space-between;align-items:center;margin-top:auto;padding-top:8px;border-top:.5px solid var(--ink-10)}.market-card-author{display:flex;align-items:center;gap:8px;font-family:var(--sans);font-size:var(--text-xs)}.market-card-avatar{width:24px;height:24px;border-radius:50%;object-fit:cover}.market-card-stats{display:flex;align-items:center;gap:12px;font-family:var(--sans);font-size:13px;color:var(--ink-55)}.market-stat{display:inline-flex;align-items:center;gap:3px}.rating-stars{display:inline-flex;gap:1px}.market-detail-header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px}.market-detail-header h1{margin:0 0 8px}.market-detail-meta{display:flex;gap:8px}.market-detail-actions{display:flex;gap:8px;flex-shrink:0}.market-detail-description{background:var(--surface);padding:16px;border-radius:var(--r);margin-bottom:16px}.market-detail-description p{margin:0;white-space:pre-wrap}.market-detail-stats{display:flex;gap:24px;padding:16px 0;border-top:.5px solid var(--ink-10);border-bottom:.5px solid var(--ink-10);margin-bottom:16px}.market-stat{display:flex;flex-direction:column;align-items:center;gap:4px}.market-stat-value{font-family:var(--serif);font-size:20px;font-weight:900}.market-stat-label{font-family:var(--sans);font-size:13px;color:var(--ink-55)}.market-detail-author{display:flex;align-items:center;gap:12px;margin-bottom:24px}.author-link{display:flex;align-items:center;gap:8px;text-decoration:none;color:inherit;font-family:var(--sans);font-weight:500}.market-detail-content{margin-top:24px}.market-detail-content h2{margin:0 0 16px}.market-passage-preview{background:var(--surface);padding:16px;border-radius:var(--r);margin-bottom:12px}.market-passage-preview h3{margin:0 0 8px}.passage-body-preview{white-space:pre-wrap;font-family:var(--sans);font-size:var(--text-xs);line-height:1.75;color:var(--ink-55)}.fork-chain{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);margin-bottom:16px;padding:8px 12px;background:var(--surface);border-radius:var(--r)}.fork-chain-label{font-weight:500}.fork-chain-link{color:var(--blue);text-decoration:none}.fork-chain-link:hover{text-decoration:underline}.fork-chain-arrow{color:var(--ink-55)}.fork-chain-current{font-weight:500;color:var(--ink)}.fork-list{display:flex;flex-direction:column;gap:8px}.fork-list-item{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border:.5px solid var(--ink-10);border-radius:8px;background:var(--white)}.fork-list-info{display:flex;flex-direction:column;gap:4px}.fork-list-title{font-family:var(--sans);font-weight:500;text-decoration:none;color:inherit}.fork-list-title:hover{color:var(--blue)}.fork-list-date{font-family:var(--sans);font-size:13px;color:var(--ink-55)}.fork-list-actions{display:flex;align-items:center;gap:8px}.update-badge{font-family:var(--sans);font-size:13px;padding:3px 10px;background:var(--amber-bg);color:var(--amber);border-radius:20px;font-weight:500}.my-share-card{position:relative}.my-share-actions{display:flex;gap:8px;margin-top:8px}.my-share-actions .btn-secondary,.my-share-actions .btn-danger{flex:1}.tag-filter{background:var(--surface);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:16px 20px;margin-bottom:16px}.tag-group{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin-bottom:12px}.tag-group:last-child{margin-bottom:0}.tag-group-label{font-family:var(--sans);font-size:13px;font-weight:500;color:var(--blue);min-width:36px;text-transform:uppercase;letter-spacing:.1em;flex-shrink:0}.tag-chips{display:flex;gap:6px;flex-wrap:wrap}.market-following-bar{display:flex;gap:16px;overflow-x:auto;padding:8px 0 16px}.following-avatar-link{display:flex;flex-direction:column;align-items:center;gap:4px;text-decoration:none;color:inherit;flex-shrink:0}.following-avatar{width:48px;height:48px;border-radius:50%;object-fit:cover}.following-avatar-placeholder{width:48px;height:48px;border-radius:50%;background:var(--blue-bg);color:var(--blue);display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-weight:700;font-size:15px}.following-name{font-family:var(--sans);font-size:13px;max-width:64px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.author-profile-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;padding-bottom:16px;border-bottom:.5px solid var(--ink-10)}.author-profile-info{display:flex;align-items:center;gap:16px}.author-profile-avatar{width:64px;height:64px;border-radius:50%;object-fit:cover}.author-profile-avatar-placeholder{width:64px;height:64px;border-radius:50%;background:var(--blue-bg);color:var(--blue);display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-weight:700;font-size:24px}.author-profile-stats{display:flex;gap:16px;font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);margin-top:4px}.modal-content{background:var(--white);border-radius:var(--r-xl);box-shadow:var(--shadow-modal);width:100%;max-width:460px;max-height:85vh;display:flex;flex-direction:column;overflow:hidden}.modal-content h2,.modal-content h3{margin:0;padding:20px 24px 16px;font-family:var(--serif);font-size:20px;font-weight:700;color:var(--ink);border-bottom:.5px solid var(--ink-10)}.modal-content .form-group{padding:0 24px}.modal-content .form-group:first-of-type{margin-top:20px}.modal-content .modal-actions{padding:16px 24px;border-top:.5px solid var(--ink-10);margin-top:16px;display:flex;justify-content:flex-end;gap:12px}.modal-content .modal-body-scroll{overflow-y:auto;flex:1;min-height:0}.share-dialog{max-width:540px}.share-dialog h2{background:var(--blue);color:var(--white);border-bottom:none;padding:20px 24px;font-size:20px}.share-dialog .form-group label{font-family:var(--sans);font-size:13px;font-weight:500;color:var(--ink-55);text-transform:uppercase;letter-spacing:.1em;margin-bottom:4px}.radio-group{display:flex;gap:16px}.radio-group label{display:flex;align-items:center;gap:8px;cursor:pointer;font-family:var(--sans);font-size:var(--text-xs);font-weight:500;color:var(--ink);padding:8px 12px;border-radius:8px;border:.5px solid var(--ink-10);transition:all .15s}.radio-group label:hover{border-color:var(--blue-mid);background:var(--blue-bg)}.radio-group label:has(input:checked){border-color:var(--blue);background:var(--blue-bg);color:var(--blue)}.page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.page-header h1{margin:0}.page-header-actions{display:flex;gap:8px}.confirm-dialog{max-width:380px;text-align:center;padding:28px 32px}.confirm-dialog h3{border:none;padding:0;margin:0 0 8px;font-size:var(--text-sm)}.confirm-dialog-icon{width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 16px;background:var(--red-bg);color:var(--red)}.confirm-dialog-icon.shake{animation:confirm-shake .4s ease-in-out}@keyframes confirm-shake{0%,to{transform:rotate(0)}20%{transform:rotate(-12deg)}40%{transform:rotate(10deg)}60%{transform:rotate(-8deg)}80%{transform:rotate(5deg)}}.confirm-dialog-title{font-family:var(--sans);font-weight:600;color:var(--ink)}.confirm-dialog-message{font-family:var(--sans);font-size:var(--text-xs);color:var(--ink-55);line-height:1.65;margin:0 0 24px}.confirm-dialog-actions{display:flex;gap:12px;justify-content:center}.confirm-dialog-actions .btn-secondary,.confirm-dialog-actions .btn-danger,.confirm-dialog-actions .btn-primary{flex:1;justify-content:center}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:8px;background:none;color:var(--ink-55);cursor:pointer;transition:all .15s}.icon-btn:hover{background:var(--ink-6);color:var(--ink)}.icon-btn:active{transform:scale(.92)}.icon-btn:disabled{opacity:.4;cursor:not-allowed}.icon-btn-danger:hover{background:var(--red-bg);color:var(--red)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ws-page{display:flex;flex-direction:column;height:100vh;background:var(--color-neutral-100, #f3f4f6);overflow:hidden}.ws-topbar{display:flex;align-items:center;padding:8px 16px;background:var(--white);border-bottom:.5px solid var(--ink-10);flex-shrink:0}.ws-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:6px 12px;background:var(--white);border-bottom:.5px solid var(--ink-10);flex-shrink:0}.ws-paper-scroll{flex:1;overflow:auto;display:flex;justify-content:center;padding:32px 16px}.ws-paper{background:var(--white);box-shadow:0 1px 4px #00000014,0 0 0 .5px var(--ink-10);border-radius:2px;flex-shrink:0}.ws-editor-content .ProseMirror{outline:none;min-height:400px;font-family:var(--sans);font-size:15px;line-height:1.8;color:var(--ink)}.ws-editor-content .ProseMirror p{margin:0 0 .5em}.ws-editor-content .ProseMirror h1{font-family:var(--serif);font-size:1.5em;font-weight:700;margin:.5em 0 .3em}.ws-editor-content .ProseMirror h2{font-family:var(--serif);font-size:1.3em;font-weight:700;margin:.4em 0 .2em}.ws-editor-content .ProseMirror h3{font-family:var(--serif);font-size:1.15em;font-weight:700;margin:.3em 0 .2em}.ws-editor-content .ProseMirror ul,.ws-editor-content .ProseMirror ol{padding-left:1.5em;margin:0 0 .5em}.ws-editor-content .ProseMirror p.is-editor-empty:before{content:attr(data-placeholder);float:left;color:var(--ink-55);pointer-events:none;height:0}.ws-section-heading{font-family:var(--serif);font-size:1.15em;font-weight:700;text-align:center;padding:8px 0;margin:12px 0 4px}.ws-page-break{border:none;border-top:2px dashed var(--ink-10);margin:24px 0;position:relative;height:0}.ws-page-break:after{content:"分頁";position:absolute;top:-10px;left:50%;transform:translate(-50%);background:var(--white);padding:0 12px;font-size:11px;color:var(--text-tertiary);letter-spacing:2px}.ws-question-block{border:1px solid var(--ink-10);border-radius:6px;padding:12px 16px;margin:8px 0;background:var(--white);transition:border-color .15s}.ws-question-block:hover{border-color:var(--blue-mid)}.ws-fillblank-block{border:1px solid var(--ink-10);border-radius:6px;padding:12px 16px;margin:8px 0;background:var(--white);transition:border-color .15s}.ws-fillblank-block:hover{border-color:var(--blue-mid)}.ws-blank{display:inline-block;min-width:60px;border-bottom:1.5px solid var(--ink);text-align:center;margin:0 2px;font-size:.85em;color:var(--text-tertiary)}.ws-question-edit,.ws-fillblank-edit{font-size:var(--text-sm)}.ws-question-display,.ws-fillblank-display{cursor:pointer;font-size:var(--text-sm)}.landing-nav{position:sticky;top:0;z-index:100;height:64px;background:#ffffffd9;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:.5px solid var(--ink-10);display:flex;align-items:center;justify-content:space-between;padding:0 48px;max-width:1280px;margin:0 auto;width:100%}.landing-nav-wrap{position:sticky;top:0;z-index:100;background:#ffffffd9;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:.5px solid var(--ink-10)}.landing-nav-logo{font-family:var(--serif);font-size:22px;font-weight:900;color:var(--ink);text-decoration:none;flex-shrink:0}.landing-nav-logo-img{height:32px;width:auto;display:block}.landing-nav-links{display:flex;align-items:center;gap:32px}.landing-nav-link{font-family:var(--sans);font-size:14px;font-weight:500;color:var(--ink-55);text-decoration:none;transition:color .15s}.landing-nav-link:hover{color:var(--ink)}.landing-nav-right{display:flex;align-items:center;gap:12px}.landing-hamburger{display:none;background:none;border:none;cursor:pointer;padding:8px;color:var(--ink)}.landing-mobile-menu{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#0f111766}.landing-mobile-menu.open{display:flex}.landing-mobile-panel{position:absolute;top:0;right:0;width:280px;height:100%;background:var(--white);padding:24px;display:flex;flex-direction:column;gap:8px;box-shadow:var(--shadow-modal)}.landing-mobile-close{align-self:flex-end;background:none;border:none;cursor:pointer;font-size:20px;color:var(--ink-55);padding:4px}.landing-mobile-link{font-family:var(--sans);font-size:15px;font-weight:500;color:var(--ink);text-decoration:none;padding:12px 0;border-bottom:.5px solid var(--ink-10)}.landing-section{padding:80px 48px;max-width:1280px;margin:0 auto}.landing-section-surface{background:var(--surface)}.landing-section-dark{background:var(--ink);color:var(--white)}.landing-section-label{font-family:var(--sans);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--blue);margin-bottom:12px}.landing-section-title{font-family:var(--serif);font-size:36px;font-weight:900;line-height:1.2;color:var(--ink);margin-bottom:12px}.landing-section-subtitle{font-family:var(--sans);font-size:15px;color:var(--ink-55);max-width:560px;line-height:1.75}.landing-section-center{text-align:center}.landing-section-center .landing-section-subtitle{margin:0 auto}.landing-hero{padding:80px 48px 60px;max-width:1280px;margin:0 auto;display:flex;align-items:center;gap:60px}.landing-hero-content{flex:1;min-width:0}.landing-hero-badge{display:inline-block;font-family:var(--sans);font-size:13px;font-weight:500;padding:6px 16px;background:var(--blue-bg);color:var(--blue);border-radius:20px;margin-bottom:24px}.landing-hero-title{font-family:var(--serif);font-size:52px;font-weight:900;line-height:1.15;color:var(--ink);margin-bottom:20px}.landing-hero-title .accent{color:var(--blue)}.landing-hero-subtitle{font-family:var(--sans);font-size:15px;font-weight:400;color:var(--ink-55);line-height:1.75;margin-bottom:32px;max-width:480px}.landing-hero-actions{display:flex;gap:12px;align-items:center;margin-bottom:16px}.landing-hero-note{font-family:var(--sans);font-size:13px;color:var(--ink-55)}.landing-hero-mockup{flex:1;min-width:0;max-width:520px}.mockup-browser{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-xl);overflow:hidden;box-shadow:0 8px 48px #0f11171a}.mockup-bar{display:flex;align-items:center;gap:8px;padding:12px 16px;background:var(--surface);border-bottom:.5px solid var(--ink-10)}.mockup-dots{display:flex;gap:6px}.mockup-dot{width:10px;height:10px;border-radius:50%;background:var(--ink-10)}.mockup-url{flex:1;height:28px;background:var(--white);border-radius:6px;border:.5px solid var(--ink-10);display:flex;align-items:center;padding:0 12px;font-family:var(--sans);font-size:11px;color:var(--ink-55)}.mockup-body{padding:24px;font-family:var(--sans);font-size:14px;line-height:2;color:var(--ink)}.mockup-hl-vocab{background:var(--green-bg);border-bottom:1.5px dashed var(--green);padding:1px 2px;cursor:pointer;border-radius:2px;transition:background .15s,box-shadow .15s}.mockup-hl-vocab:hover,.mockup-hl-vocab.active{background:#16a34a26;box-shadow:0 0 0 2px #16a34a1f}.mockup-hl-grammar{background:var(--blue-bg);border-bottom:1.5px dashed var(--blue);padding:1px 2px;cursor:pointer;border-radius:2px;transition:background .15s,box-shadow .15s}.mockup-hl-grammar:hover,.mockup-hl-grammar.active{background:#2557d61f;box-shadow:0 0 0 2px #2557d61a}.mockup-card{margin-top:12px;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r);padding:14px 16px;box-shadow:0 2px 8px #0f11170f}.mockup-card-word{font-family:var(--serif);font-size:18px;font-weight:700;margin-bottom:6px}.mockup-card-phonetic{font-family:monospace;font-size:12px;color:var(--ink-55);margin-left:8px;font-weight:400}.mockup-card-pos{display:inline-block;font-size:11px;color:var(--ink-55);background:var(--surface);padding:1px 7px;border-radius:20px;margin-bottom:6px}.mockup-card-zh{font-size:14px;color:var(--green);font-weight:500;margin-bottom:4px}.mockup-card-example{font-size:12px;color:var(--ink-55);font-style:italic;border-left:2px solid var(--blue-mid);padding-left:8px;line-height:1.6}.mockup-family{margin-top:10px;padding-top:8px;border-top:.5px solid var(--ink-10)}.mockup-family-label{font-family:var(--sans);font-size:10px;font-weight:500;color:var(--ink-55);margin-bottom:6px}.mockup-family-tree-h{display:flex;align-items:center}.mockup-family-pill{font-family:var(--sans);font-size:11px;font-weight:400;color:var(--ink-55);background:var(--surface);padding:1px 10px;border-radius:14px;border:1.5px solid var(--ink-10);white-space:nowrap;cursor:pointer;line-height:1.7;transition:all .15s}.mockup-family-pill.active{background:var(--green-bg);border-color:var(--green);color:#065f46;font-weight:600}.mockup-family-pill.root{background:var(--surface);border-color:var(--ink-10);color:var(--ink-55)}.mockup-family-pos{font-size:.85em;opacity:.7}.mockup-family-connector-h{width:16px;border-top:1.5px solid #d1d5db;flex-shrink:0}.mockup-family-children{display:flex;flex-direction:column;gap:4px}.mockup-family-row{display:flex;align-items:center}.mockup-family-branch-line{width:16px;align-self:stretch;flex-shrink:0;position:relative}.mockup-family-branch-line.first:before{content:"";position:absolute;left:0;top:calc(50% - .75px);bottom:-2px;width:16px;border-top:1.5px solid #d1d5db;border-left:1.5px solid #d1d5db;border-top-left-radius:6px;box-sizing:border-box}.mockup-family-branch-line.mid:before{content:"";position:absolute;left:0;top:-2px;bottom:-2px;border-left:1.5px solid #d1d5db}.mockup-family-branch-line.mid:after{content:"";position:absolute;top:calc(50% - .75px);left:0;width:16px;border-top:1.5px solid #d1d5db}.mockup-family-branch-line.last:before{content:"";position:absolute;left:0;top:-2px;height:calc(50% + 2.75px);width:16px;border-bottom:1.5px solid #d1d5db;border-left:1.5px solid #d1d5db;border-bottom-left-radius:6px;box-sizing:border-box}.mockup-card-anim{opacity:0;transform:translateY(6px);max-height:0;overflow:hidden;transition:opacity .25s ease,transform .25s ease,max-height .3s ease,margin-top .3s ease,padding .3s ease;margin-top:0;padding:0 16px}.mockup-card-anim.show{opacity:1;transform:translateY(0);max-height:360px;margin-top:12px;padding:14px 16px}.mockup-card-grammar-tag{display:inline-flex;align-items:center;gap:4px;font-family:var(--sans);font-size:11px;font-weight:500;color:var(--blue);background:var(--blue-bg);padding:2px 8px;border-radius:20px;margin-bottom:8px}.mockup-card-pattern{font-family:monospace;font-size:13px;color:var(--blue);background:var(--blue-bg);padding:4px 10px;border-radius:6px;margin-bottom:8px;display:inline-block}.mockup-card-grammar-desc{font-family:var(--sans);font-size:13px;color:var(--ink-55);line-height:1.65;margin-bottom:8px}.mockup-hint{display:flex;align-items:center;gap:6px;margin-top:16px;font-family:var(--sans);font-size:12px;color:var(--ink-55);justify-content:center;animation:mockup-hint-pulse 2s ease-in-out infinite}@keyframes mockup-hint-pulse{0%,to{opacity:.5}50%{opacity:1}}.features-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:40px}.feature-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:24px;transition:border-color .15s,box-shadow .15s}.feature-card:hover{border-color:#0f11172e;box-shadow:0 2px 8px #0f11170f}.feature-icon{width:40px;height:40px;border-radius:var(--r);display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:16px}.feature-title{font-family:var(--serif);font-size:17px;font-weight:700;margin-bottom:8px;color:var(--ink)}.feature-desc{font-family:var(--sans);font-size:13px;color:var(--ink-55);line-height:1.65}.hiw-layout{display:flex;gap:60px;align-items:flex-start;margin-top:40px}.hiw-steps{flex:1;display:flex;flex-direction:column;gap:32px}.hiw-step{display:flex;gap:16px;align-items:flex-start}.hiw-step-num{width:32px;height:32px;border-radius:50%;background:var(--blue);color:var(--white);font-family:var(--sans);font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.hiw-step-content{flex:1}.hiw-step-title{font-family:var(--serif);font-size:17px;font-weight:700;margin-bottom:4px;color:var(--ink)}.hiw-step-desc{font-family:var(--sans);font-size:13px;color:var(--ink-55);line-height:1.65}.hiw-card{flex:1;background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:28px;max-width:420px}.hiw-card-big-num{font-family:var(--serif);font-size:56px;font-weight:900;color:var(--blue);line-height:1;margin-bottom:8px}.hiw-card-label{font-family:var(--sans);font-size:13px;color:var(--ink-55);margin-bottom:24px}.hiw-progress-row{display:flex;align-items:center;gap:12px;margin-bottom:12px}.hiw-progress-label{font-family:var(--sans);font-size:13px;color:var(--ink);font-weight:500;min-width:48px}.hiw-progress-bar{flex:1;height:4px;background:var(--ink-10);border-radius:2px;overflow:hidden}.hiw-progress-fill{height:4px;border-radius:2px}.hiw-progress-value{font-family:var(--sans);font-size:13px;font-weight:500;min-width:36px;text-align:right}.hiw-ai-insight{background:var(--blue-bg);border-radius:var(--r);padding:12px 14px;font-family:var(--sans);font-size:13px;color:var(--blue);line-height:1.65;display:flex;gap:8px;align-items:flex-start;margin-top:20px}.testimonials-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:40px}.testimonial-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:24px}.testimonial-quote{font-family:var(--sans);font-size:14px;color:var(--ink);line-height:1.75;margin-bottom:20px;font-style:italic}.testimonial-author{display:flex;align-items:center;gap:12px}.testimonial-avatar{width:40px;height:40px;border-radius:50%;background:var(--blue-bg);color:var(--blue);font-family:var(--serif);font-weight:700;font-size:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.testimonial-name{font-family:var(--sans);font-size:14px;font-weight:500;color:var(--ink)}.testimonial-role{font-family:var(--sans);font-size:12px;color:var(--ink-55)}.pricing-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:40px}.pricing-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:28px;display:flex;flex-direction:column}.pricing-card.featured{border:1.5px solid var(--blue);position:relative}.pricing-featured-badge{position:absolute;top:-12px;left:50%;transform:translate(-50%);font-family:var(--sans);font-size:11px;font-weight:500;padding:4px 14px;background:var(--blue);color:var(--white);border-radius:20px;white-space:nowrap}.pricing-name{font-family:var(--serif);font-size:20px;font-weight:700;margin-bottom:4px;color:var(--ink)}.pricing-price{font-family:var(--serif);font-size:36px;font-weight:900;color:var(--ink);line-height:1;margin-bottom:4px}.pricing-price span{font-family:var(--sans);font-size:14px;font-weight:400;color:var(--ink-55)}.pricing-desc{font-family:var(--sans);font-size:13px;color:var(--ink-55);margin-bottom:20px;line-height:1.5}.pricing-features{list-style:none;padding:0;margin:0 0 24px;display:flex;flex-direction:column;gap:10px;flex:1}.pricing-feature{font-family:var(--sans);font-size:13px;color:var(--ink);display:flex;align-items:center;gap:8px}.pricing-check{color:var(--green);flex-shrink:0;font-size:15px}.landing-cta{background:var(--ink);border-radius:var(--r-xl);padding:60px 48px;text-align:center;max-width:1280px;margin:0 auto 80px}.landing-cta-wrap{padding:0 48px}.landing-cta-title{font-family:var(--serif);font-size:36px;font-weight:900;color:var(--white);margin-bottom:12px}.landing-cta-subtitle{font-family:var(--sans);font-size:15px;color:#fff9;margin-bottom:28px;line-height:1.75}.landing-cta .btn-cta{display:inline-flex;align-items:center;gap:8px;padding:12px 26px;background:var(--white);color:var(--ink);font-family:var(--sans);font-size:15px;font-weight:500;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s}.landing-cta .btn-cta:hover{opacity:.88}.landing-footer{border-top:.5px solid var(--ink-10);padding:32px 48px;max-width:1280px;margin:0 auto;display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center}.landing-footer-logo{font-family:var(--serif);font-size:18px;font-weight:900;color:var(--ink)}.landing-footer-logo-img{height:28px;width:auto;display:block}.landing-footer-copy{font-family:var(--sans);font-size:12px;color:var(--ink-55);margin-top:4px}.landing-footer-links{display:flex;gap:24px}.landing-footer-link{font-family:var(--sans);font-size:13px;color:var(--ink-55);text-decoration:none;transition:color .15s}.landing-footer-link:hover{color:var(--ink)}.btn-outline{display:inline-flex;align-items:center;gap:8px;padding:9px 18px;background:transparent;color:var(--ink);font-family:var(--sans);font-size:13px;font-weight:500;border:.5px solid var(--ink-10);border-radius:8px;cursor:pointer;transition:opacity .15s;text-decoration:none;line-height:1;white-space:nowrap}.btn-outline:hover{opacity:.88}@media (max-width: 1024px){.landing-hero{flex-direction:column;padding:48px 32px 40px;gap:40px}.landing-hero-mockup{max-width:100%}.landing-hero-title{font-size:40px}.landing-section{padding:60px 32px}.features-grid{grid-template-columns:repeat(2,1fr)}.hiw-layout{flex-direction:column;gap:40px}.hiw-card{max-width:100%}.testimonials-grid{grid-template-columns:1fr}.pricing-grid{grid-template-columns:1fr;max-width:400px;margin-left:auto;margin-right:auto}.landing-nav{padding:0 24px}.landing-footer{padding:24px}.landing-cta{margin:0 24px 60px}.landing-cta-wrap{padding:0 24px}}@media (max-width: 640px){.landing-nav-links,.landing-nav-right .btn-primary{display:none}.landing-hamburger{display:block}.landing-hero{padding:32px 20px;gap:32px}.landing-hero-title{font-size:32px}.landing-hero-subtitle{font-size:14px}.landing-hero-actions{flex-direction:column;align-items:stretch}.landing-hero-actions .btn-primary,.landing-hero-actions .btn-outline{justify-content:center;text-align:center}.landing-section{padding:48px 20px}.landing-section-title{font-size:26px}.features-grid{grid-template-columns:1fr}.hiw-layout{gap:32px}.landing-footer{padding:24px 20px}.landing-cta{margin:0 16px 48px;padding:40px 24px;border-radius:var(--r-lg)}.landing-cta-wrap{padding:0 16px}.landing-cta-title{font-size:26px}.mockup-body{font-size:13px;padding:16px;line-height:1.8}}.account-page{min-height:100vh;background:var(--surface);padding:48px 28px;font-family:var(--sans)}.account-container{max-width:720px;margin:0 auto}.account-back{background:none;border:none;color:var(--blue);cursor:pointer;font-size:14px;font-family:var(--sans);padding:0;margin-bottom:20px}.account-title{font-family:var(--serif);font-size:30px;font-weight:900;margin:0 0 28px}.account-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:20px 24px;margin-bottom:16px}.card-header{margin-bottom:16px}.card-title{font-family:var(--sans);font-size:15px;font-weight:500;margin:0;color:var(--ink)}.profile-row{display:flex;align-items:center;gap:16px}.profile-avatar{width:48px;height:48px;border-radius:50%;object-fit:cover;flex-shrink:0}.profile-avatar-placeholder{width:48px;height:48px;border-radius:50%;background:var(--blue-bg);color:var(--blue);display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;flex-shrink:0}.profile-info{flex:1;min-width:0}.profile-name{font-size:16px;font-weight:500;color:var(--ink)}.profile-email{font-size:13px;color:var(--ink-55);margin-top:2px}.badge-role{font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px;background:var(--blue-bg);color:var(--blue);white-space:nowrap}.sub-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:12px}.sub-item{display:flex;flex-direction:column;gap:4px}.sub-label{font-size:12px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-55)}.sub-value{font-size:15px;color:var(--ink)}.days-left{font-size:13px;color:var(--ink-55);margin-left:4px}.sub-notice{font-size:13px;padding:10px 14px;border-radius:var(--r);line-height:1.6;margin-bottom:12px}.sub-notice.amber{background:var(--amber-bg);color:var(--amber)}.sub-notice.blue{background:var(--blue-bg);color:var(--blue)}.sub-actions{display:flex;gap:8px;flex-wrap:wrap}.btn-outline-subtle{background:none;border:.5px solid var(--ink-10);color:var(--ink-55);border-radius:8px;padding:8px 16px;font-size:13px;font-weight:500;font-family:var(--sans);cursor:pointer;transition:opacity .15s}.btn-outline-subtle:hover:not(:disabled){opacity:.7}.btn-outline-subtle:disabled{opacity:.4;cursor:not-allowed}.btn-blue-outline{background:none;border:1px solid var(--blue);color:var(--blue);border-radius:8px;padding:8px 16px;font-size:13px;font-weight:500;font-family:var(--sans);cursor:pointer;transition:opacity .15s}.btn-blue-outline:hover:not(:disabled){opacity:.7}.btn-blue-outline:disabled{opacity:.4;cursor:not-allowed}.usage-list{display:flex;flex-direction:column;gap:12px}.table-wrap{overflow-x:auto}.account-card .table{width:100%;border-collapse:collapse;font-family:var(--sans);font-size:13px}.account-card .table th{text-align:left;padding:10px 12px;border-bottom:.5px solid var(--ink-10);font-size:11px;font-weight:500;color:var(--ink-55);text-transform:uppercase;letter-spacing:.1em}.account-card .table td{padding:12px;border-bottom:.5px solid var(--ink-10);color:var(--ink);vertical-align:middle}.account-card .table tbody tr:last-child td{border-bottom:none}.text-muted{color:var(--ink-55)}.text-mono{font-family:var(--font-mono, monospace);font-size:11px;color:var(--ink-55)}.badge{font-size:10px;font-weight:500;padding:3px 10px;border-radius:20px;white-space:nowrap;display:inline-block}.badge-green{background:var(--green-bg);color:var(--green)}.badge-red{background:var(--red-bg);color:var(--red)}.badge-amber{background:var(--amber-bg);color:var(--amber)}.badge-blue{background:var(--blue-bg);color:var(--blue)}.empty-hint{font-size:14px;color:var(--ink-55);text-align:center;padding:24px 0}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:16px}.stat-item{text-align:center;padding:12px 8px;background:var(--surface);border-radius:var(--r)}.stat-num{font-family:var(--serif);font-size:28px;font-weight:900;line-height:1;margin-bottom:4px}.stat-label{font-size:12px;color:var(--ink-55)}@media (max-width: 640px){.account-page{padding:24px 16px}.account-title{font-size:24px}.sub-grid{grid-template-columns:1fr}.stats-grid{grid-template-columns:repeat(2,1fr)}.account-card .table th,.account-card .table td{padding:8px}}:root{--react-pdf-annotation-layer: 1;--annotation-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>");--input-focus-border-color: Highlight;--input-focus-outline: 1px solid Canvas;--input-unfocused-border-color: transparent;--input-disabled-border-color: transparent;--input-hover-border-color: black;--link-outline: none}@media screen and (forced-colors: active){:root{--input-focus-border-color: CanvasText;--input-unfocused-border-color: ActiveText;--input-disabled-border-color: GrayText;--input-hover-border-color: Highlight;--link-outline: 1.5px solid LinkText}.annotationLayer .textWidgetAnnotation :is(input,textarea):required,.annotationLayer .choiceWidgetAnnotation select:required,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input:required{outline:1.5px solid selectedItem}.annotationLayer .linkAnnotation:hover{-webkit-backdrop-filter:invert(100%);backdrop-filter:invert(100%)}}.annotationLayer{position:absolute;top:0;left:0;pointer-events:none;transform-origin:0 0;z-index:3}.annotationLayer[data-main-rotation="90"] .norotate{transform:rotate(270deg) translate(-100%)}.annotationLayer[data-main-rotation="180"] .norotate{transform:rotate(180deg) translate(-100%,-100%)}.annotationLayer[data-main-rotation="270"] .norotate{transform:rotate(90deg) translateY(-100%)}.annotationLayer canvas{position:absolute;width:100%;height:100%}.annotationLayer section{position:absolute;text-align:initial;pointer-events:auto;box-sizing:border-box;margin:0;transform-origin:0 0}.annotationLayer .linkAnnotation{outline:var(--link-outline)}.textLayer.selecting~.annotationLayer section{pointer-events:none}.annotationLayer :is(.linkAnnotation,.buttonWidgetAnnotation.pushButton)>a{position:absolute;font-size:1em;top:0;left:0;width:100%;height:100%}.annotationLayer :is(.linkAnnotation,.buttonWidgetAnnotation.pushButton)>a:hover{opacity:.2;background:#ff0;box-shadow:0 2px 10px #ff0}.annotationLayer .textAnnotation img{position:absolute;cursor:pointer;width:100%;height:100%;top:0;left:0}.annotationLayer .textWidgetAnnotation :is(input,textarea),.annotationLayer .choiceWidgetAnnotation select,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input{background-image:var(--annotation-unfocused-field-background);border:2px solid var(--input-unfocused-border-color);box-sizing:border-box;font:calc(9px * var(--total-scale-factor)) sans-serif;height:100%;margin:0;vertical-align:top;width:100%}.annotationLayer .textWidgetAnnotation :is(input,textarea):required,.annotationLayer .choiceWidgetAnnotation select:required,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input:required{outline:1.5px solid red}.annotationLayer .choiceWidgetAnnotation select option{padding:0}.annotationLayer .buttonWidgetAnnotation.radioButton input{border-radius:50%}.annotationLayer .textWidgetAnnotation textarea{resize:none}.annotationLayer .textWidgetAnnotation :is(input,textarea)[disabled],.annotationLayer .choiceWidgetAnnotation select[disabled],.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input[disabled]{background:none;border:2px solid var(--input-disabled-border-color);cursor:not-allowed}.annotationLayer .textWidgetAnnotation :is(input,textarea):hover,.annotationLayer .choiceWidgetAnnotation select:hover,.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input:hover{border:2px solid var(--input-hover-border-color)}.annotationLayer .textWidgetAnnotation :is(input,textarea):hover,.annotationLayer .choiceWidgetAnnotation select:hover,.annotationLayer .buttonWidgetAnnotation.checkBox input:hover{border-radius:2px}.annotationLayer .textWidgetAnnotation :is(input,textarea):focus,.annotationLayer .choiceWidgetAnnotation select:focus{background:none;border:2px solid var(--input-focus-border-color);border-radius:2px;outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) :focus{background-image:none;background-color:transparent}.annotationLayer .buttonWidgetAnnotation.checkBox :focus{border:2px solid var(--input-focus-border-color);border-radius:2px;outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation.radioButton :focus{border:2px solid var(--input-focus-border-color);outline:var(--input-focus-outline)}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{background-color:CanvasText;content:"";display:block;position:absolute}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{height:80%;left:45%;width:1px}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before{transform:rotate(45deg)}.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{transform:rotate(-45deg)}.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{border-radius:50%;height:50%;left:30%;top:20%;width:50%}.annotationLayer .textWidgetAnnotation input.comb{font-family:monospace;padding-left:2px;padding-right:0}.annotationLayer .textWidgetAnnotation input.comb:focus{width:103%}.annotationLayer .buttonWidgetAnnotation:is(.checkBox,.radioButton) input{-webkit-appearance:none;-moz-appearance:none;appearance:none}.annotationLayer .popupTriggerArea{height:100%;width:100%}.annotationLayer .fileAttachmentAnnotation .popupTriggerArea{position:absolute}.annotationLayer .popupWrapper{position:absolute;font-size:calc(9px * var(--total-scale-factor));width:100%;min-width:calc(180px * var(--total-scale-factor));pointer-events:none}.annotationLayer .popup{position:absolute;max-width:calc(180px * var(--total-scale-factor));background-color:#ff9;box-shadow:0 calc(2px * var(--total-scale-factor)) calc(5px * var(--total-scale-factor)) #888;border-radius:calc(2px * var(--total-scale-factor));padding:calc(6px * var(--total-scale-factor));margin-left:calc(5px * var(--total-scale-factor));cursor:pointer;font:message-box;white-space:normal;word-wrap:break-word;pointer-events:auto}.annotationLayer .popup>*{font-size:calc(9px * var(--total-scale-factor))}.annotationLayer .popup h1{display:inline-block}.annotationLayer .popupDate{display:inline-block;margin-left:calc(5px * var(--total-scale-factor))}.annotationLayer .popupContent{border-top:1px solid rgba(51,51,51,1);margin-top:calc(2px * var(--total-scale-factor));padding-top:calc(2px * var(--total-scale-factor))}.annotationLayer .richText>*{white-space:pre-wrap;font-size:calc(9px * var(--total-scale-factor))}.annotationLayer .highlightAnnotation,.annotationLayer .underlineAnnotation,.annotationLayer .squigglyAnnotation,.annotationLayer .strikeoutAnnotation,.annotationLayer .freeTextAnnotation,.annotationLayer .lineAnnotation svg line,.annotationLayer .squareAnnotation svg rect,.annotationLayer .circleAnnotation svg ellipse,.annotationLayer .polylineAnnotation svg polyline,.annotationLayer .polygonAnnotation svg polygon,.annotationLayer .caretAnnotation,.annotationLayer .inkAnnotation svg polyline,.annotationLayer .stampAnnotation,.annotationLayer .fileAttachmentAnnotation{cursor:pointer}.annotationLayer section svg{position:absolute;width:100%;height:100%;top:0;left:0}.annotationLayer .annotationTextContent{position:absolute;width:100%;height:100%;opacity:0;color:transparent;-webkit-user-select:none;user-select:none;pointer-events:none}.annotationLayer .annotationTextContent span{width:100%;display:inline-block}:root{--react-pdf-text-layer: 1;--highlight-bg-color: rgba(180, 0, 170, 1);--highlight-selected-bg-color: rgba(0, 100, 0, 1)}@media screen and (forced-colors: active){:root{--highlight-bg-color: Highlight;--highlight-selected-bg-color: ButtonText}}[data-main-rotation="90"]{transform:rotate(90deg) translateY(-100%)}[data-main-rotation="180"]{transform:rotate(180deg) translate(-100%,-100%)}[data-main-rotation="270"]{transform:rotate(270deg) translate(-100%)}.textLayer{position:absolute;text-align:initial;top:0;right:0;bottom:0;left:0;overflow:hidden;line-height:1;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0;z-index:2}.textLayer :is(span,br){color:transparent;position:absolute;white-space:pre;cursor:text;margin:0;transform-origin:0 0}.textLayer span.markedContent{top:0;height:0}.textLayer .highlight{margin:-1px;padding:1px;background-color:var(--highlight-bg-color);border-radius:4px}.textLayer .highlight.appended{position:initial}.textLayer .highlight.begin{border-radius:4px 0 0 4px}.textLayer .highlight.end{border-radius:0 4px 4px 0}.textLayer .highlight.middle{border-radius:0}.textLayer .highlight.selected{background-color:var(--highlight-selected-bg-color)}.textLayer br::selection{background:transparent}.textLayer .endOfContent{display:block;position:absolute;top:100%;right:0;bottom:0;left:0;z-index:-1;cursor:default;-webkit-user-select:none;user-select:none}.textLayer.selecting .endOfContent{top:0}.hiddenCanvasElement{position:absolute;top:0;left:0;width:0;height:0;display:none}.scan-step-bar{display:flex;align-items:center;justify-content:center;gap:0;margin-bottom:var(--space-5)}.scan-step-item{display:flex;align-items:center;gap:var(--space-2)}.scan-step-circle{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;border:2px solid var(--border-base);color:var(--text-tertiary);background:var(--surface-primary);flex-shrink:0;transition:all .2s}.scan-step-item.active .scan-step-circle{border-color:var(--color-primary-500);background:var(--color-primary-500);color:#fff}.scan-step-item.done .scan-step-circle{border-color:var(--color-success-500);background:var(--color-success-50);color:var(--color-success-600)}.scan-step-label{font-size:var(--text-xs);color:var(--text-tertiary);white-space:nowrap}.scan-step-item.active .scan-step-label{color:var(--color-primary-700);font-weight:600}.scan-step-item.done .scan-step-label{color:var(--color-success-700)}.scan-step-line{width:40px;height:2px;background:var(--border-base);margin:0 var(--space-2);flex-shrink:0}.scan-step-item.done+.scan-step-item .scan-step-line,.scan-step-item.done .scan-step-line{background:var(--color-success-300)}.file-dropzone-active{border-color:var(--color-primary-500)!important;background:var(--color-primary-50)!important}.scan-title{font-size:var(--text-xl);font-weight:var(--font-bold);margin-bottom:var(--space-1)}.scan-subtitle{color:var(--text-secondary);font-size:var(--text-sm)}.scan-upload-card{max-width:560px;margin:0 auto}.scan-handwriting-toggle{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);cursor:pointer;margin:var(--space-3) 0 var(--space-4)}.scan-hint{color:var(--text-tertiary);font-size:var(--text-xs)}.scan-workspace-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-4);position:sticky;top:0;z-index:20;background:#fff;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-base)}.scan-workspace-body{display:flex;gap:var(--space-4);align-items:flex-start}.scan-viewer-pane{flex:3;min-width:0;max-width:520px;overflow-x:auto}.scan-panel-pane{flex:2;min-width:280px;max-width:400px;position:sticky;top:90px;max-height:calc(100vh - 110px);overflow-y:auto}.scan-pages{display:flex;flex-direction:column;gap:var(--space-4)}.scan-page-wrapper{background:#fff;border:1px solid var(--border-base);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm)}.scan-page-wrapper img{max-height:85vh;object-fit:contain}.scan-page-number{font-size:var(--text-xs);color:var(--text-tertiary);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-base);background:var(--surface-secondary)}.scan-selection-overlay{position:absolute;top:0;right:0;bottom:0;left:0;cursor:crosshair;z-index:10}.scan-drawing-rect{position:absolute;border:2px dashed var(--color-primary-500);background:#3b82f60f;pointer-events:none;border-radius:2px}.scan-region-rect{position:absolute;border:2px solid;border-radius:3px;transition:background .15s;pointer-events:auto}.scan-region-rect-inner{position:absolute;top:0;right:0;bottom:0;left:0}.scan-region-unanalyzed{border-style:dashed!important}.scan-region-stale{border-color:var(--color-warning-500)!important;border-style:dashed!important;background:#f59e0b0f!important}.scan-region-handle{position:absolute;width:8px;height:8px;background:#fff;border:1.5px solid var(--color-primary-500);border-radius:2px;z-index:2;opacity:0;transition:opacity .15s}.scan-region-rect:hover .scan-region-handle{opacity:1}.scan-region-delete{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;background:var(--color-danger-600);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:3;opacity:0;transition:opacity .15s;padding:0}.scan-region-rect:hover .scan-region-delete{opacity:1}.scan-region-delete:hover{background:var(--color-danger-700, #b91c1c)}.scan-region-badge{position:absolute;top:-1px;left:-1px;font-size:10px;padding:1px 6px;border-radius:0 0 4px;color:var(--text-secondary)}.scan-panel-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-3);padding:var(--space-10) var(--space-4);text-align:center;color:var(--text-tertiary);font-size:var(--text-sm);border:2px dashed var(--border-base);border-radius:var(--radius-lg)}.scan-panel-list{display:flex;flex-direction:column;gap:var(--space-3)}.scan-panel-header{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);font-weight:var(--font-semibold)}.scan-panel-count{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--color-primary-50);color:var(--color-primary-600);font-size:11px;font-weight:var(--font-bold)}.scan-region-card{border:1px solid var(--border-base);border-radius:var(--radius-md);padding:var(--space-3);background:var(--surface-primary)}.scan-region-card-header{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.scan-region-card-index{font-size:var(--text-sm);font-weight:var(--font-bold)}.scan-region-card-action,.scan-region-card-delete{background:none;border:none;cursor:pointer;color:var(--text-tertiary);padding:2px;border-radius:4px;display:flex;transition:color .15s}.scan-region-card-action:hover{color:var(--color-primary-600)}.scan-region-card-action:disabled{opacity:.25;cursor:default}.scan-region-card-delete:hover{color:var(--color-danger-600)}.scan-region-card-analyzing{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-xs);color:var(--text-secondary);padding:var(--space-2) 0}.scan-region-card-error{font-size:var(--text-xs);color:var(--color-danger-600);padding:var(--space-2) 0}.scan-region-card-category{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.scan-category-select{font-size:var(--text-xs);padding:2px 6px;border:1px solid var(--border-base);border-radius:var(--radius-sm);background:var(--surface-primary)}.scan-confidence{font-size:10px;color:var(--text-tertiary);margin-left:auto}.scan-region-card-content{font-size:var(--text-xs);color:var(--text-secondary);line-height:1.5}.scan-extract-text{margin:0;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}.scan-extract-chips{display:flex;flex-wrap:wrap;gap:4px}.scan-extract-chip{padding:1px 8px;border-radius:12px;background:var(--color-success-50);color:var(--color-success-700);font-size:11px}.scan-extract-more{font-size:11px;color:var(--text-tertiary);padding:1px 4px}.scan-expand-btn{font-size:11px;color:var(--color-primary-600);background:none;border:none;cursor:pointer;padding:2px 0;margin-top:2px}.scan-expand-btn:hover{text-decoration:underline}.scan-extract-pattern{margin:0 0 2px;font-family:monospace;font-size:11px}.scan-spinner{width:14px;height:14px;border:2px solid var(--border-base);border-top-color:var(--color-primary-500);border-radius:50%;animation:scan-spin .6s linear infinite}@keyframes scan-spin{to{transform:rotate(360deg)}}.scan-section-sublabel{font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em;margin-bottom:var(--space-2)}@media (max-width: 900px){.scan-workspace-body{flex-direction:column}.scan-panel-pane{width:100%;position:static;max-height:none}}.bp-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:var(--space-5)}.bp-stats-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-3);margin-bottom:var(--space-5)}.bp-stat-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:16px 18px;text-align:center}.bp-stat-num{font-family:var(--serif);font-size:32px;font-weight:900;line-height:1;margin-bottom:4px}.bp-stat-label{font-family:var(--sans);font-size:12px;color:var(--ink-55)}.bp-columns{display:grid;grid-template-columns:1fr 320px;gap:var(--space-4);align-items:start}.bp-col-main{min-width:0}.bp-col-side{position:sticky;top:var(--space-4)}.bp-filters{display:flex;gap:var(--space-2);align-items:center;padding:var(--space-3) 0;border-bottom:.5px solid var(--ink-10)}.bp-kp-list{display:flex;flex-direction:column}.bp-kp-item{border-bottom:.5px solid var(--ink-10)}.bp-kp-item:last-child{border-bottom:none}.bp-kp-main{display:flex;justify-content:space-between;align-items:center;padding:var(--space-3) var(--space-2);transition:background .12s}.bp-kp-main:hover{background:var(--surface)}.bp-importance-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.bp-importance-badge{font-family:var(--sans);font-size:10px;font-weight:500;padding:2px 8px;border-radius:20px;white-space:nowrap}.bp-kp-detail{padding:var(--space-2) var(--space-2) var(--space-3);background:var(--surface);border-radius:0 0 var(--r) var(--r)}.bp-ai-reason{display:flex;align-items:flex-start;gap:var(--space-2);background:var(--blue-bg);border-radius:var(--r);padding:var(--space-2) var(--space-3);font-size:13px;color:var(--blue);line-height:1.65;margin-bottom:var(--space-3)}.bp-ai-reason svg{flex-shrink:0;margin-top:2px}.bp-kp-actions{display:flex;gap:var(--space-3);align-items:flex-end}.bp-score-list{display:flex;flex-direction:column;gap:var(--space-2)}.bp-score-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-1) 0}.bp-score-total{font-family:var(--sans);font-size:14px;font-weight:500;text-align:right;padding-top:var(--space-2);margin-top:var(--space-2);border-top:.5px solid var(--ink-10)}.bp-confused-list{display:flex;flex-direction:column;gap:var(--space-2)}.bp-confused-item{padding:var(--space-2) var(--space-3);background:var(--surface);border-radius:var(--r)}.bp-confused-words{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.bp-confused-word{font-family:var(--sans);font-size:14px;font-weight:500;color:var(--ink);background:var(--white);border:.5px solid var(--ink-10);border-radius:4px;padding:2px 8px}.bp-generating-spinner{width:40px;height:40px;border:3px solid var(--ink-10);border-top-color:var(--blue);border-radius:50%;animation:bp-spin .8s linear infinite;margin:0 auto var(--space-4)}@keyframes bp-spin{to{transform:rotate(360deg)}}@media (max-width: 1024px){.bp-columns{grid-template-columns:1fr}.bp-col-side{position:static}.bp-stats-bar{grid-template-columns:repeat(2,1fr)}}@media (max-width: 640px){.bp-header{flex-direction:column;gap:var(--space-3)}.bp-stats-bar{grid-template-columns:repeat(2,1fr)}.bp-kp-actions{flex-direction:column;align-items:stretch}.bp-filters{flex-wrap:wrap}}.cd-stats-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-3);margin-bottom:var(--space-4)}.cd-stat-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:16px 18px;text-align:center}.cd-stat-num{font-family:var(--serif);font-size:28px;font-weight:900;line-height:1;margin-bottom:4px}.cd-stat-label{font-family:var(--sans);font-size:11px;color:var(--ink-55);margin-top:var(--space-1)}.cd-phase-badge{font-family:var(--sans);font-size:14px;font-weight:500;padding:4px 14px;border-radius:20px;display:inline-block}.cd-timeline{display:flex;align-items:center;gap:0;margin-bottom:var(--space-5);padding:var(--space-3) var(--space-4);background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg)}.cd-timeline-step{display:flex;align-items:center;gap:var(--space-2);flex:1;font-family:var(--sans);font-size:13px;font-weight:400;position:relative}.cd-timeline-step.active{font-weight:500}.cd-timeline-step:after{content:"";flex:1;height:1px;background:var(--ink-10);margin:0 var(--space-2)}.cd-timeline-step:last-child:after{display:none}.cd-timeline-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.cd-timeline-step.active .cd-timeline-dot{box-shadow:0 0 0 3px var(--blue-bg)}.cd-warnings{display:flex;flex-direction:column;gap:var(--space-2);margin-bottom:var(--space-4)}.cd-warning-item{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--amber-bg);border-radius:var(--r);font-family:var(--sans);font-size:13px;color:var(--amber);line-height:1.5}.cd-warning-item svg{flex-shrink:0}.cd-columns{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4);align-items:start}.cd-kp-list{display:flex;flex-direction:column}.cd-kp-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-1);border-bottom:.5px solid var(--ink-10)}.cd-kp-row:last-child{border-bottom:none}.cd-importance-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.cd-student-list{display:flex;flex-direction:column}.cd-student-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-1);border-bottom:.5px solid var(--ink-10)}.cd-student-row:last-child{border-bottom:none}.cd-reflection-card{border-left:3px solid var(--green)}.cd-reflection-icon{width:36px;height:36px;border-radius:50%;background:var(--green-bg);display:flex;align-items:center;justify-content:center;flex-shrink:0}@media (max-width: 1024px){.cd-columns{grid-template-columns:1fr}}@media (max-width: 640px){.cd-stats-bar{grid-template-columns:repeat(2,1fr)}.cd-timeline{flex-direction:column;align-items:flex-start;gap:var(--space-2)}.cd-timeline-step:after{display:none}}.learn-flow-shell{display:flex;flex-direction:column;height:100vh;background:var(--surface);--card-top: 160px}.learn-flow-header{position:sticky;top:0;z-index:100;background:var(--white);border-bottom:.5px solid var(--ink-10);padding:0 var(--space-6)}.learn-flow-header-row{display:flex;align-items:center;justify-content:space-between;height:48px;gap:var(--space-4)}.learn-flow-title{font-family:var(--serif);font-weight:700;font-size:var(--text-sm);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.learn-flow-back{background:none;border:none;cursor:pointer;color:var(--ink-55);font-size:var(--text-sm);padding:var(--space-1) var(--space-2);border-radius:6px;display:flex;align-items:center;gap:var(--space-1)}.learn-flow-back:hover{background:var(--ink-6);color:var(--ink)}.learn-progress-wrapper{padding:var(--space-3) 0}.learn-progress-bar{height:4px;background:var(--ink-10);border-radius:2px;overflow:hidden;margin-bottom:var(--space-3)}.learn-progress-fill{height:100%;background:var(--blue);border-radius:2px;transition:width .4s ease}.learn-stage-tabs{display:flex;gap:var(--space-1)}.learn-stage-tab{flex:1;padding:var(--space-2) var(--space-3);font-family:var(--sans);font-size:12px;font-weight:500;border:none;border-radius:6px;cursor:pointer;text-align:center;transition:all .15s;background:transparent;color:var(--ink-55);white-space:nowrap;min-height:40px;display:flex;align-items:center;justify-content:center}.learn-stage-tab.active{background:var(--blue-bg);color:var(--blue);font-weight:600}.learn-stage-tab.completed{color:var(--ink)}.learn-stage-tab.completed:hover{background:var(--ink-6)}.learn-stage-tab.locked{color:var(--ink-10);cursor:not-allowed;opacity:.6}.learn-stage-content{flex:1;overflow-y:auto;padding:var(--space-6)}.learn-stage-content-narrow{max-width:720px;margin:0 auto;transition:margin-right .2s}@media (min-width: 860px){.learn-stage-content-narrow.card-open{margin-right:380px;margin-left:0}}.learn-color-legend{display:flex;gap:var(--space-4);flex-wrap:wrap;margin-bottom:var(--space-3);font-size:var(--text-xs);color:var(--ink-55)}.learn-legend-item{display:inline-flex;align-items:center;gap:var(--space-1)}.learn-legend-swatch{display:inline-block;border-radius:2px;font-size:0;height:14px;width:24px}.learn-cta-bar{display:flex;justify-content:center;padding:var(--space-6) 0;gap:var(--space-4)}.learn-cta-btn{padding:var(--space-3) var(--space-8);font-family:var(--sans);font-size:var(--text-xs);font-weight:500;border:none;border-radius:8px;cursor:pointer;transition:opacity .15s;background:var(--ink);color:var(--white)}.learn-cta-btn:hover{opacity:.88}.learn-cta-btn:disabled{opacity:.4;cursor:not-allowed}.learn-cta-btn.secondary{background:transparent;color:var(--ink);border:.5px solid var(--ink-10)}.learn-cta-btn.secondary:hover{background:var(--ink-6)}.vocab-looked-up{background:var(--blue-bg)!important;border-bottom-color:var(--blue)!important}.vocab-guessed-correct{background:transparent!important;border-bottom:1.5px solid var(--green)!important;color:var(--ink-55)!important}.vocab-guessed-correct:hover,.vocab-guessed-correct.active{background:var(--green-bg)!important}.vocab-guessed-wrong{background:var(--red-bg)!important;border-bottom:1.5px solid var(--red)!important}.vocab-guessed-wrong:hover,.vocab-guessed-wrong.active{background:#ef444429!important}.learn-return-quiz-fab{position:fixed;bottom:calc(var(--space-6) + env(safe-area-inset-bottom,0px));left:50%;transform:translate(-50%);z-index:100;box-shadow:0 4px 16px #0000002e;font-size:var(--text-sm);padding:var(--space-3) var(--space-6)}@keyframes vocab-flash-anim{0%,to{background:transparent}25%{background:var(--blue-bg);box-shadow:0 0 0 3px var(--blue)}50%{background:transparent;box-shadow:none}75%{background:var(--blue-bg);box-shadow:0 0 0 3px var(--blue)}}.vocab-flash{animation:vocab-flash-anim 1.6s ease-in-out;border-radius:2px}.guess-quiz-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r);padding:var(--space-4);margin:var(--space-3) 0}.reading-bottom-card .guess-quiz-card{border:none;margin:0;padding:var(--space-3) var(--space-4)}.reading-bottom-card .guess-quiz-word{font-size:var(--text-base);margin-bottom:var(--space-1)}.guess-quiz-word{font-family:var(--serif);font-weight:700;font-size:var(--text-lg);color:var(--ink);margin-bottom:var(--space-1)}.guess-quiz-phonetics{font-size:13px;color:var(--ink-55);font-family:monospace;margin-bottom:var(--space-2)}.reading-bottom-card .guess-quiz-phonetics{font-size:11px;margin-bottom:var(--space-1)}.guess-options{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2)}.guess-option{width:100%;padding:var(--space-2) var(--space-3);font-family:var(--sans);font-size:calc(var(--reading-font-size, 16px) * .78);font-weight:400;border:.5px solid var(--ink-10);border-radius:8px;cursor:pointer;text-align:center;background:var(--white);color:var(--ink);transition:all .15s;word-break:break-word;min-height:44px;display:flex;align-items:center;justify-content:center}.guess-option:hover:not(:disabled){border-color:var(--blue);background:var(--blue-bg)}.guess-option:disabled{cursor:default}.guess-option.correct{border-color:var(--green);background:var(--green-bg);color:var(--green);font-weight:500}.guess-option.wrong{border-color:var(--red);background:var(--red-bg);color:var(--red)}.guess-option.reveal-correct{border-color:var(--green);background:var(--green-bg)}.guess-feedback{font-size:var(--text-xs);font-weight:500;margin-top:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:6px}.guess-feedback.correct{background:var(--green-bg);color:var(--green)}.guess-feedback.wrong{background:var(--red-bg);color:var(--red)}.output-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:var(--space-5);margin-bottom:var(--space-4)}.output-card.completed{border-color:var(--green);background:var(--green-bg)}.output-card-type{font-size:11px;font-weight:500;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-55);margin-bottom:var(--space-2)}.output-card-prompt{font-size:var(--text-sm);color:var(--ink);line-height:1.65;margin-bottom:var(--space-3)}.output-card-prompt strong{color:var(--blue);font-weight:600}.output-input-row{display:flex;gap:var(--space-2)}.output-input-row .input{flex:1}.output-feedback{font-size:var(--text-xs);margin-top:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:6px}.output-feedback.success{background:var(--green-bg);color:var(--green)}.output-feedback.hint{background:var(--amber-bg);color:var(--amber)}.quiz-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:var(--space-6)}.quiz-card-counter{font-size:12px;font-weight:500;color:var(--ink-55);margin-bottom:var(--space-3)}.quiz-card-question{font-family:var(--serif);font-weight:700;font-size:var(--text-base);color:var(--ink);margin-bottom:var(--space-4)}.quiz-context{background:var(--blue-bg);border-left:3px solid var(--blue);border-radius:0 var(--r) var(--r) 0;padding:var(--space-3) var(--space-4);margin-bottom:var(--space-4);font-size:var(--text-sm);color:var(--ink);line-height:1.7;font-style:italic}.quiz-options{display:flex;flex-direction:column;gap:var(--space-2)}.quiz-back-link{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--text-xs);color:var(--blue);cursor:pointer;margin-top:var(--space-3);background:none;border:none;padding:0;font-family:var(--sans)}.quiz-back-link:hover{text-decoration:underline}.results-wrapper{text-align:center;padding:var(--space-10) 0}.results-score-big{font-family:var(--serif);font-weight:900;font-size:52px;color:var(--ink);line-height:1;margin-bottom:var(--space-2)}.results-score-label{font-size:var(--text-sm);color:var(--ink-55);margin-bottom:var(--space-8)}.results-stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--space-4);max-width:560px;margin:0 auto var(--space-8)}.results-stat-card{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r);padding:var(--space-4);text-align:center}.results-stat-number{font-family:var(--serif);font-weight:900;font-size:var(--text-2xl);color:var(--ink)}.results-stat-label{font-size:12px;color:var(--ink-55);margin-top:var(--space-1)}.results-schedule-hint{background:var(--blue-bg);color:var(--blue);font-size:var(--text-xs);padding:var(--space-3) var(--space-5);border-radius:var(--r);display:inline-block;margin-bottom:var(--space-8)}.learn-stage-info{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-4)}.learn-stage-info-text{font-size:var(--text-xs);color:var(--ink-55)}.learn-stage-tab:focus-visible,.learn-cta-btn:focus-visible,.guess-option:focus-visible,.learn-flow-back:focus-visible{outline:2px solid var(--blue);outline-offset:2px}@media (max-width: 640px){.learn-stage-content{padding:var(--space-2)}.learn-flow-header{padding:0 var(--space-4)}.learn-stage-tab{font-size:11px;padding:var(--space-1) var(--space-2)}.results-stat-grid{grid-template-columns:repeat(2,1fr)}}.sp-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:var(--space-5)}.sp-countdown{text-align:center;flex-shrink:0}.sp-countdown-num{font-family:var(--serif);font-size:40px;font-weight:900;line-height:1}.sp-countdown-label{font-family:var(--sans);font-size:12px;color:var(--ink-55);margin-top:var(--space-1)}.sp-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-3);margin-bottom:var(--space-5)}.sp-stat{background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg);padding:var(--space-4);text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--space-2)}.sp-stat-num{font-family:var(--serif);font-size:22px;font-weight:900;line-height:1}.sp-stat-label{font-family:var(--sans);font-size:12px;color:var(--ink-55)}.sp-stat-ring{position:relative;display:flex;align-items:center;justify-content:center}.sp-stat-ring svg{transform:rotate(-90deg)}.sp-stat-ring-text{position:absolute;font-family:var(--serif);font-size:16px;font-weight:900}.sp-two-col{display:grid;grid-template-columns:1fr 280px;gap:var(--space-4);align-items:start}.sp-col-main{min-width:0}.sp-col-side{position:sticky;top:16px}.sp-pace-badge{font-family:var(--sans);font-size:10px;font-weight:500;padding:2px 8px;border-radius:20px;margin-top:var(--space-1)}.sp-pace-badge[data-status=ahead]{background:var(--green-bg);color:var(--green)}.sp-pace-badge[data-status=on_track]{background:var(--blue-bg);color:var(--blue)}.sp-pace-badge[data-status=behind]{background:var(--red-bg);color:var(--red)}.sp-timeline{display:flex;align-items:flex-start;margin-bottom:var(--space-5);padding:var(--space-4);background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg)}.sp-timeline-item{flex:1;display:flex;flex-direction:column;align-items:center;position:relative;text-align:center}.sp-timeline-dot{width:12px;height:12px;border-radius:50%;background:var(--ink-10);border:2px solid var(--white);z-index:1}.sp-timeline-item.done .sp-timeline-dot{background:var(--green)}.sp-timeline-item.active .sp-timeline-dot{background:var(--blue);box-shadow:0 0 0 3px var(--blue-bg)}.sp-timeline-line{position:absolute;top:6px;left:50%;width:100%;height:2px;background:var(--ink-10);z-index:0}.sp-timeline-item.done .sp-timeline-line{background:var(--green)}.sp-timeline-label{font-family:var(--sans);font-size:12px;font-weight:500;margin-top:var(--space-2);color:var(--ink-55)}.sp-timeline-item.active .sp-timeline-label{color:var(--blue);font-weight:600}.sp-timeline-item.done .sp-timeline-label{color:var(--green)}.sp-timeline-date{font-family:var(--sans);font-size:10px;color:var(--ink-55);margin-top:2px}.sp-milestones{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);margin-bottom:var(--space-5);padding:var(--space-3) var(--space-4);background:var(--white);border:.5px solid var(--ink-10);border-radius:var(--r-lg)}.sp-milestone-item{display:flex;align-items:center;gap:6px}.sp-side-card{padding:var(--space-4)}.sp-task-list,.sp-kp-list{display:flex;flex-direction:column}.sp-kp-item{display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-1);border-bottom:.5px solid var(--ink-10)}.sp-kp-item:last-child{border-bottom:none}.sp-progress-bar{height:6px;background:var(--ink-6);border-radius:3px;overflow:hidden}.sp-progress-fill{height:100%;background:var(--green);border-radius:3px;transition:width .3s}.sp-help-tip{position:relative;display:inline-flex;align-items:center;margin-left:6px;cursor:help;vertical-align:middle}.sp-help-tip-text{display:none;position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%);background:var(--ink);color:var(--white);font-family:var(--sans);font-size:12px;font-weight:400;line-height:1.5;padding:8px 12px;border-radius:8px;width:220px;white-space:normal;z-index:20;pointer-events:none}.sp-help-tip-text:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:5px solid transparent;border-top-color:var(--ink)}.sp-help-tip:hover .sp-help-tip-text{display:block}@media (max-width: 768px){.sp-two-col{grid-template-columns:1fr}.sp-col-side{position:static}}@media (max-width: 640px){.sp-header{flex-direction:column;gap:var(--space-3)}.sp-countdown{display:flex;align-items:baseline;gap:var(--space-2)}.sp-countdown-num{font-size:28px}.sp-stats{grid-template-columns:1fr}}
