*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#f7f8f2;--bg2:#eff0ea;--bg3:#e3e4dc;--paper:#fff;--ink:#0d0d0d;--ink2:#3a3a30;--muted:#888878;--green:#2d8a3e;--greenl:#4caf62;--greenbg:#e8f5ea;--red:#b83030;--redbg:#fae8e8;--amber:#9a6c00}body{background:var(--bg);color:var(--ink);flex-direction:column;min-height:100vh;font-family:DM Sans,sans-serif;font-size:18px;display:flex}.App{flex-direction:column;min-height:100vh;display:flex}.body{flex:1;display:flex}.header{background:var(--bg2);z-index:100;flex-shrink:0;align-items:stretch;height:68px;display:flex;position:sticky;top:0}.header-brand{cursor:pointer;flex-shrink:0;justify-content:center;align-items:center;width:183px;margin-right:-30px;display:flex}.header-brand img{width:110px}.brand-word{letter-spacing:-.03em;font-size:18px;font-weight:600}.brand-word span{color:var(--green)}.header-mid{flex:1;align-items:center;gap:28px;padding:0 34px;display:flex}.h-date{letter-spacing:.06em;color:var(--muted);font-family:DM Mono,monospace;font-size:14px}.h-live{color:var(--green);align-items:center;gap:8px;font-family:DM Mono,monospace;font-size:14px;display:flex}.live-sq{background:var(--greenl);width:8px;height:8px;animation:2s ease-in-out infinite blink}@keyframes blink{0%,to{opacity:1}50%{opacity:.15}}.sidebar{background:var(--bg2);flex-direction:column;flex-shrink:0;align-items:center;gap:6px;width:90px;height:calc(100vh - 68px);padding:20px 0;display:flex;position:sticky;top:68px}.nav-item{cursor:pointer;width:76px;height:76px;color:var(--muted);justify-content:center;align-items:center;transition:background .12s,color .12s;display:flex;position:relative}.nav-item:hover{background:var(--bg3);color:var(--ink2)}.nav-item.active{background:var(--greenbg);color:var(--green)}.nav-item:after{content:attr(data-label);background:var(--ink);color:#fff;letter-spacing:.06em;white-space:nowrap;opacity:0;pointer-events:none;z-index:200;padding:7px 14px;font-family:DM Mono,monospace;font-size:15px;transition:opacity .15s;position:absolute;top:50%;left:calc(100% + 14px);transform:translateY(-50%)}.nav-item:hover:after{opacity:1}.sb-sp{flex:1}.main{flex:1;justify-content:center;display:flex;overflow-y:auto}.main-inner{width:100%;max-width:1200px;padding:34px 39px 101px}.sec-head{margin-bottom:17px}.sec-title{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-family:DM Mono,monospace;font-size:14px;font-weight:500}.filter-bar{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:22px;display:flex}.chip{letter-spacing:.05em;cursor:pointer;color:var(--muted);background:var(--bg2);border:none;padding:7px 20px;font-family:DM Mono,monospace;font-size:14px;transition:all .12s}.chip:hover{background:var(--bg3);color:var(--ink)}.chip.on{background:var(--greenbg);color:var(--green)}.chip.warn{background:var(--redbg);color:var(--red)}.grid{grid-template-columns:repeat(4,1fr);gap:11px;margin-bottom:45px;display:grid}.card{background:var(--paper);cursor:pointer;transition:background .15s,transform .18s;position:relative}.card:hover{transform:translateY(-3px)}.card.active{background:#f9fff8}.card.active:before{content:"";background:var(--greenl);z-index:1;width:3px;position:absolute;top:0;bottom:0;left:0}.card.wide{grid-column:span 2}.card-promo{background:var(--greenbg);text-align:center;cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:14px;padding:28px;display:flex}.card-promo:hover{background:#daf0de;transform:translateY(-3px)}.promo-title{color:var(--green);font-size:20px;font-weight:600;line-height:1.4}.promo-sub{color:var(--green);opacity:.7;letter-spacing:.07em;font-family:DM Mono,monospace;font-size:14px}.card-img{justify-content:center;align-items:flex-end;height:151px;display:flex;position:relative;overflow:hidden}.card.wide .card-img{justify-content:space-around;height:165px}.ci-1{background:#cfe0cc}.ci-2{background:#dedad0}.ci-3{background:#c5d4e0}.ci-4{background:#ddd0da}.ci-5{background:#ccdacf}.ci-6{background:#dbd8c2}.ci-7{background:#c5d9d9}.ci-8{background:#d8cede}.ci-9{background:#d2dcc8}.ci-a{background:#dcd4c0}.ci-b{background:#c8d4dc}.ci-c{background:#d4ccd8}.img-tag{letter-spacing:.07em;z-index:2;padding:4px 8px;font-family:DM Mono,monospace;font-size:13px;font-weight:500;position:absolute;top:13px;left:13px}.t-ait{color:#8aeee0;background:#12463cd1}.t-se{color:#f5b0b0;background:#520e0ed1}.t-wd{color:#c5b8f5;background:#241054d1}.t-bd{color:#f0d888;background:#543204d1}.t-li{color:#f5b0d5;background:#520e32d1}.img-dot{z-index:2;width:10px;height:10px;position:absolute;top:14px;right:14px}.d-on{background:var(--greenl);animation:2s infinite blink}.d-re{background:var(--green);opacity:.65}.d-off{background:#82826e4d}.px{z-index:1;image-rendering:pixelated;position:relative}.card-body{padding:18px 20px 20px}.card-who{align-items:center;gap:10px;margin-bottom:8px;display:flex}.av{width:28px;height:28px;color:var(--muted);background:var(--bg2);flex-shrink:0;justify-content:center;align-items:center;font-family:DM Mono,monospace;font-size:11px;font-weight:500;display:flex}.av-g{background:var(--greenbg);color:var(--green)}.av-r{background:var(--redbg);color:var(--red)}.who-name{letter-spacing:-.01em;font-size:17px;font-weight:600}.who-dept{color:var(--muted);margin-left:3px;font-family:DM Mono,monospace;font-size:13px}.card-task{margin-bottom:12px;font-size:17px;font-weight:500;line-height:1.3}.prog-bar{background:var(--bg2);height:3px;margin-bottom:6px}.prog-fill{height:100%}.pf-g{background:var(--green)}.pf-y{background:var(--amber)}.pf-r{background:var(--red)}.prog-meta{color:var(--muted);justify-content:space-between;font-family:DM Mono,monospace;font-size:13px;display:flex}.card-ddl{margin-top:6px;font-family:DM Mono,monospace;font-size:13px}.ddl-u{color:var(--red)}.ddl-s{color:var(--amber)}.ddl-o{color:var(--green)}.rooms-grid{grid-template-columns:repeat(3,1fr);gap:11px;display:grid}.room-card{background:var(--paper);cursor:pointer;padding:25px 28px;transition:background .15s,transform .18s;position:relative}.room-card:hover{transform:translateY(-3px)}.room-card.featured{background:var(--greenbg);grid-column:span 2}.room-card.featured:before{content:"";background:var(--green);width:3px;position:absolute;top:0;bottom:0;left:0}.room-card.empty{opacity:.5}.room-card.create{background:var(--bg2);flex-direction:column;grid-column:span 2;justify-content:center;align-items:center;gap:8px;min-height:130px;display:flex}.room-name{letter-spacing:-.01em;margin-bottom:6px;font-size:18px;font-weight:600}.room-meta{color:var(--muted);align-items:center;gap:17px;margin-bottom:14px;font-family:DM Mono,monospace;font-size:13px;display:flex}.room-live{color:var(--green);align-items:center;gap:7px;display:flex}.room-live-dot{background:var(--greenl);width:8px;height:8px;animation:2s infinite blink}.room-avatars{gap:6px;display:flex}.rav{background:var(--bg2);width:36px;height:36px;color:var(--muted);justify-content:center;align-items:center;font-family:DM Mono,monospace;font-size:11px;font-weight:500;display:flex}.rav-g{background:var(--greenbg);color:var(--green)}.room-tags{gap:7px;margin-top:14px;display:flex}.room-tag{background:var(--bg2);color:var(--muted);letter-spacing:.05em;padding:3px 10px;font-family:DM Mono,monospace;font-size:13px}.room-tag.green{color:var(--green);background:#2d8a3e26}.room-join{color:var(--green);letter-spacing:.06em;margin-top:17px;font-family:DM Mono,monospace;font-size:13px}.room-create-label{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-family:DM Mono,monospace;font-size:11px}.room-create-sub{color:var(--muted);font-size:13px}.rooms-page .rooms-grid{grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:8px;display:grid}.rooms-page .rcard{background:var(--paper);cursor:pointer;transition:background .15s,transform .18s;position:relative;overflow:hidden}.rooms-page .rcard:hover{transform:translateY(-2px)}.rooms-page .rcard.live:before{content:"";background:var(--greenl);z-index:1;width:2px;position:absolute;top:0;bottom:0;left:0}.rooms-page .rcard.live{background:#f9fff8}.rooms-page .rcard.w2{grid-column:span 2}.rooms-page .rcard.w3{grid-column:span 3}.rooms-page .rcard.w4{grid-column:span 4}.rooms-page .rcard-header{justify-content:space-between;align-items:center;padding:10px 16px 8px;display:flex}.rooms-page .rh-left{align-items:center;gap:8px;display:flex}.rooms-page .rh-course{letter-spacing:.08em;padding:3px 7px;font-family:DM Mono,monospace;font-size:9px;font-weight:500}.rooms-page .rhc-ait{color:#1a6b63;background:#12463c2e}.rooms-page .rhc-se{color:#8b2020;background:#520e0e2e}.rooms-page .rhc-bd{color:#7a5008;background:#5432042e}.rooms-page .rhc-wd{color:#4a3380;background:#2410542e}.rooms-page .rh-name{letter-spacing:.09em;text-transform:uppercase;color:var(--ink2);font-family:DM Mono,monospace;font-size:11px}.rooms-page .rh-right{color:var(--green);align-items:center;gap:5px;font-family:DM Mono,monospace;font-size:10px;display:flex}.rooms-page .rh-dot{background:var(--greenl);width:7px;height:7px;animation:2s ease-in-out infinite blink}.rooms-page .rcard-stage{justify-content:space-evenly;align-items:flex-end;padding:0 20px;display:flex;position:relative;overflow:hidden}.rooms-page .rcard-stage.sh-sm,.rooms-page .rcard-stage.sh-md{height:151px}.rooms-page .rcard-stage.sh-lg{height:160px}.rooms-page .rcard-stage.sh-full{justify-content:space-around;align-items:flex-end;height:210px;padding:0 40px}.rooms-page .ri-1{background:#ddeadb}.rooms-page .ri-2{background:#e6e0ef}.rooms-page .ri-3{background:#e2ddd5}.rooms-page .ri-4{background:#d8e6ea}.rooms-page .ri-5{background:#e8e4d8}.rooms-page .rfull-member{flex-direction:column;align-items:center;gap:8px;padding-bottom:14px;display:flex}.rooms-page .rfull-member.afk{opacity:.3}.rooms-page .rfm-name{letter-spacing:.06em;text-transform:uppercase;color:var(--ink2);font-family:DM Mono,monospace;font-size:12px}.rooms-page .rfm-prog{color:var(--green);font-family:DM Mono,monospace;font-size:13px;font-weight:500}.rooms-page .rfm-prog.urgent{color:var(--red)}.rooms-page .rfm-afk{color:var(--muted);font-family:DM Mono,monospace;font-size:12px}.rooms-page .rcard-body{border-top:1.5px solid var(--bg2);padding:13px 16px 16px}.rooms-page .rcard-title{color:var(--ink);letter-spacing:-.01em;font-size:17px;font-weight:600;line-height:1.3}.rooms-page .rcard-title-row{align-items:center;gap:10px;margin-bottom:5px;display:flex}.rooms-page .rcard-room-icon{color:var(--muted);flex-shrink:0}.rooms-page .rcard.w4 .rcard-title{font-size:20px}.rooms-page .rcard.w4 .rcard-title-row{margin-bottom:4px}.rooms-page .rcard-subtitle{color:var(--green);align-items:center;gap:6px;margin-bottom:14px;font-size:14px;font-weight:500;display:flex}.rooms-page .rcard-subtitle-dot{background:var(--greenl);width:8px;height:8px;animation:2s ease-in-out infinite blink}.rooms-page .rcard-stats{color:var(--muted);justify-content:space-between;margin-bottom:7px;font-family:DM Mono,monospace;font-size:13px;display:flex}.rooms-page .rcard-prog-bar{background:var(--bg2);height:3px;margin-bottom:6px}.rooms-page .rcard-prog-fill{background:var(--green);height:100%}.rooms-page .rcard-prog-fill.warn{background:var(--amber)}.rooms-page .rcard-prog-fill.urgent{background:var(--red)}.rooms-page .rcard-footer{color:var(--muted);justify-content:space-between;font-family:DM Mono,monospace;font-size:13px;display:flex}.rooms-page .rcard-footer .ddl-u{color:var(--red)}.rooms-page .rcard-footer .ddl-s{color:var(--amber)}.rooms-page .rcard-footer .ddl-o{color:var(--green)}.rooms-page .rcard-cta{color:var(--green);letter-spacing:.05em;margin-top:8px;font-family:DM Mono,monospace;font-size:13px}.rooms-page .rcard.w3 .rcard-body-row{border-top:1.5px solid var(--bg2);display:flex}.rooms-page .rcard.w3 .rcard-body{border-top:none;flex:1;min-width:0}.rooms-page .rcard-sparkline-panel{flex-shrink:0;justify-content:center;align-items:center;width:180px;padding:16px 18px;display:flex}.rooms-page .sparkline-svg{width:100%;height:70px;overflow:visible}.rooms-page .rcard-create{background:var(--bg2);cursor:pointer;flex-direction:column;grid-column:span 4;justify-content:center;align-items:center;gap:8px;min-height:80px;transition:background .12s;display:flex}.rooms-page .rcard-create:hover{background:var(--bg3)}.rooms-page .rcard-create-label{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-family:DM Mono,monospace;font-size:11px}.rooms-page .rcard-create-sub{color:var(--muted);font-size:13px}.profile-hero{align-items:center;gap:24px;padding:24px 0 32px;display:flex}.profile-avatar{background:var(--bg3);object-fit:cover;width:80px;height:80px;color:var(--muted);border:1.5px solid var(--bg3);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-family:DM Mono,monospace;font-size:22px;font-weight:500;display:flex;overflow:hidden}.profile-avatar img{object-fit:cover;border-radius:50%;width:100%;height:100%}.profile-hero-info{flex-direction:column;gap:5px;display:flex}.profile-name{color:var(--ink);letter-spacing:-.01em;font-size:22px;font-weight:600}.profile-school{color:var(--green);letter-spacing:.04em;font-family:DM Mono,monospace;font-size:14px}.profile-settings-link{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);cursor:pointer;border:1.5px solid var(--bg3);white-space:nowrap;margin-left:auto;padding:9px 18px;font-family:DM Mono,monospace;font-size:13px;text-decoration:none;transition:border-color .15s,color .15s}.profile-settings-link:hover{border-color:var(--ink2);color:var(--ink)}.profile-stats{grid-template-columns:repeat(3,auto);justify-content:start;gap:28px;margin-bottom:32px;display:grid}.profile-stat{border:1.5px solid var(--ink);border:3px solid var(--ink2);background:var(--green);color:#fff;cursor:pointer;border-radius:var(--radius);box-shadow:4px 4px 0 var(--ink2);flex-direction:column;align-items:center;gap:4px;min-width:150px;padding:14px 24px;font-family:DM Mono,monospace;font-size:15px;font-weight:500;transition:all .15s;display:flex}.profile-stat:hover{box-shadow:6px 6px 0 var(--ink2);background:var(--greenl);transform:translateY(-2px)}.profile-stat-value{color:#fff;letter-spacing:-.01em;white-space:nowrap;font-size:20px;font-weight:600}.profile-stat-label{color:#d6d6d6;letter-spacing:.08em;text-transform:uppercase;text-align:center;font-family:DM Mono,monospace;font-size:11px;line-height:1.5}.profile-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.profile-panel{background:var(--paper);padding:24px 28px}.profile-panel-title{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:20px;font-family:DM Mono,monospace;font-size:11px}.profile-courses{flex-direction:column;gap:14px;display:flex}.profile-course-item{align-items:center;gap:12px;display:flex}.profile-course-dot{background:var(--muted);flex-shrink:0;width:5px;height:5px}.profile-course-name{color:var(--ink2);letter-spacing:.03em;font-family:DM Mono,monospace;font-size:15px}.profile-badges{flex-direction:column;gap:14px;display:flex}.profile-badge-item{align-items:flex-start;gap:12px;display:flex}.profile-badge-dash{color:var(--muted);flex-shrink:0;margin-top:1px;font-family:DM Mono,monospace;font-size:15px}.profile-badge-text{color:var(--ink2);font-size:17px;line-height:1.4}.profile-empty{color:var(--muted);letter-spacing:.06em;font-family:DM Mono,monospace;font-size:13px}.ps-title{color:var(--ink);letter-spacing:-.01em;margin-bottom:28px;font-size:17px;font-weight:600}.ps-section{background:var(--paper);margin-bottom:8px;padding:24px 28px}.ps-section-label{letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:16px;font-family:DM Mono,monospace;font-size:11px}.ps-avatar-row{align-items:center;gap:20px;display:flex}.ps-avatar-wrap{flex-shrink:0;width:80px;height:80px;position:relative}.ps-avatar-wrap img,.ps-avatar-placeholder{object-fit:cover;background:var(--bg3);border-radius:50%;width:80px;height:80px;display:block}.ps-avatar-edit{background:var(--ink);color:#fff;border:2px solid var(--paper);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;transition:background .15s;display:flex;position:absolute;top:2px;right:2px}.ps-avatar-edit:hover{background:var(--green)}.ps-avatar-info{flex-direction:column;gap:4px;display:flex}.ps-username{color:var(--ink);letter-spacing:-.01em;font-size:17px;font-weight:600}.ps-username-sub{color:var(--muted);font-family:DM Mono,monospace;font-size:13px}.ps-field{flex-direction:column;gap:7px;margin-bottom:16px;display:flex}.ps-field:last-child{margin-bottom:0}.ps-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-family:DM Mono,monospace;font-size:13px}.ps-input,.ps-select{width:100%;color:var(--ink);background:var(--bg);border:1.5px solid var(--bg3);appearance:none;border-radius:0;outline:none;padding:11px 16px;font-family:DM Sans,sans-serif;font-size:17px;transition:border-color .15s}.ps-input:focus,.ps-select:focus{border-color:var(--green)}.ink.ps-input:focus{border-color:var(--ink2)!important}.ps-input::placeholder{color:var(--muted)}.ps-input-readonly{color:var(--muted);cursor:default;background:var(--bg2)}.ps-input-readonly:focus{border-color:var(--bg3)}.ps-select-wrap{position:relative}.ps-select-wrap:after{content:"";border-left:4px solid #0000;border-right:4px solid #0000;border-top:5px solid var(--muted);pointer-events:none;width:0;height:0;position:absolute;top:50%;right:14px;transform:translateY(-50%)}.ps-school-dropdown{background:var(--paper);border:1.5px solid var(--bg3);z-index:50;border-top:none;max-height:220px;position:absolute;top:calc(100% + 2px);left:0;right:0;overflow-y:auto}.ps-school-dropdown li{color:var(--ink2);cursor:pointer;padding:11px 16px;font-size:17px;list-style:none;transition:background .1s}.ps-school-dropdown li:hover{background:var(--greenbg);color:var(--green)}.ps-school-wrap{position:relative}.ps-btn{letter-spacing:.08em;text-transform:uppercase;cursor:pointer;border:none;padding:11px 26px;font-family:DM Mono,monospace;font-size:14px;transition:background .15s,color .15s}.ps-btn-primary{background:var(--green);color:#fff}.ps-btn-primary:hover{background:var(--greenl)}.ps-btn-ghost{color:var(--muted);border:1.5px solid var(--bg3);background:0 0}.ps-btn-ghost:hover{border-color:var(--ink2);color:var(--ink)}.ps-message{color:var(--green);letter-spacing:.05em;margin-top:12px;font-family:DM Mono,monospace;font-size:13px}.ps-message.error{color:var(--red)}.ps-save-row{align-items:center;gap:16px;margin-top:24px;display:flex}
