:root{--bg-color: #0b1121;--bg-color-right: #0b1121;--text-primary: #ffffff;--text-secondary: #94a3b8;--border-color: #1e293b;--primary-color: #2563eb;--primary-hover: #1d4ed8;--input-bg: rgba(255, 255, 255, .05);--error-color: #ef4444}body{margin:0;font-family:Inter,sans-serif;font-size:14px;background-color:var(--bg-color);color:var(--text-primary)}.app-container{display:flex;min-height:100vh}.hero-section{flex:1;padding:4rem;display:flex;flex-direction:column;justify-content:space-between;border-right:1px dashed var(--border-color);background-image:radial-gradient(circle at 10px 10px,rgba(255,255,255,.05) 2px,transparent 0);background-size:40px 40px}.hero-header{display:flex;align-items:center;gap:.75rem;font-weight:600;font-size:1.1rem}.logo-icon{background-color:var(--primary-color);padding:.5rem;border-radius:.5rem;display:flex;align-items:center;justify-content:center}.hero-content{max-width:450px;margin-top:-10vh}.hero-title{font-size:2.25rem;line-height:1.2;margin-bottom:1.5rem;font-weight:700}.hero-title span{color:var(--text-secondary)}.hero-description{color:var(--text-secondary);font-size:.95rem;line-height:1.6;margin-bottom:3rem}.feature-list{display:flex;flex-direction:column;gap:1.5rem}.feature-item{display:flex;align-items:center;gap:1rem;color:var(--text-secondary);font-size:.85rem}.feature-icon{background-color:var(--input-bg);padding:.5rem;border-radius:.5rem;border:1px solid var(--border-color);display:flex;align-items:center;justify-content:center}.hero-footer{color:var(--text-secondary);font-size:.85rem}.auth-section{flex:1;display:flex;align-items:center;justify-content:center;padding:4rem;background-color:var(--bg-color-right)}.auth-card{width:100%;max-width:400px}.auth-title{font-size:1.25rem;font-weight:700;margin-bottom:.25rem}.auth-subtitle{color:var(--text-secondary);margin-bottom:2rem;font-size:.85rem}.form-group{margin-bottom:1.5rem}.form-label{display:block;font-size:.7rem;text-transform:uppercase;color:var(--text-secondary);margin-bottom:.5rem;letter-spacing:.05em}.role-toggle{display:flex;gap:.5rem}.role-btn{flex:1;background:transparent;border:1px solid var(--border-color);color:var(--text-secondary);padding:.5rem;border-radius:.5rem;font-size:.85rem;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;transition:all .2s}.role-btn.active{background-color:var(--input-bg);color:var(--text-primary);border-color:var(--primary-color)}.role-btn:hover{background-color:var(--input-bg)}.input-wrapper{position:relative;display:flex;align-items:center}.input-icon{position:absolute;left:1rem;color:var(--text-secondary)}.input-action{position:absolute;right:1rem;background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:0;display:flex;align-items:center}.form-input{width:100%;background-color:transparent;border:1px solid var(--border-color);color:var(--text-primary);padding:.6rem 1rem .6rem 2.5rem;border-radius:.5rem;font-size:.85rem;outline:none;transition:border-color .2s}select.form-input{appearance:none}select.form-input option{background-color:var(--bg-color);color:var(--text-primary)}.form-input:focus{border-color:var(--primary-color)}.form-input::placeholder{color:var(--text-secondary)}.submit-btn{width:100%;background-color:var(--primary-color);color:#fff;border:none;padding:.6rem;border-radius:.5rem;font-size:.9rem;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;transition:background-color .2s;margin-top:1rem}.submit-btn:hover{background-color:var(--primary-hover)}.submit-btn:disabled{opacity:.7;cursor:not-allowed}.auth-footer{margin-top:1.5rem;text-align:center;color:var(--text-secondary);font-size:.95rem}.auth-link{color:var(--text-primary);text-decoration:none;font-weight:500}.auth-link:hover{text-decoration:underline}.error-message{color:var(--error-color);font-size:.85rem;margin-bottom:1rem}.dashboard-container{padding:2rem;max-width:1200px;margin:0 auto}.dashboard-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem;padding-bottom:1rem;border-bottom:1px solid var(--border-color)}.logout-btn{background:transparent;border:1px solid var(--border-color);color:var(--text-primary);padding:.5rem 1rem;border-radius:.5rem;cursor:pointer;transition:all .2s}.logout-btn:hover{background-color:var(--input-bg)}@media(max-width:768px){.app-container{flex-direction:column}.hero-section{padding:2rem;border-right:none;border-bottom:1px dashed var(--border-color)}.auth-section{padding:2rem}.hero-content{margin-top:2rem}}.auth-page{min-height:100vh;display:flex;background-color:#09101e;font-family:Inter,system-ui,-apple-system,sans-serif}.auth-left-panel{display:none;width:42%;border-right:1px solid rgba(255,255,255,.06);flex-direction:column;justify-content:space-between;padding:3rem;position:relative;overflow:hidden}.auth-bg-pattern{position:absolute;inset:0;pointer-events:none;opacity:.025;background-image:radial-gradient(circle,rgba(255,255,255,.8) 1px,transparent 1px);background-size:32px 32px}.auth-bg-fade{position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(to right,transparent,rgba(255,255,255,.1),transparent)}.auth-logo-header{display:flex;align-items:center;gap:.625rem;position:relative;z-index:1}.auth-mobile-logo{display:flex;align-items:center;justify-content:center;gap:.625rem;position:relative;z-index:1;width:100%;max-width:24rem;margin-bottom:2rem}.auth-logo-icon{width:1.75rem;height:1.75rem;border-radius:.5rem;background-color:#2563eb;display:flex;align-items:center;justify-content:center;flex-shrink:0}.auth-logo-text{color:#fff;font-weight:600;font-size:.875rem}.auth-hero{position:relative;z-index:1;flex:1;display:flex;flex-direction:column;justify-content:center}.auth-hero-text h1{font-size:1.875rem;font-weight:700;color:#fff;line-height:1.375;margin:0}.auth-hero-text h1 span{color:#94a3b8}.auth-hero-desc{color:#64748b;font-size:.875rem;margin:1rem 0 0;line-height:1.625;max-width:22rem}.auth-role-info-container{display:flex;flex-direction:column;gap:.75rem;margin-top:2rem}.auth-role-info{display:flex;align-items:flex-start;gap:.75rem;padding:.875rem;border-radius:.75rem;background-color:#ffffff08;border:1px solid rgba(255,255,255,.06)}.auth-role-icon{width:1.5rem;height:1.5rem;border-radius:.5rem;background-color:#ffffff0f;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:.125rem;color:#94a3b8}.auth-role-title{color:#cbd5e1;font-size:.875rem;font-weight:500;margin:0}.auth-role-desc{color:#475569;font-size:.75rem;line-height:1.625;margin:.125rem 0 0}.auth-credit{position:relative;z-index:1;display:inline-flex;align-items:center;gap:.375rem;color:#64748b;font-size:.75rem;text-decoration:none;transition:color .2s}.auth-credit:hover{color:#cbd5e1}.auth-right-panel{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2.5rem 1.5rem;overflow-y:auto}.auth-form-container{width:100%;max-width:24rem;margin:0 auto}.auth-heading{margin-bottom:2rem;text-align:center}.auth-heading h2{color:#fff;font-size:1.25rem;font-weight:700;margin:0}.auth-heading p{color:#64748b;font-size:.875rem;margin:.35rem 0 0}.auth-error{margin-bottom:1.25rem;display:flex;align-items:flex-start;gap:.625rem;border-radius:.75rem;padding:.75rem 1rem;font-size:.875rem;background-color:#ef444414;border:1px solid rgba(239,68,68,.2);color:#f87171}.auth-success{margin-bottom:1.25rem;display:flex;align-items:flex-start;gap:.625rem;border-radius:.75rem;padding:.75rem 1rem;font-size:.875rem;background-color:#16a34a14;border:1px solid rgba(22,163,74,.22);color:#16a34a}.auth-error-icon{flex-shrink:0;margin-top:.125rem}.auth-form{display:flex;flex-direction:column;gap:1.25rem}.auth-field{display:flex;flex-direction:column;gap:.375rem}.auth-label{display:block;color:#64748b;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em}.auth-label-row{display:flex;align-items:center;justify-content:space-between}.auth-input-wrap{position:relative}.auth-input-icon{position:absolute;left:.875rem;top:50%;transform:translateY(-50%);color:#64748b;pointer-events:none;z-index:1}.auth-input{width:100%;background-color:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:.75rem;padding:.75rem 1rem .75rem 2.5rem;color:#fff;font-size:.875rem;outline:none;transition:border-color .2s,background-color .2s;box-sizing:border-box}.auth-input::placeholder{color:#475569}.auth-input:focus{border-color:#2563eb99;background-color:#ffffff0f}.auth-input-select{appearance:none;cursor:pointer}.auth-input-select option{background-color:#0f1a2e}.auth-password-toggle{position:absolute;right:.75rem;top:50%;transform:translateY(-50%);color:#64748b;background:none;border:none;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}.auth-password-toggle:hover{color:#cbd5e1}.auth-input.has-toggle{padding-right:2.5rem}.auth-password-strength{position:absolute;left:0;right:0;bottom:-1rem;display:flex;gap:.25rem}.auth-strength-bar{height:.25rem;flex:1;border-radius:999px;background-color:#ffffff14;transition:background-color .2s}.auth-strength-bar.red{background-color:#ef4444}.auth-strength-bar.orange{background-color:#fb923c}.auth-strength-bar.yellow{background-color:#facc15}.auth-strength-bar.green{background-color:#4ade80}.auth-field.has-strength .auth-input-wrap{margin-bottom:1.25rem}.auth-submit-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.75rem;border-radius:.75rem;background-color:#2563eb;color:#fff;font-weight:500;font-size:.875rem;border:none;cursor:pointer;transition:background-color .2s}.auth-submit-btn:hover{background-color:#3b82f6}.auth-submit-btn:disabled{opacity:.5;cursor:not-allowed}.auth-spinner{width:1rem;height:1rem;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:auth-spin .7s linear infinite;margin:0 auto}@keyframes auth-spin{to{transform:rotate(360deg)}}.auth-link,.auth-switch{text-align:center;color:#475569;font-size:.875rem;margin-top:1.5rem}.auth-link a,.auth-switch a{color:#cbd5e1;text-decoration:none;font-weight:500}.auth-link a:hover,.auth-switch a:hover{color:#fff}.auth-forgot-password{background:none;border:none;padding:0;font-size:.75rem;color:#94a3b8;cursor:pointer}.auth-forgot-password:hover{color:#cbd5e1}@media(min-width:640px){.auth-right-panel{padding-left:2.5rem;padding-right:2.5rem}}@media(min-width:1024px){.auth-left-panel{display:flex}.auth-right-panel{padding-left:4rem;padding-right:4rem}.auth-mobile-logo{display:none}}@media(max-width:768px){.auth-input,.auth-input-select{font-size:16px}}:root{--blue-50: #eff6ff;--blue-100: #dbeafe;--blue-200: #bfdbfe;--blue-500: #3b82f6;--blue-600: #2563eb;--blue-700: #1d4ed8;--blue-800: #1e40af;--bg: #f6f8fb;--surface: #ffffff;--surface-2: #f8fafc;--border: #e5e7eb;--border-strong: #d1d5db;--text: #0f172a;--text-2: #334155;--muted: #64748b;--subtle: #94a3b8;--green-50: #ecfdf5;--green-600: #16a34a;--green-700: #047857;--amber-50: #fffbeb;--amber-600: #d97706;--red-50: #fef2f2;--red-200: #fecaca;--red-600: #dc2626;--red-700: #b91c1c;--admin-bg: #0b1220;--admin-panel: #0f172a;--admin-border: #1e293b;--admin-hover: #1e293b;--admin-text: #cbd5e1;--admin-muted: #64748b;--r-xs: 6px;--r-sm: 8px;--r: 12px;--r-lg: 16px;--r-xl: 20px;--r-pill: 999px;--sh-xs: 0 1px 2px rgba(15, 23, 42, .04);--sh-sm: 0 1px 3px rgba(15, 23, 42, .06), 0 1px 2px rgba(15, 23, 42, .04);--sh: 0 4px 12px rgba(15, 23, 42, .06), 0 1px 3px rgba(15, 23, 42, .05);--sh-md: 0 8px 24px rgba(15, 23, 42, .08);--sh-lg: 0 20px 48px rgba(15, 23, 42, .16);--sidebar-w: 232px;--topbar-h: 60px;--maxw: 1440px;--font: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit}.app-shell{min-height:100vh;background:var(--bg)}.app-topbar{position:sticky;top:0;z-index:40;height:var(--topbar-h);background:#ffffffdb;backdrop-filter:saturate(180%) blur(10px);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:20px;padding:0 24px}.brand{display:flex;align-items:center;gap:10px;min-width:0}.brand-logo{width:32px;height:32px;border-radius:9px;background:var(--blue-600);display:grid;place-items:center;color:#fff;flex:none;box-shadow:0 2px 6px #2563eb59}.brand-name{font-weight:700;font-size:14px;line-height:1.1;letter-spacing:-.01em}.brand-sub{font-size:11px;color:var(--muted);line-height:1.1}.topnav{display:flex;align-items:center;gap:4px;margin:0 auto}.topnav a{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:var(--r-sm);font-size:14px;font-weight:500;color:var(--text-2);text-decoration:none;transition:background .15s,color .15s}.topnav a:hover{background:var(--surface-2);color:var(--text)}.topnav a.active{background:var(--blue-50);color:var(--blue-700);font-weight:600}.topbar-right{display:flex;align-items:center;gap:10px;margin-left:auto}.campus-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--r-pill);background:var(--blue-600);color:#fff;font-size:12.5px;font-weight:600;white-space:nowrap}.campus-badge.ghost{background:var(--blue-50);color:var(--blue-700)}.avatar{width:34px;height:34px;border-radius:var(--r-pill);background:var(--blue-100);color:var(--blue-700);display:grid;place-items:center;font-weight:700;font-size:13px;border:1px solid var(--blue-200);cursor:pointer;flex:none}.app-body{display:flex;max-width:var(--maxw);margin:0 auto}.app-sidebar{width:var(--sidebar-w);flex:none;padding:22px 14px;border-right:1px solid var(--border);min-height:calc(100vh - var(--topbar-h));position:sticky;top:var(--topbar-h);align-self:flex-start;height:calc(100vh - var(--topbar-h))}.side-link{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:var(--r-sm);font-size:14px;font-weight:500;color:var(--text-2);text-decoration:none;margin-bottom:2px;transition:background .15s,color .15s}.side-link:hover{background:var(--surface-2);color:var(--text)}.side-link.active{background:var(--blue-50);color:var(--blue-700);font-weight:600}.side-link.active svg{color:var(--blue-600)}.side-section-label{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--subtle);padding:0 12px;margin:18px 0 8px}.side-spacer{flex:1}.app-main{flex:1;min-width:0;padding:28px 32px 64px}.page-pad{max-width:1180px;margin:0 auto;width:100%}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:22px;flex-wrap:wrap}.page-title{font-size:26px;font-weight:700;letter-spacing:-.02em;margin:0}.page-sub{font-size:14.5px;color:var(--muted);margin:6px 0 0}.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:30px 0 14px}.section-title{font-size:16px;font-weight:700;letter-spacing:-.01em;margin:0}.section-title.first{margin-top:0}.link-btn{background:none;border:none;cursor:pointer;color:var(--blue-600);font-weight:600;font-size:13.5px;padding:0;font-family:inherit}.link-btn:hover{color:var(--blue-700);text-decoration:underline}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:inherit;font-size:14px;font-weight:600;padding:9px 16px;border-radius:var(--r-sm);border:1px solid transparent;cursor:pointer;transition:background .15s,border-color .15s,color .15s,box-shadow .15s,transform .05s;white-space:nowrap;line-height:1.2}.btn:active{transform:translateY(.5px)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--blue-600);color:#fff;box-shadow:0 1px 2px #2563eb40}.btn-primary:hover:not(:disabled){background:var(--blue-700)}.btn-secondary{background:var(--surface);color:var(--text-2);border-color:var(--border-strong)}.btn-secondary:hover:not(:disabled){background:var(--surface-2);border-color:var(--muted)}.btn-ghost{background:transparent;color:var(--text-2)}.btn-ghost:hover:not(:disabled){background:var(--surface-2)}.btn-danger{background:var(--surface);color:var(--red-600);border-color:var(--red-200)}.btn-danger:hover:not(:disabled){background:var(--red-50)}.btn-sm{padding:6px 12px;font-size:13px}.btn-lg{padding:11px 20px;font-size:15px}.btn-block{width:100%}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-sm)}.card-pad{padding:20px}.card-hover{transition:box-shadow .18s,border-color .18s,transform .18s}.card-hover:hover{box-shadow:var(--sh-md);border-color:#dbe2ec;transform:translateY(-2px)}.grid{display:grid;gap:18px}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--r-pill);font-size:11.5px;font-weight:600;line-height:1.4;background:var(--surface-2);color:var(--text-2);border:1px solid var(--border)}.badge-blue{background:var(--blue-50);color:var(--blue-700);border-color:var(--blue-100)}.badge-green{background:var(--green-50);color:var(--green-700);border-color:#bbf7d0}.badge-amber{background:var(--amber-50);color:var(--amber-600);border-color:#fde68a}.badge-red{background:var(--red-50);color:var(--red-700);border-color:var(--red-200)}.badge-gray{background:#f1f5f9;color:var(--muted);border-color:var(--border)}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:18px 20px;box-shadow:var(--sh-sm)}.stat-top{display:flex;align-items:center;justify-content:space-between}.stat-ico{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;background:var(--blue-50);color:var(--blue-600)}.stat-num{font-size:30px;font-weight:800;letter-spacing:-.02em;margin-top:12px;line-height:1}.stat-label{font-size:13px;color:var(--muted);margin-top:6px}.stat-delta{font-size:12px;font-weight:600;color:var(--green-600)}.poll-card{display:flex;flex-direction:column;padding:18px}.poll-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.poll-title{font-size:15.5px;font-weight:700;letter-spacing:-.01em;margin:0}.poll-desc{font-size:13px;color:var(--muted);margin:8px 0 14px;line-height:1.5;min-height:38px}.poll-stats{display:flex;gap:10px;margin-bottom:14px}.poll-stat{flex:1;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);padding:10px 12px;text-align:left}.poll-stat .n{font-size:22px;font-weight:800;letter-spacing:-.02em;line-height:1}.poll-stat .l{font-size:11.5px;color:var(--muted);margin-top:4px}.poll-stat.is-on{background:var(--blue-50);border-color:var(--blue-100)}.poll-stat.is-on .n{color:var(--blue-700)}.poll-actions{display:flex;gap:8px;margin-top:auto}.event-row{display:flex;align-items:center;gap:16px;padding:16px 18px}.event-main{min-width:0;flex:1}.event-title{font-size:15px;font-weight:700;margin:0 0 6px;letter-spacing:-.01em}.event-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;color:var(--muted)}.event-right{display:flex;align-items:center;gap:14px;flex:none}.attend-count{font-size:12.5px;color:var(--muted);white-space:nowrap;display:inline-flex;align-items:center;gap:5px}.row-divider{height:1px;background:var(--border)}.field{display:flex;flex-direction:column;gap:6px}.field-label{font-size:13px;font-weight:600;color:var(--text-2)}.input,.textarea,.select{width:100%;font-family:inherit;font-size:14px;color:var(--text);padding:10px 12px;border:1px solid var(--border-strong);border-radius:var(--r-sm);background:var(--surface);transition:border-color .15s,box-shadow .15s;outline:none}.input:focus,.textarea:focus,.select:focus{border-color:var(--blue-600);box-shadow:0 0 0 3px #2563eb26}.textarea{resize:vertical;min-height:120px;line-height:1.55}.input-counter{font-size:12px;color:var(--subtle);text-align:right}.input-counter.warn{color:var(--amber-600)}.switch{display:inline-flex;align-items:center;gap:10px;cursor:pointer;user-select:none}.switch input{position:absolute;opacity:0;width:0;height:0}.switch .track{width:40px;height:23px;border-radius:var(--r-pill);background:#cbd5e1;position:relative;transition:background .18s;flex:none}.switch .knob{position:absolute;top:2.5px;left:2.5px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:var(--sh-sm);transition:transform .18s}.switch input:checked+.track{background:var(--blue-600)}.switch input:checked+.track .knob{transform:translate(17px)}.switch .switch-label{font-size:14px;font-weight:500;color:var(--text-2)}.tabs{display:inline-flex;gap:4px;padding:4px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-pill)}.tab{padding:7px 16px;border-radius:var(--r-pill);border:none;background:transparent;font-family:inherit;font-size:13.5px;font-weight:600;color:var(--muted);cursor:pointer;transition:background .15s,color .15s}.tab:hover{color:var(--text-2)}.tab.active{background:var(--blue-600);color:#fff;box-shadow:0 1px 2px #2563eb4d}.notice{display:flex;gap:11px;align-items:flex-start;padding:13px 16px;border-radius:var(--r);font-size:13.5px;line-height:1.5}.notice-blue{background:var(--blue-50);border:1px solid var(--blue-100);color:var(--blue-800)}.notice-blue svg{color:var(--blue-600);flex:none;margin-top:1px}.notice-amber{background:var(--amber-50);border:1px solid #fde68a;color:#92400e}.error-banner{background:var(--red-50);border:1px solid var(--red-200);color:var(--red-700);padding:10px 14px;border-radius:var(--r-sm);font-size:13.5px;margin-bottom:16px}.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:48px 24px;border:1px dashed var(--border-strong);border-radius:var(--r-lg);background:var(--surface)}.empty-ico{width:52px;height:52px;border-radius:14px;background:var(--blue-50);color:var(--blue-600);display:grid;place-items:center;margin-bottom:16px}.empty-title{font-size:16px;font-weight:700;margin:0 0 6px}.empty-sub{font-size:13.5px;color:var(--muted);margin:0 0 18px;max-width:380px;line-height:1.55}.empty.sm{padding:32px 20px}.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-sm);overflow:hidden}.table-scroll{overflow-x:auto}.tbl{width:100%;border-collapse:collapse}.tbl th{text-align:left;font-size:11.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);padding:13px 16px;border-bottom:1px solid var(--border);background:var(--surface-2);white-space:nowrap}.tbl td{padding:14px 16px;border-bottom:1px solid #f1f5f9;font-size:14px;vertical-align:middle}.tbl tr:last-child td{border-bottom:none}.tbl tr:hover td{background:#fafbfd}.tbl .num{font-weight:700;font-variant-numeric:tabular-nums}.modal-overlay{position:fixed;inset:0;z-index:100;background:#0f172a80;backdrop-filter:blur(2px);display:grid;place-items:center;padding:20px;animation:fade .15s ease}.modal{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--sh-lg);width:100%;max-width:460px;max-height:90vh;overflow:auto;animation:pop .16s ease}.modal.wide{max-width:560px}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:20px 22px 0}.modal-title{font-size:17px;font-weight:700;margin:0;letter-spacing:-.01em}.modal-sub{font-size:13px;color:var(--muted);margin:4px 0 0}.modal-body{padding:18px 22px}.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:0 22px 22px}.modal-close{background:none;border:none;cursor:pointer;color:var(--muted);padding:4px;border-radius:var(--r-xs);display:grid;place-items:center}.modal-close:hover{background:var(--surface-2);color:var(--text)}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes pop{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}.stars{display:inline-flex;gap:4px}.star{background:none;border:none;cursor:pointer;padding:0;line-height:1;font-size:26px;color:#d1d5db;transition:color .12s,transform .08s}.star.on{color:#f59e0b}.star:hover{transform:scale(1.12)}.stars.display .star{cursor:default;font-size:18px}.stars.display .star:hover{transform:none}.choice-row{display:flex;gap:10px}.choice{flex:1;padding:11px 14px;border-radius:var(--r-sm);border:1px solid var(--border-strong);background:var(--surface);font-family:inherit;font-size:14px;font-weight:600;color:var(--text-2);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:all .15s}.choice:hover{border-color:var(--muted)}.choice.on-yes{background:var(--blue-600);border-color:var(--blue-600);color:#fff}.choice.on-no{background:#475569;border-color:#475569;color:#fff}.donut-wrap{display:flex;align-items:center;gap:22px;flex-wrap:wrap}.legend{display:flex;flex-direction:column;gap:10px}.legend-item{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--text-2)}.legend-dot{width:11px;height:11px;border-radius:3px;flex:none}.legend-val{font-weight:700;margin-left:auto;padding-left:18px}.bars{display:flex;align-items:flex-end;gap:18px;height:200px;padding:8px 4px 0}.bar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;height:100%;justify-content:flex-end}.bar-stack{display:flex;align-items:flex-end;gap:6px;height:100%;width:100%;justify-content:center}.bar{width:26px;border-radius:6px 6px 0 0;background:var(--blue-600);transition:height .4s ease;min-height:2px}.bar.alt{background:var(--blue-200)}.bar-label{font-size:12px;color:var(--muted);font-weight:500}.spinner{width:18px;height:18px;border:2px solid rgba(37,99,235,.25);border-top-color:var(--blue-600);border-radius:50%;animation:spin .7s linear infinite}.spinner.lg{width:30px;height:30px;border-width:3px}.center-screen{min-height:100vh;display:grid;place-items:center}.bars{display:flex;flex-direction:column;align-items:stretch;gap:15px;height:auto;padding:16px 0 2px}.bar-row{display:flex;flex-direction:column;gap:7px}.bar-label{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:inherit;color:inherit;font-weight:400}.bar-name{font-size:13.5px;font-weight:600;color:var(--text)}.bar-val{font-size:12.5px;color:var(--muted);white-space:nowrap}.bar-track{height:10px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-pill);overflow:hidden}.bar-fill{height:100%;background:var(--blue-600);border-radius:var(--r-pill);transition:width .4s ease;min-width:4px}.dot{width:11px;height:11px;border-radius:3px;flex:none;display:inline-block}.dot.blue{background:var(--blue-600)}.dot.gray{background:#e2e8f0}.fb-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.fb-event{font-weight:700;font-size:14.5px;color:var(--text)}.table{width:100%;border-collapse:collapse}.table th{text-align:left;font-size:11.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);padding:13px 16px;border-bottom:1px solid var(--border);background:var(--surface-2);white-space:nowrap}.table td{padding:14px 16px;border-bottom:1px solid #f1f5f9;font-size:14px;vertical-align:middle}.table tr:last-child td{border-bottom:none}.table tr:hover td{background:#fafbfd}.table .num{font-weight:700;font-variant-numeric:tabular-nums;text-align:right}.cell-idea{font-weight:600;color:var(--text);max-width:360px}.cell-name{font-weight:600;color:var(--text);display:inline-flex;align-items:center;gap:10px}.muted-cell{color:var(--muted);font-size:13.5px}.nomargin{margin:0}.optional{color:var(--subtle);font-weight:400;font-size:12.5px}.avatar.sm{width:30px;height:30px;font-size:12px;border-radius:9px}.identity-card{display:flex;align-items:center;gap:18px}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}.search-box{position:relative;display:inline-flex;align-items:center;flex:1;min-width:200px;max-width:340px;color:var(--muted)}.search-box svg{position:absolute;left:12px;pointer-events:none}.search-input{width:100%;padding:9px 12px 9px 36px;border:1px solid var(--border-strong);border-radius:var(--r-sm);font-family:inherit;font-size:14px;color:var(--text);background:var(--surface)}.search-input:focus{outline:none;border-color:var(--blue-600);box-shadow:0 0 0 3px #2563eb1f}.inline-edit{display:flex;align-items:center;gap:8px}.input-sm{padding:7px 10px;font-size:13px;border:1px solid var(--border-strong);border-radius:var(--r-xs);font-family:inherit;color:var(--text);background:var(--surface)}.input-sm:focus{outline:none;border-color:var(--blue-600);box-shadow:0 0 0 3px #2563eb1f}.select-sm{padding:6px 28px 6px 10px;font-size:13px;border:1px solid var(--border-strong);border-radius:var(--r-xs);font-family:inherit;color:var(--text);background:var(--surface);cursor:pointer}.select-sm:focus{outline:none;border-color:var(--blue-600);box-shadow:0 0 0 3px #2563eb1f}@keyframes spin{to{transform:rotate(360deg)}}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:200;background:var(--text);color:#fff;padding:12px 18px;border-radius:var(--r-pill);font-size:13.5px;font-weight:600;box-shadow:var(--sh-lg);display:inline-flex;align-items:center;gap:8px;animation:pop .18s ease}.menu-btn{display:none;background:none;border:1px solid var(--border);border-radius:var(--r-sm);padding:7px;cursor:pointer;color:var(--text-2)}.scrim{display:none}@media(max-width:1100px){.grid-3,.grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}.topnav{display:none}}@media(max-width:860px){.app-sidebar{position:fixed;top:0;left:0;height:100vh;z-index:60;background:var(--surface);transform:translate(-100%);transition:transform .22s ease;box-shadow:var(--sh-lg);padding-top:18px}.app-shell.nav-open .app-sidebar{transform:none}.app-shell.nav-open .scrim{display:block;position:fixed;inset:0;background:#0f172a66;z-index:55}.menu-btn{display:inline-grid;place-items:center}.app-main{padding:20px 18px 56px}}@media(max-width:700px){.grid-3,.grid-2,.grid-4{grid-template-columns:minmax(0,1fr)}.page-title{font-size:22px}.event-row{flex-direction:column;align-items:flex-start;gap:12px}.event-right{width:100%;justify-content:space-between}.donut-wrap{flex-direction:column;align-items:flex-start}.campus-badge .campus-text-long{display:none}.app-topbar{gap:10px;padding:0 14px}.brand-sub{display:none}.topbar-right{gap:8px}.topbar-right .suggest-label{display:none}.campus-badge{padding:6px 10px}}@media(max-width:480px){.brand>div{display:none}.app-topbar{gap:8px;padding:0 10px}.identity-card{flex-direction:column;align-items:flex-start;gap:14px}}.app-shell.admin{background:var(--bg)}.app-sidebar.dark{background:var(--admin-panel);border-right:1px solid var(--admin-border)}.app-sidebar.dark .brand-name{color:#fff}.app-sidebar.dark .brand-sub{color:var(--admin-muted)}.app-sidebar.dark .side-section-label{color:#475569}.app-sidebar.dark .side-link{color:var(--admin-text)}.app-sidebar.dark .side-link:hover{background:var(--admin-hover);color:#fff}.app-sidebar.dark .side-link.active{background:var(--blue-600);color:#fff}.app-sidebar.dark .side-link.active svg{color:#fff}.admin-sidebar-head{display:flex;align-items:center;gap:10px;padding:4px 12px 18px}.admin-account{display:flex;align-items:center;gap:10px;padding:12px;border-top:1px solid var(--border);margin-top:8px}.admin-account .avatar{background:var(--blue-600);color:#fff;border:none}.admin-account .nm{font-size:13px;font-weight:600;color:var(--text);line-height:1.2}.admin-account .rl{font-size:11.5px;color:var(--muted)}
