@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Noto+Sans+SC:wght@400;500;600;700;900&display=swap');
:root{--ink:#20231e;--muted:#77796f;--paper:#d3cebd;--panel:#e4dfcf;--line:#a9a594;--acid:#c7d173;--dark:#101411;--mono:'IBM Plex Mono',monospace;--sans:'Noto Sans SC',sans-serif}*{box-sizing:border-box}body{margin:0;background:#171b18;color:var(--ink);font-family:var(--sans);min-height:100vh}.shell{min-height:100vh}.hidden{display:none!important}.welcome{min-height:100vh;background:radial-gradient(ellipse at 50% 43%,#26302b 0,#171d19 40%,#101411 78%);color:#e7e6db;padding:26px clamp(22px,6vw,90px);display:flex;flex-direction:column;align-items:center;position:relative;overflow:hidden}.welcome:before,.welcome:after{content:"";position:absolute;width:1px;top:0;bottom:0;background:linear-gradient(transparent,#737e6b66,transparent)}.welcome:before{left:5%}.welcome:after{right:5%}.welcome-top,.welcome-foot{width:100%;display:flex;justify-content:space-between;font:10px var(--mono);letter-spacing:.13em;color:#8e9687}.signal{display:flex;align-items:center;gap:9px}.signal i,.dot{width:7px;height:7px;border-radius:50%;background:var(--acid);box-shadow:0 0 12px #d2e77c}.hero{display:flex;align-items:center;gap:clamp(18px,5vw,74px);width:min(920px,86vw);margin-top:clamp(80px,13vh,150px)}.rule{height:1px;background:linear-gradient(90deg,transparent,#d4d5c4);flex:1}.rule:last-child{background:linear-gradient(90deg,#d4d5c4,transparent)}.mark{height:clamp(150px,24vw,260px);width:clamp(150px,24vw,260px);display:grid;place-items:center;position:relative;color:var(--acid);filter:drop-shadow(0 0 28px #b5c76544)}.mark:before{content:"";position:absolute;inset:0;border:1px solid #b9c57b;clip-path:polygon(50% 2%,98% 94%,2% 94%);background:linear-gradient(150deg,#c9d47c14,transparent 60%)}.mark:after{content:"";position:absolute;inset:13%;border:1px solid #aeb87777;clip-path:polygon(50% 2%,98% 94%,2% 94%)}.mark span{position:absolute;width:1px;height:66%;background:linear-gradient(transparent,var(--acid),transparent);animation:pulse 3s ease-in-out infinite}.mark b{font:600 clamp(45px,8vw,82px) var(--mono);text-shadow:0 0 22px #cfda87a0}@keyframes pulse{50%{opacity:.2;transform:scaleY(.72)}}.eyebrow{font:11px var(--mono);letter-spacing:.19em;color:#939a83}.welcome>.eyebrow{color:#c9d18e;margin:35px 0 0}.welcome h1{text-align:center;font-size:clamp(32px,5.6vw,64px);line-height:1.35;letter-spacing:.06em;margin:14px 0 0;font-weight:600}.intro{color:#a3a69a;font-size:14px;letter-spacing:.08em;margin:19px 0 31px}.intro span{color:var(--acid);padding:0 8px}.primary{border:1px solid #bac580;background:transparent;color:inherit;padding:15px 22px;font:500 14px var(--sans);letter-spacing:.08em;display:flex;justify-content:space-between;align-items:center;gap:42px;cursor:pointer;transition:.2s}.primary:hover{background:#c8d27b;color:#151a15;box-shadow:0 0 24px #c8d27b33}.enter{min-width:230px}.welcome-foot{margin-top:auto;padding-top:45px}.login-card{width:min(440px,calc(100% - 36px));margin:8vh auto;background:var(--paper);padding:38px clamp(24px,6vw,48px);border:1px solid #ffffff25;box-shadow:0 20px 70px #0006;position:relative}.back,.logout{background:none;border:0;cursor:pointer;color:var(--muted);font:12px var(--mono)}.back{padding:0}.mini-mark{width:46px;height:46px;border:1px solid #7c8069;display:grid;place-items:center;font:20px var(--mono);margin:37px 0 24px;clip-path:polygon(50% 0,100% 100%,0 100%)}.login-card .eyebrow{margin:0 0 8px}.login-card h2{font-size:30px;margin:0;font-weight:600}.muted{font-size:13px;color:var(--muted)}.login-card form{margin-top:30px}.login-card label{display:block;font-size:12px;font-weight:600;margin:19px 0;color:#55574e}.login-card input{display:block;width:100%;margin-top:8px;padding:13px 12px;background:#e7e2d3;border:1px solid #b4b09f;font:14px var(--sans);outline:none}.login-card input:focus{border-color:#525948;box-shadow:0 0 0 2px #555a4020}.login-card form .primary{width:100%;color:var(--ink);margin-top:22px;border-color:#43483a}.error{font-size:12px;color:#a23e31;min-height:16px}.demo-note{border-top:1px solid #b7b3a4;margin-top:27px;padding-top:18px;display:flex;gap:12px;align-items:flex-start;font-size:12px;line-height:1.8;color:#626459}.demo-note .dot{margin-top:7px;background:#898f5a;box-shadow:none;flex:none}.fine{font-size:10px;color:#888779;margin:14px 0 0}.dashboard{min-height:100vh;background:var(--paper);padding:0 clamp(18px,6vw,84px);max-width:1600px;margin:auto}.app-header{height:76px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.brand{display:flex;align-items:center;gap:13px}.brand-mark{width:35px;height:35px;display:grid;place-items:center;border:1px solid #656858;clip-path:polygon(50% 0,100% 100%,0 100%);font:15px var(--mono);padding-top:8px}.brand b{display:block;font-size:13px;letter-spacing:.08em}.brand small{display:block;font:9px var(--mono);color:var(--muted);margin-top:3px;letter-spacing:.1em}.logout{border:1px solid var(--line);padding:9px 14px}.welcome-banner{display:flex;justify-content:space-between;align-items:center;padding:50px 0 44px;border-bottom:1px solid var(--line)}.welcome-banner .eyebrow{margin:0 0 12px}.welcome-banner h2{font-size:clamp(28px,4vw,42px);font-weight:500;margin:0}.welcome-banner .muted{margin:10px 0 0}.access-stamp{border:1px solid #7d8461;padding:12px 17px;display:grid;gap:3px;text-align:center;transform:rotate(2deg);color:#626949}.access-stamp span,.access-stamp small{font:9px var(--mono);letter-spacing:.1em}.access-stamp b{font-size:17px}.tabs{display:flex;gap:28px;border-bottom:1px solid var(--line);overflow:auto}.tab{border:0;background:none;padding:18px 2px 15px;color:#77796f;white-space:nowrap;cursor:pointer;font:500 14px var(--sans);border-bottom:2px solid transparent}.tab.active{color:var(--ink);border-color:#31362c}.section-heading{display:flex;justify-content:space-between;align-items:end;margin:30px 0 17px}.section-heading h3{font-size:20px;margin:0}.section-heading p{font:10px var(--mono);color:var(--muted);margin:0}.cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}.card{border:1px solid #aaa796;background:#d9d4c4;padding:20px;min-height:175px;display:flex;flex-direction:column}.card-code{font:10px var(--mono);color:#737668;letter-spacing:.1em}.card h4{font-size:17px;margin:22px 0 6px}.card p{font-size:12px;line-height:1.7;color:#66685e;margin:0}.card-foot{margin-top:auto;padding-top:17px;display:flex;justify-content:space-between;font:10px var(--mono);color:#727567}.badge{border:1px solid #999b7d;padding:3px 7px}.placeholder{border:1px dashed #a7a492;padding:24px;color:#66685e;font-size:13px;line-height:1.8}.notice-box{border-left:2px solid #5a614b;padding:3px 0 3px 18px;margin:25px 0}.notice-box h4{margin:0 0 7px}.notice-box p{font-size:13px;color:#686a61}.app-footer{border-top:1px solid var(--line);margin-top:55px;padding:16px 0 25px;display:flex;justify-content:space-between;font:9px var(--mono);letter-spacing:.08em;color:#797b70}@media(max-width:700px){.cards{grid-template-columns:1fr}.welcome-banner{padding:35px 0;gap:15px}.access-stamp{padding:9px;font-size:12px}.app-footer{font-size:8px}.hero{margin-top:14vh}}
.announcement-body{white-space:pre-wrap}.notice-box>small,.post small{font:10px var(--mono);color:#77796f}.post-list{margin:15px 0;display:grid;gap:8px}.post{background:#d9d4c4;border:1px solid #aaa796;padding:11px 13px}.post b{font-size:12px}.post span{float:right;font-size:10px;color:#77796f}.post p{white-space:pre-wrap;margin:8px 0;color:#34372f}.post-form{display:grid;gap:8px;max-width:650px}.post-form input,.post-form textarea,.admin-form input,.admin-form textarea,.admin-form select{width:100%;border:1px solid #aaa796;background:#e4dfcf;padding:10px;font:13px var(--sans);color:var(--ink)}.post-form textarea,.admin-form textarea{min-height:82px;resize:vertical}.small-action{justify-self:start;border:1px solid #6e7457;background:transparent;color:var(--ink);padding:8px 12px;font:12px var(--sans);cursor:pointer}.small-action:hover{background:#c7d173}.small-action:disabled{opacity:.55;cursor:wait}.admin-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px;margin:20px 0}.admin-form{display:grid;align-content:start;gap:9px;padding:17px;background:#d9d4c4;border:1px solid #aaa796}.admin-form h4{margin:0 0 3px;font-size:15px}.check-label{font-size:12px;color:#55574e}.check-label input{width:auto}.table-wrap{overflow:auto;border:1px solid #aaa796}.table-wrap table{width:100%;border-collapse:collapse;font-size:12px;text-align:left}.table-wrap th,.table-wrap td{padding:10px;border-bottom:1px solid #aaa796;white-space:nowrap}.table-wrap th{font-weight:600;color:#55574e}.table-wrap td small{display:block;color:#77796f;font-size:10px;margin-top:3px}.manage-list{display:grid;gap:6px}.manage-list>div{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px;background:#d9d4c4;border:1px solid #aaa796;font-size:12px}.danger{border-color:#995f54;color:#7d342b}.danger:hover{background:#e0bdb4}@media(max-width:700px){.admin-grid{grid-template-columns:1fr}.post span{float:none;display:block;margin-top:4px}}

.dashboard{padding:0 clamp(14px,3vw,44px);max-width:1800px}.portal-layout{display:grid;grid-template-columns:230px minmax(0,1fr);gap:clamp(20px,3vw,48px)}.sidebar{border-right:1px solid var(--line);padding:27px 18px 25px 0;display:flex;flex-direction:column;min-height:calc(100vh - 76px);gap:18px}.side-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}.side-heading .eyebrow{margin:0}.side-heading .small-action{font-size:10px;padding:5px 8px}.sidebar .tabs{display:grid;gap:2px;border:0;overflow:visible}.sidebar .tab{text-align:left;border:0;padding:11px 10px;border-left:2px solid transparent}.sidebar .tab.active{background:#c5c0b1;border-left-color:#454a3c}.sidebar .tab:hover{color:var(--ink)}.music-box{border-top:1px solid var(--line);padding-top:17px;margin-top:8px}.music-box .eyebrow{margin:0 0 10px}.music-title{font-size:12px;min-height:34px;line-height:1.5;overflow-wrap:anywhere}.music-controls{display:flex;gap:8px;margin:10px 0}.music-controls button{width:34px;height:31px;border:1px solid var(--line);background:transparent;color:var(--ink);cursor:pointer}.music-controls button:hover{background:#c7d173}.music-volume{display:flex;gap:9px;align-items:center;font-size:10px;color:#686a61}.music-volume input{min-width:0;flex:1}.music-box .fine{line-height:1.6;margin-top:9px}.sidebar-foot{margin-top:auto;padding-top:13px;border-top:1px solid var(--line);font-size:10px;color:#77796f}.portal-main{min-width:0}.portal-main .welcome-banner{padding:36px 0 28px}.collapsed{grid-template-columns:56px minmax(0,1fr)}.collapsed .side-heading{display:block}.collapsed .side-heading .eyebrow,.collapsed .tabs .tab,.collapsed .music-box,.collapsed .sidebar-foot{display:none!important}.collapsed .side-heading .small-action{writing-mode:vertical-rl;padding:10px 7px}.profile-layout{display:grid;grid-template-columns:minmax(220px,.7fr) minmax(0,1.3fr);gap:20px}.profile-card,.game-card,.checkin-card{border:1px solid #aaa796;background:#d9d4c4;padding:18px}.profile-avatar{width:112px;height:112px;object-fit:cover;border-radius:50%;border:1px solid #8b8d79;display:grid;margin:2px auto 14px}.default-avatar{place-items:center;background:#c9c5b6;color:#626657;font:48px var(--mono);position:relative;overflow:hidden}.default-avatar:before{content:"";position:absolute;width:34px;height:34px;border-radius:50%;background:#868a7c;top:17px}.default-avatar:after{content:"";position:absolute;width:68px;height:42px;border-radius:40px 40px 12px 12px;background:#868a7c;bottom:-6px}.default-avatar span{position:absolute;z-index:1;top:37px;color:#d9d4c4;font:10px var(--mono)}.profile-card>h4,.profile-card>p{text-align:center;margin:5px}.profile-card>.admin-form{margin-top:20px}.balance-large{font:26px var(--mono);color:#464c39}.balance-large small{font:11px var(--sans)}.achievement-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.achievement{padding:13px;border:1px solid #aaa796;background:#d9d4c4;display:grid;grid-template-columns:auto 1fr;gap:4px 9px;color:#858578}.achievement.earned{border-color:#777f59;color:#3f4932;background:#d7d8c4}.achievement small{grid-column:2;font-size:10px}.checkin-card{margin-top:14px}.checkin-card h4,.game-card h4{margin:8px 0}.checkin-card p,.game-card p{font-size:12px;color:#686a61;line-height:1.7}.game-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.game-card{display:flex;flex-direction:column;align-items:flex-start;min-height:210px}.game-card .small-action{margin-top:auto}.game-result{margin-top:12px;display:grid;gap:5px;font-size:13px}.game-result small{font:9px var(--mono);overflow-wrap:anywhere;color:#727567}.slot-symbols{font-size:23px}.hash-cell{font:9px var(--mono);max-width:190px;overflow-wrap:anywhere;white-space:normal!important}.forum-create{margin:15px 0 22px;max-width:800px}.forum-list{display:grid;gap:12px}.forum-post{padding:16px;background:#d9d4c4;border:1px solid #aaa796}.forum-head{display:flex;justify-content:space-between;gap:12px;align-items:center}.forum-head small,.reply small{font:10px var(--mono);color:#77796f}.forum-post>p,.reply p{white-space:pre-wrap;font-size:13px;line-height:1.7}.forum-post details{border-top:1px solid #aaa796;padding-top:10px}.forum-post summary{cursor:pointer;font-size:12px}.reply-list{display:grid;gap:8px;margin:10px 0}.reply{border-left:2px solid #858a6d;padding:3px 10px}.reply p{margin:5px 0}.reply-form{display:grid;gap:8px}.reply-form textarea{min-height:58px;border:1px solid #aaa796;background:#e4dfcf;padding:9px;font:12px var(--sans)}@media(max-width:900px){.portal-layout{grid-template-columns:190px minmax(0,1fr);gap:20px}.game-grid{grid-template-columns:1fr}.profile-layout{grid-template-columns:1fr}}@media(max-width:700px){.portal-layout{grid-template-columns:1fr}.sidebar{min-height:0;border-right:0;border-bottom:1px solid var(--line);padding:14px 0}.sidebar .tabs{grid-template-columns:repeat(3,1fr)}.sidebar .tab{text-align:center;padding:9px 5px;font-size:11px}.music-box{display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 10px}.music-box .eyebrow,.music-box .fine{grid-column:1/-1}.music-controls{margin:0}.sidebar-foot{display:none}.collapsed{grid-template-columns:1fr}.collapsed .side-heading{display:flex}.collapsed .side-heading .eyebrow{display:block!important}.collapsed .tabs,.collapsed .music-box{display:none}.collapsed .side-heading .small-action{writing-mode:initial}.forum-head{display:grid}.achievement-list{grid-template-columns:1fr 1fr}}
.file-label{font-size:11px;color:#66685e;display:grid;gap:7px}.file-label input{border:1px solid #aaa796;background:#e4dfcf;padding:8px;font:11px var(--sans)}
.moderation-list{display:grid;gap:9px}.moderation-list article{border:1px solid #aaa796;background:#d9d4c4;padding:13px}.moderation-list article>div{display:flex;justify-content:space-between;gap:12px}.moderation-list small{font-size:10px;color:#77796f}.moderation-list p{white-space:pre-wrap;font-size:12px;line-height:1.7;margin:10px 0;color:#44473e}@media(max-width:700px){.moderation-list article>div{display:grid}}
.employee-edit-form{display:grid;min-width:180px;gap:6px;padding:8px}.employee-edit-form input:not([type=checkbox]){width:100%;border:1px solid #aaa796;background:#e4dfcf;padding:7px;font:11px var(--sans)}.employee-edit-form label{font-size:10px}.employee-edit-form input[type=checkbox]{width:auto}

/* Administrator terminal: restrained black, white and neutral gray. */
.welcome{--acid:#e1e4e7}.welcome .signal i,.welcome .dot{background:#e1e4e7;box-shadow:0 0 10px #ffffff55}.welcome .mark{color:#e1e4e7;filter:drop-shadow(0 0 20px #ffffff22)}.welcome .mark:before{border-color:#d5d9dd;background:linear-gradient(150deg,#ffffff12,transparent 60%)}.welcome .mark:after{border-color:#c7ccd177}.welcome .rule{background:linear-gradient(90deg,transparent,#d4d5c4)}.welcome .rule:last-child{background:linear-gradient(90deg,#d4d5c4,transparent)}.welcome>.eyebrow,.intro span{color:#e1e4e7}.welcome .primary{border-color:#d4d8dc}.welcome .primary:hover{background:#e1e4e7;color:#111;box-shadow:0 0 18px #ffffff22}
.login-card{background:#111417;color:#f0f1f2;border:1px solid #687078;box-shadow:0 20px 70px #0009}.login-card .eyebrow,.login-card .muted,.login-card .fine,.login-card label{color:#b4bac0}.login-card input{background:#080a0c;color:#f0f1f2;border:1px solid #525a62}.login-card input:focus{border-color:#d3d8dc;box-shadow:0 0 0 2px #ffffff1c}.login-card .back{color:#c4c9ce}.login-card .mini-mark{border-color:#d4d8dc}.login-card form .primary{color:#f0f1f2;border-color:#c4c9ce}.login-card form .primary:hover{background:#e1e4e7;color:#111}
.dashboard.admin-mode{--ink:#f0f1f2;--muted:#aeb4ba;--paper:#0b0d0f;--panel:#15191d;--line:#41484f;--acid:#d5d9dd;background:#0b0d0f;color:#f0f1f2;max-width:none;padding:0 clamp(16px,4vw,60px)}.admin-mode .app-header{border-color:#41484f}.admin-mode .brand-mark{border-color:#d1d5d9;color:#f0f1f2}.admin-mode .brand b{color:#f0f1f2}.admin-mode .brand small,.admin-mode .logout{color:#b9bfc5}.admin-mode .logout{border-color:#697179}.admin-mode .portal-layout{grid-template-columns:1fr;gap:0}.admin-mode .sidebar{min-height:0;padding:0;border:0}.admin-mode .side-heading,.admin-mode .music-box,.admin-mode .sidebar-foot{display:none!important}.admin-mode .sidebar .tabs{border-bottom:1px solid #41484f;display:flex}.admin-mode .sidebar .tab{color:#b9bfc5;padding:14px 4px}.admin-mode .sidebar .tab.active{color:#fff;background:transparent;border-color:#fff}.admin-mode .welcome-banner{border-color:#41484f;padding:26px 0}.admin-mode .welcome-banner h2,.admin-mode .welcome-banner .eyebrow{color:#f0f1f2}.admin-mode .access-stamp{border-color:#a7afb6;color:#e1e4e7;transform:none}.admin-mode .section-heading h3{color:#f0f1f2}.admin-mode .section-heading p,.admin-count{color:#aeb4ba}.admin-mode .admin-section{border-top:1px solid #41484f;padding:4px 0 20px;margin-top:18px}.admin-mode .admin-grid{grid-template-columns:1fr}.admin-mode .admin-form,.admin-mode .admin-post,.admin-mode .table-wrap{background:#121518;border-color:#515961;color:#f0f1f2}.admin-mode .admin-form{grid-template-columns:repeat(3,minmax(0,1fr));align-items:end}.admin-mode .admin-form input,.admin-mode .employee-edit-form input:not([type=checkbox]){background:#080a0c;border-color:#515961;color:#f0f1f2}.admin-mode .admin-form input::placeholder,.admin-mode .employee-edit-form input::placeholder{color:#8f969d}.admin-mode .small-action{background:transparent;border:1px solid #929aa2;color:#f0f1f2}.admin-mode .small-action:hover{background:#333940;color:#fff}.admin-mode .danger{border-color:#929aa2;color:#fff}.admin-mode .table-wrap table{color:#e8eaec}.admin-mode .table-wrap th,.admin-mode .table-wrap td{border-color:#41484f}.admin-mode .table-wrap th,.admin-mode .table-wrap td small,.admin-mode .moderation-list small{color:#aeb4ba}.admin-mode .employee-edit-form{background:#101316}.admin-mode .employee-edit-form label{color:#c5cacf}.admin-mode .employee-edit-form input[type=checkbox]{accent-color:#ddd}.admin-mode details summary{color:#e5e7e9;cursor:pointer}.admin-mode .admin-post-list{display:grid;gap:9px}.admin-mode .admin-post{padding:14px;border:1px solid #41484f}.admin-mode .admin-post-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.admin-mode .admin-post-head small,.admin-mode .admin-post-context{display:block;color:#aeb4ba;font:10px var(--mono);margin-top:5px}.admin-mode .admin-post p{white-space:pre-wrap;overflow-wrap:anywhere;color:#e3e5e7;font-size:13px;line-height:1.7;margin:10px 0 0}.admin-mode .app-footer{border-color:#41484f;color:#aeb4ba}
@media(max-width:700px){.admin-mode .admin-form{grid-template-columns:1fr}.admin-mode .table-wrap th,.admin-mode .table-wrap td{padding:8px}.admin-mode .admin-post-head{align-items:flex-start}}

/* welcome 顶部 internal network 状态灯：绿=在线，红=离线 */
.signal i {
  transition: background-color .25s ease, box-shadow .25s ease, opacity .25s ease;
}

.signal.checking i {
  background: #d1d6de;
  box-shadow: 0 0 10px #d1d6de99;
  animation: signal-pulse 1s ease-in-out infinite;
}

.signal.online i {
  background: #52d67f;
  box-shadow: 0 0 12px #52d67faa;
  animation: signal-pulse .9s ease-in-out infinite;
}

.signal.offline i {
  background: #ff5f5f;
  box-shadow: 0 0 12px #ff5f5faa;
  animation: signal-pulse .9s ease-in-out infinite;
}

@keyframes signal-pulse {
  0%,
  100% {
    opacity: .45;
    transform: scale(.86);
  }
  50% {
    opacity: 1;
    transform: scale(1.08);
  }
}
