@import"https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@300;400;500;600;700&family=Inter:wght@300;400;500;600;700&display=swap";:root{--color-primary: #7c3aed;--color-primary-hover: #6d28d9;--color-primary-light: #ede9fe;--color-success: #059669;--color-success-light: #d1fae5;--color-danger: #dc2626;--color-danger-light: #fef2f2;--color-bg: #f8fafc;--color-surface: #ffffff;--color-text: #0f172a;--color-text-secondary: #64748b;--color-border: #e2e8f0;--radius: 12px;--radius-sm: 8px;--shadow: 0 1px 3px rgba(0,0,0,.1);--shadow-lg: 0 10px 15px -3px rgba(0,0,0,.1);--transition: all .2s ease}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Noto Sans TC,Inter,system-ui,sans-serif;background:var(--color-bg);color:var(--color-text);line-height:1.6}.app-layout{min-height:100vh;display:flex;flex-direction:column}.app-header{background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:0 24px;height:64px;display:flex;align-items:center;justify-content:space-between;box-shadow:var(--shadow)}.app-header h1{font-size:1.25rem;font-weight:700;background:linear-gradient(135deg,#7c3aed,#ec4899);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.app-main{flex:1;max-width:1200px;width:100%;margin:0 auto;padding:24px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;border-radius:var(--radius-sm);font-size:.875rem;font-weight:500;cursor:pointer;transition:var(--transition);border:none}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover{background:var(--color-primary-hover)}.btn-secondary{background:var(--color-bg);color:var(--color-text);border:1px solid var(--color-border)}.btn-danger{background:var(--color-danger);color:#fff}.btn-danger:hover{background:#b91c1c}.btn-ghost{background:transparent;color:var(--color-text-secondary)}.btn-ghost:hover{background:var(--color-bg)}.btn-sm{padding:6px 12px;font-size:.8rem}.btn:disabled{opacity:.5;cursor:not-allowed}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:20px}.form-group{margin-bottom:20px}.form-label{display:block;font-size:.875rem;font-weight:500;margin-bottom:6px}.form-input{width:100%;padding:10px 14px;border:1px solid var(--color-border);border-radius:var(--radius-sm);font-size:.9rem;outline:none;font-family:inherit}.form-input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #7c3aed1a}.form-select{width:100%;padding:10px 14px;border:1px solid var(--color-border);border-radius:var(--radius-sm);font-size:.9rem;outline:none;font-family:inherit;background:#fff}.login-container{min-height:100vh;display:flex;justify-content:center;align-items:center;background:linear-gradient(135deg,#7c3aed,#ec4899);padding:20px}.login-card{background:#fff;border-radius:16px;padding:48px;width:100%;max-width:420px;box-shadow:0 25px 50px -12px #00000040}.login-card h2{font-size:1.75rem;font-weight:700;margin-bottom:8px;text-align:center}.login-card p{color:var(--color-text-secondary);text-align:center;margin-bottom:32px}.login-error{background:#fef2f2;border:1px solid #fecaca;color:var(--color-danger);padding:10px 14px;border-radius:var(--radius-sm);font-size:.85rem;margin-bottom:16px}.data-table{width:100%;border-collapse:collapse}.data-table th,.data-table td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--color-border)}.data-table th{font-size:.8rem;font-weight:600;text-transform:uppercase;color:var(--color-text-secondary);background:var(--color-bg)}.data-table tr:hover td{background:#f8fafc}.role-badge{padding:2px 10px;border-radius:12px;font-size:.75rem;font-weight:600}.role-admin{background:var(--color-primary-light);color:var(--color-primary)}.role-student{background:var(--color-success-light);color:var(--color-success)}.modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000;animation:fadeIn .2s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal{background:#fff;border-radius:16px;padding:32px;width:100%;max-width:480px;box-shadow:var(--shadow-lg)}.modal h3{font-size:1.25rem;font-weight:700;margin-bottom:24px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}.loading{display:flex;justify-content:center;align-items:center;padding:60px;color:var(--color-text-secondary)}.loading-spinner{width:32px;height:32px;border:3px solid var(--color-border);border-top:3px solid var(--color-primary);border-radius:50%;animation:spin .8s linear infinite;margin-right:12px}@keyframes spin{to{transform:rotate(360deg)}}
