:root{--bg:#f5f5f4;--bg-elevated:#fff;--surface:#fff;--surface-hover:#ececea;--border:#e3e2df;--text:#1a1a1a;--text-muted:#6b6b68;--text-faint:#9a9a96;--accent:#4b5de4;--accent-text:#fff;--accent-soft:#e8eafc;--success:#1f9d55;--success-soft:#e4f6ea;--warning:#b5890a;--warning-soft:#fbf1dc;--danger:#c13c3c;--danger-soft:#fbe9e9;--radius-sm:10px;--radius-md:14px;--radius-lg:20px;--shadow-sm:0 1px 2px #0000000a;--shadow-md:0 4px 16px #0000000f;--font-size-xs:12px;--font-size-sm:13px;--font-size-base:14.5px;--font-size-md:16px;--font-size-lg:18px;--font-size-xl:21px}[data-theme=dark]{--bg:#0c0c0e;--bg-elevated:#151517;--surface:#17171a;--surface-hover:#1f1f23;--border:#272729;--text:#ededec;--text-muted:#9a9a98;--text-faint:#6c6c6a;--accent:#7b8cf0;--accent-text:#0c0c0e;--accent-soft:#232a4d;--success:#3fbf72;--success-soft:#16281d;--warning:#d6a93a;--warning-soft:#2e2512;--danger:#e2605f;--danger-soft:#2e1717;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 4px 20px #0006}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:var(--font-size-base);-webkit-font-smoothing:antialiased;line-height:1.5;transition:background .15s,color .15s}h1,h2,h3,p{margin:0}button{font-family:inherit}#root{min-height:100vh}.app-shell{background:var(--bg);flex-direction:column;max-width:480px;min-height:100vh;margin:0 auto;display:flex;position:relative}.screen{flex:1;padding:28px 20px 100px;overflow-y:auto}.screen-title{font-size:var(--font-size-xl);letter-spacing:-.01em;margin-bottom:20px;font-weight:600}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:20px}.empty-state{text-align:center;color:var(--text-muted);padding:48px 16px}.empty-state-icon{width:36px;height:36px;color:var(--text-faint);margin-bottom:14px}.empty-state p{font-size:var(--font-size-sm);line-height:1.5}.bottom-nav{background:var(--bg-elevated);border-top:1px solid var(--border);width:100%;max-width:480px;padding:8px 10px calc(10px + env(safe-area-inset-bottom));display:flex;position:fixed;bottom:0;left:50%;transform:translate(-50%)}.nav-item{color:var(--text-faint);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;flex-direction:column;flex:1;align-items:center;gap:4px;padding:6px 0;font-size:11px;font-weight:500;display:flex}.nav-item svg{width:21px;height:21px}.nav-item.active{color:var(--accent)}.settings-section{margin-bottom:26px}.settings-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:10px;font-size:11px;font-weight:600}.segmented{background:var(--surface-hover);border-radius:var(--radius-md);gap:4px;padding:4px;display:flex}.segmented button{border-radius:calc(var(--radius-md) - 4px);color:var(--text-muted);font-size:var(--font-size-sm);cursor:pointer;background:0 0;border:none;flex:1;padding:9px 0;font-weight:500;transition:background .15s,color .15s}.segmented button.active{background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm)}.row{justify-content:space-between;align-items:center;gap:12px;display:flex}.row+.row{margin-top:14px}.row-label{font-size:var(--font-size-base);font-weight:500}.row-desc{font-size:var(--font-size-sm);color:var(--text-muted);margin-top:2px}.badge{background:var(--success-soft);color:var(--success);font-size:var(--font-size-xs);white-space:nowrap;border-radius:999px;flex-shrink:0;align-items:center;padding:4px 10px;font-weight:600;display:inline-flex}.badge.tone-warning{background:var(--warning-soft);color:var(--warning)}.badge.tone-danger{background:var(--danger-soft);color:var(--danger)}.text-faint{color:var(--text-faint);font-size:var(--font-size-xs)}input[type=text],input[type=number],input[type=time],input[type=date],select{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:var(--font-size-base);width:100%;padding:9px 10px}input:focus,select:focus{outline:2px solid var(--accent);outline-offset:-1px}.field{margin-bottom:16px}.field label{font-size:var(--font-size-sm);color:var(--text-muted);margin-bottom:6px;display:block}.input-compact{text-align:right;flex-shrink:0;width:76px}.template-row{flex-wrap:wrap;gap:8px;margin-bottom:14px;display:flex}.chip-button{border:1px solid var(--border);background:var(--surface);color:var(--text-muted);font-size:var(--font-size-xs);cursor:pointer;border-radius:999px;padding:7px 13px}.chip-button:hover{color:var(--text);border-color:var(--accent)}.criteria-row{flex-direction:column;gap:10px;margin-bottom:10px;display:flex}.criteria-row-main{align-items:center;gap:8px;display:flex}.criteria-row-main input[type=text]{flex:1}.criteria-weight{flex-shrink:0;align-items:center;gap:4px;width:70px;display:flex}.criteria-weight input{text-align:right;width:100%}.criteria-weight span{color:var(--text-muted);font-size:var(--font-size-sm)}.icon-button{background:var(--surface-hover);color:var(--text-muted);border-radius:var(--radius-sm);cursor:pointer;border:none;flex-shrink:0;width:32px;height:32px;font-size:18px;line-height:1}.checkbox-row{font-size:var(--font-size-sm);color:var(--text-muted);align-items:center;gap:8px;display:flex}.add-row-button{border:1px dashed var(--border);width:100%;color:var(--text-muted);border-radius:var(--radius-md);font-size:var(--font-size-sm);cursor:pointer;background:0 0;margin-bottom:10px;padding:12px}.add-row-button:hover{color:var(--accent);border-color:var(--accent)}.weight-total{text-align:right;margin-bottom:18px}.weight-total.danger{color:var(--danger)}.result-banner{flex-direction:column;gap:6px;display:flex}.result-banner.tone-success{background:var(--success-soft);border-color:#0000}.result-banner.tone-success .row-label{color:var(--success)}.result-banner.tone-warning{background:var(--warning-soft);border-color:#0000}.result-banner.tone-warning .row-label{color:var(--warning)}.result-banner.tone-danger{background:var(--danger-soft);border-color:#0000}.result-banner.tone-danger .row-label{color:var(--danger)}.color-swatches{flex-wrap:wrap;gap:10px;display:flex}.color-swatch{cursor:pointer;border:2px solid #0000;border-radius:50%;width:30px;height:30px}.color-swatch.selected{border-color:var(--text)}.slot-row{align-items:center;gap:8px;margin-bottom:10px;display:flex}.slot-row select,.slot-row input[type=time]{flex:1}.primary-button{background:var(--accent);width:100%;color:var(--accent-text);border-radius:var(--radius-md);font-size:var(--font-size-md);cursor:pointer;border:none;padding:14px;font-weight:600}.secondary-button{border:1px solid var(--border);width:100%;color:var(--text);border-radius:var(--radius-md);font-size:var(--font-size-base);cursor:pointer;background:0 0;margin-top:10px;padding:13px;font-weight:500}.danger-button{border:1px solid var(--danger);width:100%;color:var(--danger);border-radius:var(--radius-md);font-size:var(--font-size-base);cursor:pointer;background:0 0;margin-top:24px;padding:13px;font-weight:500}.header-row{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.text-button{color:var(--accent);font-size:var(--font-size-base);cursor:pointer;background:0 0;border:none;padding:4px 0}.course-card{cursor:pointer;align-items:center;gap:14px;margin-bottom:12px;display:flex}.course-dot{border-radius:50%;flex-shrink:0;width:12px;height:12px}.course-card-title{font-weight:600}.course-card-sub{font-size:var(--font-size-sm);color:var(--text-muted);margin-top:2px}.semester-banner{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.session-row{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.session-status-buttons{gap:6px;display:flex}.session-status-button{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-elevated);width:34px;height:34px;color:var(--text-faint);cursor:pointer;font-size:15px}.session-status-button.present.active{background:var(--success-soft);border-color:var(--success);color:var(--success)}.session-status-button.absent.active{background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}.session-status-button.cancelled.active{background:var(--surface-hover);border-color:var(--text-faint);color:var(--text-muted)}
