*{box-sizing:border-box}body{margin:0;background:#f6f7f9;color:#1b2430;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans SC,Microsoft YaHei,sans-serif;font-size:15px;line-height:1.5}.app{max-width:1000px;margin:0 auto;padding:16px}h1{font-size:20px;margin:0 0 8px}.hint{color:#5b6675;font-size:13px;margin:4px 0}.dim{color:#6b7686;font-size:13px}.error{color:#a01b12;font-weight:600;font-size:13px}.card{background:#fff;border:1px solid #dfe4ea;border-radius:10px;padding:12px;margin-bottom:12px}.file-label input{font-size:15px;min-height:44px}.queue{list-style:none;margin:8px 0 0;padding:0}.queue li{display:flex;flex-wrap:wrap;gap:10px;padding:6px 0;border-bottom:1px dashed #e3e7ee;font-size:13px}.queue li:last-child{border-bottom:none}.status-pending{color:#6b7686}.status-running{color:#1d4ed8;font-weight:600}.status-done{color:#116c3d;font-weight:600}.status-failed{color:#a01b12;font-weight:600}table{width:100%;border-collapse:collapse;margin-top:8px;font-size:13px}th,td{text-align:left;padding:6px 8px;border-bottom:1px solid #eef1f5;vertical-align:top}th{color:#5b6675;font-weight:600;white-space:nowrap}.materials tbody tr{cursor:pointer}.materials tbody tr:hover,.row-expanded{background:#f0f6ff}.row-broken{color:#a01b12}.app-header{display:flex;align-items:center;justify-content:space-between}.reading-page{max-width:1000px;margin:0 auto;padding:12px}.reading-header{display:flex;align-items:center;gap:12px;padding:6px 0 12px}.reading-header strong{font-size:17px}.reading-body{display:flex;gap:14px;align-items:flex-start}.page-image{flex:1 1 52%;background:#fff;border:1px solid #dfe4ea;border-radius:10px;padding:8px;min-height:240px;display:flex;align-items:center;justify-content:center}.page-canvas{max-width:100%;height:auto;display:block}.sentence-pane{flex:1 1 48%;display:flex;flex-direction:column;gap:10px}.sentences{display:flex;flex-direction:column;gap:10px}.sentence{background:#fff;border:2px solid #dfe4ea;border-radius:12px;padding:12px 14px;margin:0;font-size:28px;line-height:1.45;cursor:pointer}.sentence.active{border-color:#1d4ed8;background:#eef4ff}.sentence .word{cursor:pointer;border-radius:4px}.sentence .word:hover{background:#dce7ff}.sentence-actions{display:flex;gap:12px}button{font-family:inherit;cursor:pointer}.btn-primary,.btn-rec,.btn-nav,.btn-finish,.btn-ghost{border-radius:14px;border:1px solid #c6cedb;background:#fff;color:#1b2430;font-size:17px;padding:14px 20px;min-height:56px}.btn-primary{background:#1d4ed8;border-color:#1d4ed8;color:#fff;font-weight:700;font-size:20px;min-height:64px}.btn-rec{background:#fff4e8;border-color:#e8b46a;font-weight:600}.btn-finish{background:#116c3d;border-color:#116c3d;color:#fff;font-weight:700;font-size:20px}.btn-ghost{font-size:14px;padding:8px 14px;min-height:44px}button:disabled{opacity:.55;cursor:default}.image-only-placeholder{background:#fff;border:2px dashed #c6cedb;border-radius:12px;padding:24px 16px;text-align:center}.placeholder-text{font-size:22px;color:#5b6675;margin:4px 0 14px}.recordings{display:flex;flex-direction:column;gap:8px}.recording-player{width:100%;height:44px}.reading-footer{display:flex;justify-content:space-between;gap:14px;padding:14px 0}.start-card{text-align:center;padding:28px 16px}.start-card .btn-primary{min-width:240px;margin-top:12px}.calendar-page{max-width:640px;margin:0 auto;padding:12px}.streak{margin-left:auto;background:#eef4ff;color:#1d4ed8;border-radius:999px;padding:4px 12px;font-weight:700;font-size:14px}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin:12px 0}.calendar-week{text-align:center;font-size:12px;color:#5b6675;padding:4px 0}.calendar-cell{aspect-ratio:1;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid #e3e7ee;border-radius:10px;font-size:14px;position:relative}.calendar-cell.blank{background:transparent;border:none}.calendar-cell.met{background:#e7f5ec;border-color:#116c3d;font-weight:700}.calendar-cell.met:after{content:"";position:absolute;bottom:5px;width:8px;height:8px;border-radius:50%;background:#116c3d}.calendar-cell.today{outline:2px solid #1d4ed8;outline-offset:-2px}.finish-banner{border-color:#116c3d;display:flex;flex-wrap:wrap;gap:10px;align-items:center}.met-dot{color:#116c3d;font-weight:700}.storage-row{display:flex;align-items:center;justify-content:space-between;gap:12px}@media (max-width: 760px){.reading-body{flex-direction:column}.page-image,.sentence-pane{flex:1 1 auto;width:100%}}.header-actions{display:flex;gap:8px}.parent-entry{color:#5b6675}.listen-card{text-align:center}.listen-play{min-width:260px;min-height:80px;font-size:22px;margin:10px 0}.listen-actions{display:flex;justify-content:center;gap:10px}.listen-actions .toggled{background:#eef4ff;border-color:#1d4ed8;color:#1d4ed8;font-weight:700}.listen-sentences .sentence{font-size:22px}.goal-row{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-top:8px}.goal-row label{display:flex;align-items:center;gap:6px;font-size:15px}.goal-row input,.goal-row select{font-size:15px;padding:6px 8px;width:72px}.cell-title{cursor:pointer}.gate-page{max-width:520px;margin:0 auto;padding:12px}.gate-card{text-align:center;padding:28px 16px;display:flex;flex-direction:column;gap:14px;align-items:center}.gate-hold{min-width:260px;transition:background .15s}.gate-hold.holding{background:#93b4f5}.gate-question{font-size:34px;font-weight:700;margin:0}.gate-input{font-size:28px;width:160px;text-align:center;padding:8px;border:2px solid #c6cedb;border-radius:10px}.page-img{max-width:100%;max-height:70vh;height:auto;border-radius:6px}.filter-bar{margin:8px 0;display:flex;flex-direction:column;gap:8px}.chip-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.chip-label{font-size:13px;color:#5b6675;min-width:32px}.chip{border:1.5px solid #c6cedb;background:#fff;color:#1b2430;border-radius:999px;padding:6px 14px;font-size:14px;font-weight:600;min-height:36px;cursor:pointer}.chip:hover{border-color:#1d4ed8}.chip-active{background:#1d4ed8;border-color:#1d4ed8;color:#fff}.chip-mine{border-color:#e8b46a;box-shadow:0 0 0 2px #fff4e8}.header-nav{margin-left:auto;display:flex;gap:10px;align-items:center}.header-nav .btn-primary,.header-nav .btn-finish{min-height:44px;font-size:16px;padding:8px 18px}
