:root{--color-primary:#cc3634;--color-ink:#575656;--color-muted:#b2b2b2;--color-bg:#f7f7f6;--color-surface:#fff;--color-border:#d8d8d8;--color-danger:#a02826;--font:system-ui, -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;--radius:8px;--shadow:0 1px 4px #0000000f}*,:before,:after{box-sizing:border-box}html,body{min-height:100%;font-family:var(--font);color:var(--color-ink);background:var(--color-bg);margin:0;font-size:15px;line-height:1.45}#root{min-height:100vh}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;cursor:pointer}.page-loading{background:var(--color-bg);place-items:center;min-height:100vh;display:grid}.page-loading-inner{border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;width:28px;height:28px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.auth-page{background:var(--color-bg);place-items:center;min-height:100vh;padding:24px;display:grid}.auth-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);width:100%;max-width:400px;box-shadow:var(--shadow);padding:28px}.auth-card-wide{max-width:440px}.auth-brand{align-items:flex-start;gap:14px;margin-bottom:22px;display:flex}.auth-logo{border-radius:var(--radius);background:var(--color-primary);color:#fff;flex-shrink:0;place-items:center;width:48px;height:48px;display:grid}.auth-title{color:var(--color-ink);font-size:1.1rem;font-weight:600}.auth-sub{color:var(--color-muted);margin:6px 0 0;font-size:.88rem}.form{flex-direction:column;gap:14px;display:flex}.form-grid{grid-template-columns:1fr 1fr;gap:14px 16px;display:grid}.field{flex-direction:column;gap:6px;display:flex}.field-span2{grid-column:1/-1}.field label{color:var(--color-ink);font-size:.82rem;font-weight:500}.field input,.field select,.field textarea{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);color:var(--color-ink);padding:10px 12px}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid color-mix(in srgb, var(--color-primary) 35%, transparent);outline-offset:0;border-color:var(--color-primary)}.field-row{align-items:stretch;gap:8px;display:flex}.field-row input{flex:1}.form-error{color:var(--color-danger);margin:0;font-size:.88rem}.btn{border-radius:var(--radius);border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:10px 14px;font-size:.92rem;font-weight:600;display:inline-flex}.btn-primary{background:var(--color-primary);color:#fff;border-color:color-mix(in srgb, var(--color-primary) 85%, #000)}.btn-primary:hover:not(:disabled){filter:brightness(.97)}.btn-primary:disabled{opacity:.65;cursor:not-allowed}.btn-muted{background:var(--color-surface);border-color:var(--color-border);color:var(--color-ink)}.btn-ghost{color:var(--color-ink);background:0 0;border-color:#0000}.btn-ghost:hover{background:color-mix(in srgb, var(--color-muted) 22%, transparent)}.auth-footer{text-align:center;color:var(--color-muted);margin:18px 0 0;font-size:.9rem}.dashboard{background:var(--color-bg);flex-direction:column;min-height:100vh;display:flex}.dashboard-header{background:var(--color-surface);border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;gap:16px;padding:14px 20px;display:flex}.dashboard-brand{align-items:center;gap:12px;display:flex}.dashboard-brand-mark{background:var(--color-primary);border-radius:2px;width:10px;height:32px}.dashboard-product{color:var(--color-ink);font-size:.98rem;font-weight:600}.dashboard-meta{color:var(--color-muted);font-size:.78rem}.dashboard-user{align-items:center;gap:12px;display:flex}.dashboard-header-extras{align-items:center;gap:8px;display:flex}.dashboard-chat-link{background:color-mix(in srgb, var(--color-primary) 16%, transparent);width:40px;height:40px;color:var(--color-primary);border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.dashboard-chat-link:hover{background:color-mix(in srgb, var(--color-primary) 26%, transparent);text-decoration:none}.rating-stars{gap:4px;margin-top:6px;display:flex}.rating-star{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);width:36px;height:36px;color:var(--color-muted);padding:0;font-size:1.1rem;line-height:1}.rating-star.is-on{color:var(--color-primary);border-color:color-mix(in srgb, var(--color-primary) 45%, var(--color-border));background:color-mix(in srgb, var(--color-primary) 10%, var(--color-surface))}.dashboard-username{color:var(--color-ink);font-size:.88rem}.dashboard-body{flex-direction:column;flex:1;width:100%;max-width:1200px;margin:0 auto;display:flex}.dashboard-nav{border-bottom:1px solid var(--color-border);background:var(--color-bg);flex-wrap:wrap;gap:4px 12px;padding:12px 20px 0;display:flex}.dashboard-nav-link{color:var(--color-muted);border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 2px 10px;font-size:.9rem}.dashboard-nav-link:hover{color:var(--color-ink);text-decoration:none}.dashboard-nav-link.is-active{color:var(--color-primary);border-bottom-color:var(--color-primary);font-weight:600}.dashboard-main{flex:1;padding:20px}.page{max-width:900px}.page-wide{max-width:1100px}.page-heading{color:var(--color-ink);margin:0 0 8px;font-size:1.25rem;font-weight:600}.page-lead{color:var(--color-muted);max-width:52ch;margin:0 0 18px;font-size:.92rem}.muted{color:var(--color-muted)}.text-link{font-weight:600}.link-grid{flex-direction:column;gap:10px;margin:0;padding-left:18px;display:flex}.table-wrap{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);overflow:auto}.table{border-collapse:collapse;width:100%;font-size:.88rem}.table th,.table td{text-align:left;border-bottom:1px solid var(--color-border);padding:10px 12px}.table th{background:color-mix(in srgb, var(--color-muted) 12%, var(--color-surface));color:var(--color-ink);font-weight:600}.table tbody tr:last-child td{border-bottom:none}.table tbody tr:hover td{background:color-mix(in srgb, var(--color-muted) 8%, transparent)}.notice-list{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);margin:0;padding:0;list-style:none}.notice{border-bottom:1px solid var(--color-border);padding:12px 14px}.notice:last-child{border-bottom:none}.notice.is-unread{background:color-mix(in srgb, var(--color-primary) 6%, var(--color-surface))}.notice-title{font-size:.9rem;font-weight:600}.notice-body{color:var(--color-ink);margin:6px 0 0;font-size:.88rem}.notice-meta{color:var(--color-muted);margin-top:8px;font-size:.78rem}.stat-list{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin:0;display:grid}.stat-list>div{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);padding:12px 14px}.stat-list dt{color:var(--color-muted);margin:0;font-size:.78rem;font-weight:500}.stat-list dd{color:var(--color-ink);margin:4px 0 0;font-size:1.15rem;font-weight:600}.admin-actions{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin-top:8px;display:grid}.admin-action-card{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);color:var(--color-ink);box-shadow:var(--shadow);padding:14px 16px;text-decoration:none;display:block}.admin-action-card:hover{border-color:color-mix(in srgb, var(--color-primary) 40%, var(--color-border));text-decoration:none}.admin-action-card strong{color:var(--color-ink);margin-bottom:4px;font-size:.95rem;display:block}.admin-action-card span{color:var(--color-muted);font-size:.82rem}.admin-subnav{flex-wrap:wrap;gap:8px;margin-bottom:16px;display:flex}.admin-subnav button{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);color:var(--color-ink);padding:8px 12px;font-size:.88rem}.admin-subnav button.is-active{border-color:var(--color-primary);color:var(--color-primary);font-weight:600}.modal-backdrop{z-index:1000;background:#00000059;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal-panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);width:100%;max-width:440px;max-height:90vh;padding:20px;overflow:auto;box-shadow:0 8px 24px #0000001f}.modal-panel h2{margin:0 0 14px;font-size:1.1rem}.filter-row{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;display:flex}.filter-row select,.filter-row input[type=search]{border:1px solid var(--color-border);border-radius:var(--radius);font:inherit;padding:8px 10px}.nav-badge{text-align:center;background:var(--color-primary);color:#fff;border-radius:9px;min-width:18px;margin-left:4px;padding:0 5px;font-size:.72rem;font-weight:700;line-height:18px;display:inline-block}.student-chat-panel{border:1px solid var(--color-border);border-radius:var(--radius);background:var(--color-surface);flex-direction:column;max-width:720px;min-height:420px;display:flex;overflow:hidden}.student-chat-toolbar{border-bottom:1px solid var(--color-border);align-items:center;gap:12px;padding:10px 14px;display:flex}.student-chat-title{text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.95rem;font-weight:600;overflow:hidden}.student-chat-messages{background:var(--color-bg);flex:1;max-height:52vh;padding:14px;overflow:auto}.student-msg{border-radius:var(--radius);background:var(--color-surface);border:1px solid var(--color-border);max-width:85%;margin-bottom:10px;padding:10px 12px;font-size:.9rem}.student-msg.is-mine{background:color-mix(in srgb, var(--color-primary) 12%, var(--color-surface));border-color:color-mix(in srgb, var(--color-primary) 35%, var(--color-border));margin-left:auto}.student-msg-sender{color:var(--color-primary);margin-bottom:4px;font-size:.78rem;font-weight:600}.student-msg-time{color:var(--color-muted);margin-top:6px;font-size:.72rem}.student-chat-input-row{border-top:1px solid var(--color-border);background:var(--color-surface);align-items:flex-end;gap:8px;padding:12px;display:flex}.student-chat-input-row textarea{border:1px solid var(--color-border);border-radius:var(--radius);font:inherit;resize:vertical;flex:1;min-height:44px;padding:10px 12px}@media (width<=640px){.form-grid{grid-template-columns:1fr}.dashboard-nav{gap:8px}}
