/* ===== 《镜面》MIRROR — 假手机与 App 样式 ===== */
:root{
  --bg:#000;
  --ph-bg:#0b0d10;
  --ph-card:#16191e;
  --ph-card2:#1d2127;
  --ph-line:#262b32;
  --ink:#e8eaed;
  --ink2:#9aa0a6;
  --ink3:#5f6368;
  --blue:#4a9eff;
  --green:#34c759;
  --red:#ff453a;
  --yellow:#ffd60a;
  --pink:#ff2d55;
  --orange:#ff9500;
  --purple:#bf5af2;
  --tieba:#2b6cff;
  --sans:"PingFang SC","Helvetica Neue","Microsoft YaHei",system-ui,sans-serif;
  --mono:"SF Mono","Courier New",monospace;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100%;background:#000;overflow:hidden;font-family:var(--sans)}
body{display:flex;align-items:center;justify-content:center;color:var(--ink)}

/* 舞台背景：深夜桌面 */
#stage{
  position:fixed;inset:0;z-index:0;
  background:
    radial-gradient(1200px 600px at 50% 120%,rgba(40,52,90,.35),transparent 60%),
    radial-gradient(800px 500px at 20% 0%,rgba(60,30,80,.25),transparent 60%),
    linear-gradient(180deg,#050608,#0a0c10);
}
#stage::after{content:"";position:absolute;inset:0;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");opacity:.05;pointer-events:none}

/* ===== 应用图标渐变背景 ===== */
.ic-grad{position:relative;overflow:hidden}
.ic-grad::before{content:"";position:absolute;top:0;left:0;right:0;height:50%;background:linear-gradient(180deg,rgba(255,255,255,.25),transparent);border-radius:15px 15px 0 0;pointer-events:none}
.ic-grad::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 30% 30%,rgba(255,255,255,.15),transparent 60%);pointer-events:none}
.ic-tieba{background:linear-gradient(145deg,#3b7eff,#1a4fd6)!important}
.ic-hongshu{background:linear-gradient(145deg,#ff3d6e,#e0115e)!important}
.ic-douyin{background:linear-gradient(145deg,#1a1a1a,#000)!important;border:1px solid rgba(255,255,255,.08)!important}
.ic-qq{background:linear-gradient(145deg,#1ec4f5,#0a8ad6)!important}
.ic-wechat{background:linear-gradient(145deg,#2dd66b,#06a050)!important}
.ic-browser{background:linear-gradient(145deg,#2a2e36,#15171c)!important;border:1px solid rgba(255,255,255,.06)!important}
.ic-phone{background:linear-gradient(145deg,#3ad568,#28a745)!important}
.ic-notes{background:linear-gradient(145deg,#ffe14d,#f0b800)!important;color:#1a1a1a!important}
.ic-album{background:linear-gradient(145deg,#d066ff,#9b30d6)!important}
.ic-recorder{background:linear-gradient(145deg,#ffb01f,#ff7800)!important;color:#1a1a1a!important}
.ic-files{background:linear-gradient(145deg,#a0a4ab,#6a6e75)!important}
.ic-map{background:linear-gradient(145deg,#3dcfe0,#1a9eb0)!important}
.ic-settings{background:linear-gradient(145deg,#6a6e75,#3a3e45)!important}
.ic-dock-phone{background:linear-gradient(145deg,#3ad568,#28a745)!important}
.ic-dock-browser{background:linear-gradient(145deg,#2a2e36,#15171c)!important;border:1px solid rgba(255,255,255,.06)!important}
.ic-dock-notes{background:linear-gradient(145deg,#ffe14d,#f0b800)!important;color:#1a1a1a!important}
.ic-dock-tieba{background:linear-gradient(145deg,#3b7eff,#1a4fd6)!important}
/* 笔记本桌面图标 */
.ic-lp-mail{background:linear-gradient(145deg,#3b7eff,#1a4fd6)!important}
.ic-lp-cloud{background:linear-gradient(145deg,#7a68f6,#4a38d6)!important}
.ic-lp-ve{background:linear-gradient(145deg,#ff3d6e,#e0115e)!important}
.ic-lp-browser{background:linear-gradient(145deg,#2a2e36,#15171c)!important;border:1px solid rgba(255,255,255,.06)!important}
.ic-lp-enc{background:linear-gradient(145deg,#ffb01f,#ff7800)!important}
.ic-lp-diary{background:linear-gradient(145deg,#3ad568,#28a745)!important}
.ic-lp-echo{background:linear-gradient(145deg,#2a0010,#000)!important;border:1px solid #ff453a!important}

/* 手机外壳 */
#phone{
  position:relative;z-index:2;
  width:390px;height:100%;max-height:844px;
  background:var(--ph-bg);
  border-radius:48px;
  box-shadow:
    0 0 0 2px #2a2d33,
    0 0 0 12px #0a0a0c,
    0 0 0 13px #3a3d44,
    0 0 0 14px #1a1c20,
    0 50px 100px rgba(0,0,0,.85),
    0 0 140px rgba(74,158,255,.05),
    inset 0 0 0 1px rgba(255,255,255,.03);
  overflow:hidden;
  display:flex;flex-direction:column;
}
@media(max-height:880px){#phone{border-radius:0;max-height:100%;box-shadow:0 0 0 12px #0a0a0c,0 0 0 13px #3a3d44}}
@media(max-width:420px){#phone{width:100%;border-radius:0;box-shadow:none}}

/* 灵动岛/状态栏 */
.statusbar{
  height:48px;flex:0 0 48px;display:flex;align-items:center;justify-content:space-between;
  padding:0 28px;font-size:15px;font-weight:600;color:var(--ink);position:relative;z-index:30;
  letter-spacing:.02em;
}
.statusbar .time{font-variant-numeric:tabular-nums;font-weight:700}
.statusbar .icons{display:flex;gap:7px;align-items:center;font-size:13px}
.statusbar .icons .sig{display:flex;gap:2px;align-items:flex-end}
.statusbar .icons .sig i{display:block;width:3px;background:var(--ink);border-radius:1px}
.statusbar .icons .sig i:nth-child(1){height:4px}
.statusbar .icons .sig i:nth-child(2){height:7px}
.statusbar .icons .sig i:nth-child(3){height:10px}
.statusbar .icons .sig i:nth-child(4){height:13px;opacity:.4}
.statusbar .icons .batt{display:flex;align-items:center;gap:3px}
.statusbar .icons .batt .b-shell{width:24px;height:12px;border:1.5px solid var(--ink);border-radius:3px;padding:1.5px;position:relative}
.statusbar .icons .batt .b-shell::after{content:"";position:absolute;right:-3px;top:50%;transform:translateY(-50%);width:2px;height:5px;background:var(--ink);border-radius:0 2px 2px 0}
.statusbar .icons .batt .b-fill{display:block;height:100%;width:23%;background:var(--red);border-radius:1px}
.notch{position:absolute;top:11px;left:50%;transform:translateX(-50%);width:122px;height:34px;background:#000;border-radius:20px;z-index:31;box-shadow:inset 0 0 0 1px rgba(255,255,255,.04)}

/* 屏幕容器 */
#screen{flex:1;position:relative;overflow:hidden;background:var(--ph-bg)}
.app{position:absolute;inset:0;display:none;flex-direction:column;background:var(--ph-bg);animation:appIn .28s ease}
.app.on{display:flex}
@keyframes appIn{from{opacity:0;transform:scale(1.02)}to{opacity:1;transform:scale(1)}}

/* App 顶栏 */
.appbar{
  flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:10px 14px;
  border-bottom:1px solid rgba(255,255,255,.05);background:rgba(11,13,16,.75);backdrop-filter:blur(20px) saturate(1.5);-webkit-backdrop-filter:blur(20px) saturate(1.5);
  min-height:48px;
}
.appbar .back{width:32px;height:32px;display:flex;align-items:center;justify-content:center;color:var(--blue);font-size:24px;cursor:pointer;border-radius:50%;transition:background .15s;font-weight:300}
.appbar .back:active{background:rgba(74,158,255,.15)}
.appbar .title{flex:1;font-size:17px;font-weight:600;letter-spacing:.01em}
.appbar .act{color:var(--blue);font-size:14px;cursor:pointer;padding:6px 10px;border-radius:8px;font-weight:500}
.appbar .act:active{background:rgba(74,158,255,.12)}
.appbody{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}
.appbody::-webkit-scrollbar{width:0}

/* 通用列表 */
.list-row{display:flex;align-items:center;gap:12px;padding:13px 16px;border-bottom:1px solid var(--ph-line);cursor:pointer;transition:background .15s}
.list-row:active{background:var(--ph-card)}
.list-row .av{width:44px;height:44px;border-radius:50%;flex:0 0 44px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:17px;font-weight:600;box-shadow:0 2px 8px rgba(0,0,0,.3)}
.list-row .meta{flex:1;min-width:0}
.list-row .meta .t{font-size:15.5px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
.list-row .meta .s{font-size:13px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}
.list-row .time{font-size:11px;color:var(--ink3)}
.list-row .dot{width:8px;height:8px;background:var(--red);border-radius:50%;box-shadow:0 0 8px rgba(255,69,58,.5)}

/* 主屏幕 */
.home{padding:12px 16px 96px}
.home .widget{background:linear-gradient(135deg,#1b2330 0%,#141923 50%,#0e1117 100%);border:1px solid rgba(255,255,255,.06);border-radius:20px;padding:18px;margin-bottom:14px;position:relative;overflow:hidden}
.home .widget::before{content:"";position:absolute;top:-50%;right:-30%;width:200px;height:200px;background:radial-gradient(circle,rgba(74,158,255,.08),transparent 70%);pointer-events:none}
.home .widget .lbl{font-size:11px;color:var(--ink3);letter-spacing:.12em;text-transform:uppercase;font-weight:600}
.home .widget .big{font-size:26px;font-weight:700;margin-top:6px;letter-spacing:.02em}
.home .widget .sub{font-size:12px;color:var(--ink2);margin-top:5px;opacity:.8}
.dock-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px 8px;margin-top:8px}
.appicon{display:flex;flex-direction:column;align-items:center;gap:7px;cursor:pointer}
.appicon .ic{width:60px;height:60px;border-radius:15px;display:flex;align-items:center;justify-content:center;font-size:27px;color:#fff;position:relative;box-shadow:0 8px 20px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.18),inset 0 -2px 4px rgba(0,0,0,.2);transition:transform .15s}
.appicon:active .ic{transform:scale(.88)}
.appicon .nm{font-size:11px;color:var(--ink);max-width:64px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
.appicon .badge{position:absolute;top:-5px;right:-5px;min-width:18px;height:18px;padding:0 4px;background:var(--red);color:#fff;font-size:11px;border-radius:9px;display:none;align-items:center;justify-content:center;font-weight:700;box-shadow:0 2px 6px rgba(255,69,58,.5);border:1.5px solid var(--ph-bg)}
.appicon .badge.show{display:flex;animation:badgePulse 2s infinite}
@keyframes badgePulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
.search-dock{margin:14px 0;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.08);border-radius:16px;padding:12px 16px;display:flex;align-items:center;gap:10px;cursor:pointer;backdrop-filter:blur(10px);transition:background .2s}
.search-dock:active{background:rgba(255,255,255,.12)}
.search-dock .si{color:var(--ink3);font-size:17px}
.search-dock .st{color:var(--ink3);font-size:14px}

/* 主屏底部 dock */
.homedock{position:absolute;bottom:0;left:0;right:0;height:82px;background:rgba(30,34,42,.55);backdrop-filter:blur(24px) saturate(1.8);-webkit-backdrop-filter:blur(24px) saturate(1.8);border-top:1px solid rgba(255,255,255,.06);display:flex;align-items:center;justify-content:space-around;padding:0 24px 10px}
.homedock .appicon .ic{width:54px;height:54px;border-radius:14px}

/* 底部 home 指示条 */
.homebar{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);width:134px;height:5px;background:rgba(255,255,255,.55);border-radius:3px;z-index:40;cursor:pointer}

/* 通用列表 */
.list-row{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--ph-line);cursor:pointer}
.list-row:active{background:var(--ph-card)}
.list-row .av{width:42px;height:42px;border-radius:50%;flex:0 0 42px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-weight:600}
.list-row .meta{flex:1;min-width:0}
.list-row .meta .t{font-size:15px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-row .meta .s{font-size:12.5px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:2px}
.list-row .time{font-size:11px;color:var(--ink3)}
.list-row .dot{width:8px;height:8px;background:var(--red);border-radius:50%}

/* === 帖吧 === */
.tieba-bar{background:var(--tieba)}
.tieba .forum-head{background:linear-gradient(135deg,#2b6cff 0%,#1a4fd6 100%);padding:20px 16px 16px;color:#fff;position:relative;overflow:hidden}
.tieba .forum-head::after{content:"";position:absolute;top:-30px;right:-20px;width:120px;height:120px;background:radial-gradient(circle,rgba(255,255,255,.1),transparent 70%);pointer-events:none}
.tieba .forum-head .fn{font-size:19px;font-weight:700;letter-spacing:.02em}
.tieba .forum-head .fd{font-size:12px;opacity:.85;margin-top:4px}
.tieba .tabs{display:flex;border-bottom:1px solid var(--ph-line);background:rgba(11,13,16,.8);backdrop-filter:blur(12px);position:sticky;top:0;z-index:10}
.tieba .tabs .tb{flex:1;text-align:center;padding:12px 0;font-size:14px;color:var(--ink2);border-bottom:2px solid transparent;cursor:pointer;font-weight:500;transition:color .2s}
.tieba .tabs .tb.on{color:var(--tieba);border-bottom-color:var(--tieba);font-weight:600}
.tieba .searchbox{padding:10px 12px;border-bottom:1px solid var(--ph-line);display:flex;gap:8px}
.tieba .searchbox input{flex:1;background:var(--ph-card);border:1px solid var(--ph-line);border-radius:12px;color:var(--ink);padding:9px 14px;font-size:13px;outline:none;transition:border .2s}
.tieba .searchbox input:focus{border-color:var(--tieba)}
.tieba .searchbox input::placeholder{color:var(--ink3)}
.tieba .searchbox button{background:var(--tieba);color:#fff;border:0;border-radius:12px;padding:0 16px;font-size:13px;cursor:pointer;font-weight:500}
.thread{padding:15px 16px;border-bottom:1px solid var(--ph-line);cursor:pointer;transition:background .15s}
.thread:active{background:var(--ph-card)}
.thread .th{font-size:16px;font-weight:600;color:var(--ink);line-height:1.4}
.thread .th .tag{display:inline-block;font-size:10px;color:var(--tieba);border:1px solid var(--tieba);padding:1px 6px;border-radius:4px;margin-right:6px;vertical-align:middle;font-weight:400}
.thread .snip{font-size:13px;color:var(--ink2);margin-top:7px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.thread .meta{font-size:11px;color:var(--ink3);margin-top:9px;display:flex;gap:12px}
.thread .meta .hot{color:var(--orange)}
.thread-detail{padding:0}
.thread-detail .op{padding:18px 16px;border-bottom:1px solid var(--ph-line)}
.thread-detail .op .ttl{font-size:19px;font-weight:700;line-height:1.4;color:var(--ink)}
.thread-detail .op .opmeta{font-size:12px;color:var(--ink3);margin-top:10px;display:flex;align-items:center;gap:8px}
.thread-detail .op .opmeta .av{width:30px;height:30px;border-radius:50%;background:var(--purple);display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;font-weight:600}
.thread-detail .op .body{font-size:15px;color:var(--ink);line-height:1.85;margin-top:14px}
.thread-detail .op .body p{margin:0 0 10px}
.thread-detail .op .body img{width:100%;border-radius:10px;margin:10px 0}
.thread-detail .op .body .quote{background:var(--ph-card);border-left:3px solid var(--tieba);padding:12px 14px;border-radius:8px;font-size:13px;color:var(--ink2);margin:10px 0}
.reply{padding:13px 16px;border-bottom:1px solid var(--ph-line);display:flex;gap:10px}
.reply .av{width:32px;height:32px;border-radius:50%;flex:0 0 32px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;font-weight:600}
.reply .rc{flex:1}
.reply .rn{font-size:13px;color:var(--blue);font-weight:600}
.reply .rn .lvl{color:var(--orange);font-size:10px;margin-left:6px}
.reply .rt{font-size:14px;color:var(--ink);line-height:1.7;margin-top:4px}
.reply .rmeta{font-size:11px;color:var(--ink3);margin-top:5px}
.reply.pinned{background:rgba(43,108,255,.06)}
.reply.pinned .rt::before{content:"置顶 · ";color:var(--tieba);font-weight:600}

/* === 红薯 === */
.hs-feed{padding:8px;column-count:2;column-gap:8px}
.hs-card{background:var(--ph-card);border-radius:16px;overflow:hidden;margin-bottom:8px;break-inside:avoid;cursor:pointer;box-shadow:0 2px 8px rgba(0,0,0,.2);transition:transform .15s}
.hs-card:active{transform:scale(.97)}
.hs-card .cover{width:100%;background:#000;overflow:hidden}
.hs-card .cover img{width:100%;height:100%;object-fit:cover}
.hs-card .ct{padding:10px 12px}
.hs-card .ct .ttl{font-size:14px;color:var(--ink);line-height:1.5;font-weight:500;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.hs-card .ct .au{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:11px;color:var(--ink3)}
.hs-card .ct .au .av{width:20px;height:20px;border-radius:50%;background:var(--pink)}
.hs-detail{padding:0}
.hs-detail .hero{width:100%;aspect-ratio:4/5;overflow:hidden;background:#000;position:relative}
.hs-detail .hero img{width:100%;height:100%;object-fit:cover}
.hs-detail .info{padding:16px}
.hs-detail .info .ttl{font-size:18px;font-weight:700;line-height:1.4}
.hs-detail .info .au{display:flex;align-items:center;gap:9px;margin-top:12px}
.hs-detail .info .au .av{width:36px;height:36px;border-radius:50%;background:var(--pink);display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;box-shadow:0 2px 8px rgba(255,45,85,.3)}
.hs-detail .info .au .nm{font-size:14px;font-weight:600}
.hs-detail .info .au .flw{margin-left:auto;color:var(--red);border:1.5px solid var(--red);padding:5px 16px;border-radius:16px;font-size:12px;font-weight:500;transition:background .15s}
.hs-detail .info .au .flw:active{background:rgba(255,45,85,.1)}
.hs-detail .info .body{font-size:15px;color:var(--ink);line-height:1.85;margin-top:16px}
.hs-detail .info .body p{margin:0 0 8px}
.hs-detail .info .tags{margin-top:14px;color:var(--blue);font-size:13px}
.hs-comment{padding:13px 16px;border-top:1px solid var(--ph-line);display:flex;gap:10px}
.hs-comment .av{width:30px;height:30px;border-radius:50%;background:var(--ph-card2);flex:0 0 30px}
.hs-comment .cc{flex:1}
.hs-comment .cn{font-size:13px;color:var(--ink2);font-weight:500}
.hs-comment .ct2{font-size:14px;color:var(--ink);margin-top:3px;line-height:1.6}
.hs-comment.susp{background:rgba(255,45,85,.05)}
.hs-comment.susp .cn{color:var(--red)}

/* === 颤音 === */
.dy-wrap{position:relative;height:100%;background:#000;overflow:hidden}
.dy-video{position:absolute;inset:0}
.dy-video .frame{position:absolute;inset:0;opacity:0;transition:opacity .15s;object-fit:cover;width:100%;height:100%}
.dy-video .frame.on{opacity:1}
.dy-video .frame{filter:contrast(1.05) saturate(.85) brightness(.75)}
.dy-right{position:absolute;right:8px;bottom:120px;display:flex;flex-direction:column;gap:22px;align-items:center;z-index:5}
.dy-right .act{display:flex;flex-direction:column;align-items:center;gap:5px;color:#fff;font-size:11px}
.dy-right .act .ic{width:44px;height:44px;border-radius:50%;background:rgba(0,0,0,.3);display:flex;align-items:center;justify-content:center;font-size:22px;backdrop-filter:blur(4px)}
.dy-right .act .num{font-size:11px;text-shadow:0 1px 2px #000}
.dy-info{position:absolute;left:12px;right:74px;bottom:110px;color:#fff;z-index:5}
.dy-info .au{font-size:15px;font-weight:700;text-shadow:0 1px 3px #000}
.dy-info .au .flw{font-size:12px;border:1px solid #fff;padding:1px 8px;border-radius:10px;margin-left:8px}
.dy-info .cap{font-size:13.5px;margin-top:8px;line-height:1.6;text-shadow:0 1px 3px #000}
.dy-info .tags{color:#fff;font-size:12px;margin-top:5px;opacity:.9}
.dy-bar{position:absolute;bottom:0;left:0;right:0;height:88px;background:linear-gradient(transparent,rgba(0,0,0,.6));z-index:4}
.dy-progress{position:absolute;bottom:54px;left:8px;right:8px;height:2px;background:rgba(255,255,255,.25);z-index:6}
.dy-progress i{display:block;height:100%;width:0;background:#fff}
.dy-play{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:7;color:#fff;font-size:54px;cursor:pointer;text-shadow:0 2px 12px #000}
.dy-tabs{position:absolute;top:54px;left:0;right:0;display:flex;justify-content:center;gap:24px;z-index:5;color:#fff;font-size:14px}
.dy-tabs .t{opacity:.6;cursor:pointer}
.dy-tabs .t.on{opacity:1;font-weight:700;border-bottom:2px solid #fff}
.dy-anomaly{position:absolute;inset:0;z-index:8;pointer-events:none;mix-blend-mode:screen;opacity:0;background:linear-gradient(90deg,rgba(255,0,80,.2),rgba(0,200,255,.2))}
.dy-anomaly.on{opacity:1}
.dy-creepy-text{position:absolute;top:50%;left:0;right:0;text-align:center;color:#ff453a;font-size:18px;font-weight:700;z-index:9;opacity:0;text-shadow:0 0 12px #000;letter-spacing:.1em;pointer-events:none}

/* === 企鹅通 === */
.qq-chatlist{}
.qq-chat{display:flex;flex-direction:column;height:100%}
.qq-msgs{flex:1;overflow-y:auto;padding:16px 12px;display:flex;flex-direction:column;gap:12px;background:#0d1015}
.qq-bubble{max-width:76%;padding:10px 13px;border-radius:16px;font-size:14.5px;line-height:1.7;word-break:break-word;position:relative;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.qq-bubble.them{align-self:flex-start;background:var(--ph-card);border-bottom-left-radius:4px}
.qq-bubble.me{align-self:flex-end;background:linear-gradient(135deg,#2b6cff,#1a5fd6);color:#fff;border-bottom-right-radius:4px}
.qq-bubble.sys{align-self:center;background:rgba(255,255,255,.06);color:var(--ink3);font-size:12px;max-width:90%;text-align:center;border-radius:12px;padding:5px 14px}
.qq-bubble.img{padding:2px;background:transparent;box-shadow:none}
.qq-bubble.img img{width:200px;border-radius:12px;display:block}
.qq-sender{font-size:11px;color:var(--ink3);margin-bottom:4px}
.qq-inputbar{flex:0 0 auto;display:flex;gap:8px;padding:10px 12px;border-top:1px solid var(--ph-line);background:rgba(11,13,16,.9);backdrop-filter:blur(12px);align-items:center;position:sticky;bottom:0;z-index:5}
.qq-inputbar .qbtn{width:34px;height:34px;border-radius:8px;background:var(--ph-card);display:flex;align-items:center;justify-content:center;color:var(--ink2);font-size:18px;cursor:pointer}
.qq-inputbar .qbtn:active{background:var(--ph-card2)}
.qq-choices{padding:10px 12px;border-top:1px solid var(--ph-line);display:flex;flex-direction:column;gap:8px;background:rgba(11,13,16,.95);backdrop-filter:blur(12px);position:sticky;bottom:0;z-index:5}
.qq-choice{background:var(--ph-card);border:1px solid var(--ph-line);border-radius:14px;padding:12px 15px;font-size:14.5px;color:var(--ink);cursor:pointer;text-align:left;line-height:1.5;transition:background .15s,border-color .15s}
.qq-choice:active{background:var(--ph-card2);border-color:var(--blue)}
.qq-choice .hint{display:block;font-size:11px;color:var(--ink3);margin-top:4px}
.qq-choice.danger{border-color:rgba(255,69,58,.4)}
.qq-choice.danger:active{border-color:var(--red)}
.qq-choice.danger .hint{color:var(--red)}

/* === 微讯 === */
.wx-tab{display:flex;border-bottom:1px solid var(--ph-line);background:rgba(11,13,16,.8);backdrop-filter:blur(12px)}
.wx-tab .t{flex:1;text-align:center;padding:12px 0;font-size:14px;color:var(--ink2);cursor:pointer;font-weight:500;transition:color .2s}
.wx-tab .t.on{color:#07c160;font-weight:600;border-bottom:2px solid #07c160}
.wx-moments{padding:0}
.wx-moment{display:flex;gap:10px;padding:15px 16px;border-bottom:1px solid var(--ph-line)}
.wx-moment .av{width:40px;height:40px;border-radius:8px;background:linear-gradient(135deg,#07c160,#06a050);flex:0 0 40px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;box-shadow:0 2px 8px rgba(7,193,96,.2)}
.wx-moment .mc{flex:1;min-width:0}
.wx-moment .mn{font-size:14px;color:#5b7aa3;font-weight:600}
.wx-moment .mt{font-size:14.5px;color:var(--ink);line-height:1.7;margin-top:5px}
.wx-moment .mimgs{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-top:8px}
.wx-moment .mimgs img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px}
.wx-moment .mtime{font-size:11px;color:var(--ink3);margin-top:8px}
.wx-moment .mlike{font-size:12px;color:#5b7aa3;margin-top:6px}
.wx-chat-bubble.them{background:#fff;color:#000}

/* === 浏览器 === */
.br-bar{display:flex;align-items:center;gap:8px;padding:8px 10px;background:rgba(22,25,30,.8);backdrop-filter:blur(12px);border-bottom:1px solid var(--ph-line)}
.br-bar .url{flex:1;background:var(--ph-bg);border:1px solid var(--ph-line);border-radius:12px;padding:8px 12px;font-size:12px;color:var(--ink2);font-family:var(--mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.br-bar .bbtn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;color:var(--blue);font-size:18px;cursor:pointer;border-radius:8px;transition:background .15s}
.br-bar .bbtn:active{background:var(--ph-card2)}
.br-page{background:#fff;color:#1a1a1a;min-height:100%}
.br-page a{color:#1a4fd6}
.news-art{padding:20px 16px}
.news-art h1{font-size:21px;line-height:1.4;margin:0 0 10px;color:#111;font-weight:700}
.news-art .nmeta{font-size:12px;color:#888;margin-bottom:14px}
.news-art p{font-size:15px;line-height:1.9;color:#222;margin:0 0 14px}
.news-art img{width:100%;border-radius:8px;margin:10px 0}
.news-art .cap{font-size:12px;color:#999;text-align:center;margin-bottom:14px}
.map-grid{background:#e8ecf0;padding:16px}
.map-box{background:#fff;border-radius:14px;padding:14px;box-shadow:0 2px 10px rgba(0,0,0,.08)}
.map-box .ml{font-size:12px;color:#888}
.map-box .mv{font-size:15px;color:#111;margin:4px 0 10px;font-weight:600}
.map-pin{width:100%;aspect-ratio:16/10;background:linear-gradient(135deg,#cfe0ee,#a9c4dc);border-radius:10px;position:relative;overflow:hidden;margin-bottom:10px}
.map-pin::after{content:"📍";position:absolute;left:48%;top:42%;font-size:26px}
.hidden-site{background:#0a0a0a;color:#d0d0d0;padding:0}
.hidden-site .hs-top{background:#000;color:#ff453a;text-align:center;padding:16px;font-family:var(--mono);letter-spacing:.2em;font-size:12px;border-bottom:1px solid #1a0000}

/* === 备忘录 === */
.note-list{}
.note-item2{padding:15px 16px;border-bottom:1px solid var(--ph-line);cursor:pointer;transition:background .15s}
.note-item2:active{background:var(--ph-card)}
.note-item2 .nt{font-size:15.5px;color:var(--ink);font-weight:500}
.note-item2 .ns{font-size:12.5px;color:var(--ink3);margin-top:4px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.note-view{padding:18px 16px}
.note-view .nh{font-size:18px;font-weight:700;color:var(--ink)}
.note-view .nd{font-size:12px;color:var(--ink3);margin:6px 0 16px}
.note-view .nb{font-size:15px;color:var(--ink);line-height:1.9;white-space:pre-wrap}
.clue-card{background:var(--ph-card);border:1px solid var(--ph-line);border-left:3px solid var(--yellow);border-radius:10px;padding:13px 15px;margin-bottom:10px}
.clue-card .ct{font-size:13px;color:var(--yellow);font-weight:600}
.clue-card .cx{font-size:13.5px;color:var(--ink2);line-height:1.7;margin-top:5px}

/* === 电话 === */
.call-in{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;background:linear-gradient(180deg,#0a0c10,#0d1015)}
.call-in .cav{width:100px;height:100px;border-radius:50%;background:linear-gradient(135deg,var(--ph-card2),var(--ph-card));display:flex;align-items:center;justify-content:center;font-size:42px;color:var(--ink2);margin-bottom:20px;box-shadow:0 8px 32px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.1)}
.call-in .cnm{font-size:26px;font-weight:600}
.call-in .cno{font-size:14px;color:var(--ink3);margin-top:5px;font-family:var(--mono)}
.call-in .csts{font-size:13px;color:var(--green);margin-top:10px}
.call-btns{display:flex;gap:64px;margin-top:54px}
.call-btn{width:68px;height:68px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:30px;color:#fff;cursor:pointer;box-shadow:0 6px 20px rgba(0,0,0,.4)}
.call-btn.accept{background:linear-gradient(135deg,#34c759,#28a745)}
.call-btn.reject{background:linear-gradient(135deg,#ff453a,#d63031);transform:rotate(135deg)}

/* === 结局 === */
.ending{position:absolute;inset:0;z-index:100;display:none;flex-direction:column;align-items:center;justify-content:center;background:#000;color:#e8eaed;padding:30px;text-align:center;overflow-y:auto}
.ending.on{display:flex;animation:endIn 1.2s}
@keyframes endIn{from{opacity:0}to{opacity:1}}
.ending .ek{font-size:11px;letter-spacing:.3em;color:var(--ink3);margin-bottom:14px}
.ending h1{font-size:30px;font-weight:700;margin:0 0 6px;letter-spacing:.04em}
.ending .esub{font-size:13px;color:var(--ink3);margin-bottom:26px}
.ending .eimg{width:180px;height:240px;object-fit:cover;border-radius:8px;margin-bottom:24px;opacity:.85}
.ending .ebody{font-size:14.5px;line-height:2;color:var(--ink2);max-width:320px;margin-bottom:30px}
.ending .estat{font-size:12px;color:var(--ink3);background:var(--ph-card);border:1px solid var(--ph-line);border-radius:10px;padding:12px 16px;margin-bottom:24px;line-height:1.9}
.ending .estat b{color:var(--ink)}
.ending .eacts{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}
.ebtn{background:transparent;border:1px solid var(--ph-line);color:var(--ink);padding:11px 22px;border-radius:24px;font-size:13px;cursor:pointer}
.ebtn.pri{background:var(--blue);border-color:var(--blue);color:#fff}
.ebtn:active{opacity:.8}

/* toast */
.toast{position:fixed;left:50%;top:60px;transform:translateX(-50%) translateY(-20px);z-index:9000;background:rgba(0,0,0,.85);border:1px solid var(--ph-line);color:var(--ink);padding:10px 18px;font-size:13px;border-radius:20px;opacity:0;transition:.3s;pointer-events:none;max-width:300px;text-align:center}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* fx */
.fx-flash{position:fixed;inset:0;z-index:9500;pointer-events:none;opacity:0;background:#fff}
.fx-flash.go{animation:flash .5s}
@keyframes flash{0%{opacity:0}10%{opacity:.9}40%{opacity:.1}55%{opacity:.7}100%{opacity:0}}
.fx-noise{position:fixed;inset:0;z-index:9400;pointer-events:none;opacity:.03;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}

/* 开机 */
.boot{position:absolute;inset:0;z-index:200;background:#000;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#e8eaed;transition:opacity .8s}
.boot.hide{opacity:0;pointer-events:none}
.boot .logo{font-size:40px;font-weight:200;letter-spacing:.1em;margin-bottom:30px;opacity:.9}
.boot .bbar{width:200px;height:2px;background:#1a1a1a;overflow:hidden;border-radius:2px}
.boot .bbar i{display:block;height:100%;width:0;background:#e8eaed;transition:width .2s}
.boot .btxt{font-size:11px;color:var(--ink3);margin-top:14px;letter-spacing:.1em}

/* ===== 恐怖FX 层 ===== */
.fx-glitch{position:fixed;inset:0;z-index:9600;pointer-events:none;opacity:0;background:linear-gradient(90deg,rgba(255,0,80,.15) 0%,transparent 20%,rgba(0,200,255,.1) 40%,transparent 60%,rgba(255,0,80,.15) 80%);mix-blend-mode:screen}
.fx-glitch.on{opacity:1;animation:glitchFx .8s steps(8)}
@keyframes glitchFx{0%{transform:translateX(0)}20%{transform:translateX(-4px) skewX(2deg)}40%{transform:translateX(4px) skewX(-2deg)}60%{transform:translateX(-2px)}80%{transform:translateX(2px)}100%{transform:translateX(0)}}
.fx-vignette{position:fixed;inset:0;z-index:9300;pointer-events:none;opacity:0;box-shadow:inset 0 0 200px 60px rgba(0,0,0,.9);transition:opacity 1s}
.fx-vignette.pulse{opacity:1;animation:vigPulse 3s}
@keyframes vigPulse{0%{opacity:0}30%{opacity:1}100%{opacity:0}}
.fx-creepy{position:fixed;top:40%;left:0;right:0;z-index:9700;pointer-events:none;opacity:0;text-align:center;color:var(--red);font-size:22px;font-weight:700;letter-spacing:.15em;text-shadow:0 0 20px rgba(255,69,58,.6);transition:opacity .5s}
.fx-creepy.show{opacity:.85;animation:creepyFlicker 3s}
@keyframes creepyFlicker{0%,100%{opacity:0}10%{opacity:.85}15%{opacity:.2}20%{opacity:.85}50%{opacity:.6}55%{opacity:.1}60%{opacity:.85}90%{opacity:.5}}

/* 手机震动 */
#phone.shake{animation:phoneShake .6s}
@keyframes phoneShake{0%,100%{transform:translate(0,0)}10%{transform:translate(-3px,2px)}20%{transform:translate(3px,-2px)}30%{transform:translate(-2px,-3px)}40%{transform:translate(2px,3px)}50%{transform:translate(-3px,1px)}60%{transform:translate(3px,-1px)}70%{transform:translate(-1px,2px)}80%{transform:translate(1px,-2px)}90%{transform:translate(-2px,1px)}}

/* ===== 录音机 App ===== */
.rec-wrap{padding:20px 16px;display:flex;flex-direction:column;height:100%;gap:16px}
.rec-header{text-align:center}
.rec-header .rec-title{font-size:17px;font-weight:600;color:var(--ink)}
.rec-header .rec-meta{font-size:12px;color:var(--ink3);margin-top:4px}
.rec-wave{flex:1;min-height:120px;background:var(--ph-card);border:1px solid var(--ph-line);border-radius:12px;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center}
.rec-wave canvas{width:100%;height:100%;display:block}
.rec-wave .rec-time{position:absolute;top:8px;right:12px;font-size:12px;color:var(--ink2);font-family:var(--mono)}
.rec-wave .rec-cursor{position:absolute;top:0;bottom:0;width:2px;background:var(--red);z-index:5;box-shadow:0 0 8px var(--red)}
.rec-controls{display:flex;align-items:center;justify-content:center;gap:20px}
.rec-btn{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:22px;cursor:pointer;border:2px solid var(--ph-line);background:var(--ph-card);color:var(--ink)}
.rec-btn.play{background:var(--blue);border-color:var(--blue);color:#fff;width:64px;height:64px;font-size:26px}
.rec-btn:active{transform:scale(.92)}
.rec-speed{display:flex;gap:8px;justify-content:center}
.rec-speed .sp{background:var(--ph-card);border:1px solid var(--ph-line);border-radius:8px;padding:6px 12px;font-size:12px;color:var(--ink2);cursor:pointer}
.rec-speed .sp.on{background:var(--blue);border-color:var(--blue);color:#fff}
.rec-analysis{background:var(--ph-card);border:1px solid var(--ph-line);border-radius:10px;padding:14px;font-size:13px;color:var(--ink2);line-height:1.8}
.rec-analysis .ra-title{color:var(--yellow);font-weight:600;margin-bottom:6px}
.rec-analysis .ra-finding{color:var(--red);margin-top:8px;font-weight:500}

/* ===== 文件管理器 App ===== */
.files-list{padding:0}
.file-item{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--ph-line);cursor:pointer}
.file-item:active{background:var(--ph-card)}
.file-item .fic{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:20px;flex:0 0 40px}
.file-item .fic.doc{background:rgba(74,158,255,.15);color:var(--blue)}
.file-item .fic.img{background:rgba(191,90,242,.15);color:var(--purple)}
.file-item .fic.key{background:rgba(255,69,58,.15);color:var(--red)}
.file-item .fmeta{flex:1;min-width:0}
.file-item .fmeta .fn{font-size:14px;color:var(--ink);font-weight:500}
.file-item .fmeta .fs{font-size:11px;color:var(--ink3);margin-top:2px}
.file-item .flock{font-size:16px;color:var(--ink3)}
.file-view{padding:16px}
.file-view .fv-header{border-bottom:1px solid var(--ph-line);padding-bottom:12px;margin-bottom:14px}
.file-view .fv-header .fvt{font-size:16px;font-weight:600;color:var(--ink)}
.file-view .fv-header .fvm{font-size:11px;color:var(--ink3);margin-top:4px}
.file-view .fv-body{font-size:14px;color:var(--ink);line-height:1.9;white-space:pre-wrap;font-family:var(--mono)}
.file-view .fv-body .red{color:var(--red)}
.file-view .fv-body .yellow{color:var(--yellow)}
.file-view .fv-body .muted{color:var(--ink3)}
.file-locked{text-align:center;padding:40px 20px;color:var(--ink3)}
.file-locked .lock-ic{font-size:48px;margin-bottom:12px}
.file-locked .lock-hint{font-size:13px;margin-top:8px;color:var(--yellow)}

/* ===== 地图 App ===== */
.map-app{height:100%;display:flex;flex-direction:column;position:relative}
.map-canvas{flex:1;position:relative;overflow:hidden;background:linear-gradient(180deg,#0a1018,#0d1620)}
.map-canvas svg{width:100%;height:100%;display:block}
.map-loc{cursor:pointer;transition:filter .3s}
.map-loc:hover{filter:brightness(1.5)}
.map-loc circle{transition:r .3s}
.map-loc.active circle{r:12}
.map-info{flex:0 0 auto;background:var(--ph-card);border-top:1px solid var(--ph-line);padding:16px;max-height:45%;overflow-y:auto}
.map-info .mi-name{font-size:16px;font-weight:600;color:var(--ink)}
.map-info .mi-desc{font-size:13px;color:var(--ink2);line-height:1.7;margin-top:8px}
.map-info .mi-evidence{font-size:12px;color:var(--yellow);margin-top:10px;padding:8px 12px;background:rgba(255,214,10,.08);border-radius:8px;border-left:2px solid var(--yellow)}
.map-choices{padding:10px 12px;border-top:1px solid var(--ph-line);display:flex;flex-direction:column;gap:8px;background:var(--ph-bg)}
.map-choice{background:var(--ph-card);border:1px solid var(--ph-line);border-radius:12px;padding:11px 14px;font-size:14px;color:var(--ink);cursor:pointer;text-align:left}
.map-choice:active{background:var(--ph-card2)}
.map-choice.danger{border-color:rgba(255,69,58,.4);color:var(--red)}

/* 隐藏站点 */
.hidden-site .hs-body{padding:20px 16px;font-size:14px;line-height:1.9;color:#999;font-family:var(--mono)}
.hidden-site .hs-body h2{color:#ff453a;font-size:16px;margin:16px 0 8px}
.hidden-site .hs-body .hl{color:#ff9500}
.hidden-site .hs-body .member{background:#0d0d0d;border:1px solid #1a0000;border-radius:6px;padding:10px 12px;margin:8px 0}
.hidden-site .hs-body .member .mn{color:#ff453a;font-weight:600}
.hidden-site .hs-body .member .md{color:#666;font-size:12px;margin-top:4px}
.hidden-site .hs-unlock{padding:20px;text-align:center}
.hidden-site .hs-unlock input{background:#0d0d0d;border:1px solid #330000;color:#ff453a;font-family:var(--mono);font-size:16px;text-align:center;padding:10px;border-radius:6px;width:180px;letter-spacing:.2em;outline:none}
.hidden-site .hs-unlock button{margin-top:12px;background:#1a0000;border:1px solid #ff453a;color:#ff453a;padding:8px 20px;border-radius:6px;font-size:14px;cursor:pointer;font-family:var(--mono)}

/* 警方通报 */
.police-report{background:#fff;color:#1a1a1a;padding:0}
.police-report .pr-header{background:#1a2332;color:#fff;padding:14px 16px;text-align:center;font-weight:600;font-size:15px}
.police-report .pr-body{padding:18px 16px;font-size:14px;line-height:1.9}
.police-report .pr-body .seal{text-align:center;color:#c00;border:2px solid #c00;display:inline-block;padding:4px 12px;border-radius:4px;font-size:12px;margin:8px 0}
.police-report .pr-body .redacted{background:#000;color:#000;user-select:none}

/* 志愿者搜索 */
.search-vol{background:#f5f5f5;color:#1a1a1a;padding:0}
.search-vol .sv-header{background:#34c759;color:#fff;padding:14px 16px;text-align:center;font-weight:600;font-size:15px}
.search-vol .sv-body{padding:16px}
.search-vol .sv-body h3{font-size:15px;margin:14px 0 8px}
.search-vol .sv-body .sv-info{background:#fff;border-radius:8px;padding:12px;margin:8px 0;font-size:13px;line-height:1.7}
.search-vol .sv-body .sv-info b{color:#34c759}

/* 录音播放器波形 */
.rec-bar{display:flex;align-items:flex-end;gap:2px;height:60px;justify-content:center}
.rec-bar .bar{width:3px;background:var(--blue);border-radius:2px;min-height:4px;transition:height .1s}
.rec-bar .bar.peak{background:var(--red)}

/* 帖子内嵌图片可点击放大 */
.thread-detail .op .body img.zoomable{cursor:zoom-in}
.thread-detail .op .body img.zoomable:active{transform:scale(1.05);transition:.2s}

/* 可疑文字高亮 */
.susp-text{color:var(--red);cursor:pointer;text-decoration:underline dotted var(--red);text-underline-offset:3px}
.susp-text:active{background:rgba(255,69,58,.1)}

/* 章节提示 */
.chapter-toast{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:9800;background:rgba(0,0,0,.92);border:1px solid var(--red);color:var(--red);padding:20px 30px;font-size:18px;border-radius:12px;text-align:center;opacity:0;pointer-events:none;transition:opacity .5s;max-width:280px}
.chapter-toast.show{opacity:1;animation:chapterIn .5s}
@keyframes chapterIn{from{opacity:0;transform:translate(-50%,-50%) scale(.9)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}

/* ===== 场景容器 ===== */
.scene{display:none;position:fixed;inset:0;z-index:1000}
.scene.on{display:block}

/* ===== 宿舍场景 ===== */
.dorm-wrap{max-width:480px;margin:0 auto;padding:24px 18px 70px;color:#ccc;font-family:"PingFang SC","Microsoft YaHei",sans-serif}
.dorm-header{text-align:center;margin-bottom:20px}
.dorm-header .dorm-title{font-size:22px;font-weight:700;color:#ff453a;text-shadow:0 0 20px rgba(255,69,58,.2)}
.dorm-header .dorm-sub{font-size:12px;color:#555;margin-top:5px}
.dorm-desc{font-size:14px;color:#888;line-height:1.9;margin-bottom:22px;padding:16px 18px;background:rgba(20,20,24,.6);border-radius:14px;border:1px solid rgba(255,255,255,.06);backdrop-filter:blur(8px)}
.dorm-spots{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:22px}
.dorm-spot{background:rgba(20,20,24,.6);border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:18px 8px;text-align:center;cursor:pointer;transition:border .2s,transform .15s;backdrop-filter:blur(8px)}
.dorm-spot:active{border-color:#ff453a;background:rgba(255,69,58,.08);transform:scale(.95)}
.dorm-spot.searched{opacity:.4;border-color:rgba(255,255,255,.03)}
.dorm-spot .ds-icon{font-size:30px;margin-bottom:7px}
.dorm-spot .ds-name{font-size:12px;color:#aaa}
.dorm-laptop-btn{background:linear-gradient(135deg,rgba(13,17,23,.8),rgba(22,27,34,.8));border:1px solid rgba(255,69,58,.4);border-radius:16px;padding:20px;text-align:center;cursor:pointer;margin-bottom:16px;backdrop-filter:blur(8px);transition:transform .15s,box-shadow .2s;box-shadow:0 4px 20px rgba(255,69,58,.08)}
.dorm-laptop-btn:active{transform:scale(.98)}
.dorm-laptop-btn.locked{opacity:.3;pointer-events:none;border-color:rgba(255,255,255,.06);box-shadow:none}
.dorm-laptop-btn .dlb-icon{font-size:34px;margin-bottom:7px}
.dorm-laptop-btn .dlb-text{font-size:16px;color:#ff453a;font-weight:600}
.dorm-hint{font-size:12px;color:#ff9500;background:rgba(255,149,0,.08);border-radius:10px;padding:11px 14px;margin-bottom:16px;line-height:1.7;border:1px solid rgba(255,149,0,.15)}
.dorm-back{text-align:center;color:#555;font-size:13px;cursor:pointer;padding:14px;transition:color .2s}
.dorm-back:active{color:#888}

/* ===== 笔记本场景 ===== */
#laptop-scene{background:linear-gradient(180deg,#1a1a1a,#0d0d0d);display:none}
#laptop-scene.on{display:flex;align-items:center;justify-content:center;animation:laptopIn .5s ease}
@keyframes laptopIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}
.laptop-frame{width:100%;max-width:920px;height:100vh;max-height:700px;background:linear-gradient(180deg,#3a3a3c,#1c1c1e);border-radius:14px 14px 4px 4px;padding:14px;box-shadow:0 30px 80px rgba(0,0,0,.6),0 0 0 1px rgba(255,255,255,.05);position:relative}
.laptop-frame::after{content:"";position:absolute;bottom:-6px;left:50%;transform:translateX(-50%);width:120px;height:6px;background:#1c1c1e;border-radius:0 0 8px 8px}
.laptop-screen{width:100%;height:100%;background:#1a1d24;border-radius:6px;overflow:hidden;position:relative;display:flex;flex-direction:column;box-shadow:inset 0 0 0 1px rgba(255,255,255,.04)}
.laptop-topbar{flex:0 0 auto;height:34px;background:rgba(20,20,22,.95);backdrop-filter:blur(20px);display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid rgba(255,255,255,.04);position:relative;z-index:60}
.laptop-topbar .lt-logo{font-size:13px;color:#ccc;font-weight:600;display:flex;align-items:center;gap:6px}
.laptop-topbar .lt-logo::before{content:"";width:14px;height:14px;background:linear-gradient(135deg,#fff,#ccc);border-radius:3px;display:inline-block}
.laptop-topbar .lt-right{display:flex;gap:14px;align-items:center}
.laptop-topbar .lt-time,.laptop-topbar .lt-batt{font-size:12px;color:#999;font-weight:500}
.laptop-desktop{flex:1;position:relative;overflow:hidden;background:
  radial-gradient(ellipse at 30% 40%,rgba(40,60,100,.25),transparent 50%),
  radial-gradient(ellipse at 70% 70%,rgba(80,30,60,.2),transparent 50%),
  linear-gradient(180deg,#1a1d24,#0f1218)}
.desktop-icons{display:grid;grid-template-columns:repeat(auto-fill,86px);gap:18px;padding:28px 24px}
.desktop-icon{text-align:center;cursor:pointer;padding:8px 4px;border-radius:10px;transition:background .2s;position:relative}
.desktop-icon:active{background:rgba(255,255,255,.1)}
.desktop-icon .di-ic{width:52px;height:52px;border-radius:13px;display:flex;align-items:center;justify-content:center;font-size:26px;margin:0 auto 7px;box-shadow:0 6px 16px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.15)}
.desktop-icon .di-nm{font-size:12px;color:#ddd;font-weight:500;text-shadow:0 1px 3px rgba(0,0,0,.5)}
.desktop-icon .badge{position:absolute;background:#ff453a;color:#fff;font-size:9px;border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center;margin-left:32px;margin-top:-4px;border:2px solid #1a1d24;box-shadow:0 2px 6px rgba(255,69,58,.4)}
.desktop-bg-text{position:absolute;bottom:30px;right:30px;font-size:90px;color:rgba(255,255,255,.025);font-weight:700;pointer-events:none;letter-spacing:.05em}
.laptop-back-btn{position:absolute;bottom:12px;left:12px;background:rgba(255,255,255,.12);backdrop-filter:blur(8px);color:#ccc;padding:7px 16px;border-radius:16px;font-size:12px;cursor:pointer;z-index:100;border:1px solid rgba(255,255,255,.1);transition:background .2s}
.laptop-back-btn:active{background:rgba(255,255,255,.2)}

/* 笔记本窗口 */
.laptop-window{display:none;position:absolute;top:34px;left:0;right:0;bottom:0;background:#1c1c1e;z-index:50;flex-direction:column;animation:winOpen .25s ease}
@keyframes winOpen{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
.laptop-window.on{display:flex}
.window-titlebar{flex:0 0 auto;height:40px;background:rgba(40,40,42,.95);backdrop-filter:blur(20px);display:flex;align-items:center;padding:0 16px;border-bottom:1px solid rgba(255,255,255,.06);position:relative}
.window-titlebar .wt-traffic{display:flex;gap:8px;align-items:center;flex:0 0 auto}
.window-titlebar .wt-traffic::before{content:"";width:12px;height:12px;border-radius:50%;background:#ff5f57;box-shadow:0 0 0 1px rgba(0,0,0,.1)}
.window-titlebar .wt-traffic::after{content:"";width:12px;height:12px;border-radius:50%;background:#ffbd2e;box-shadow:0 0 0 1px rgba(0,0,0,.1);position:absolute;left:40px}
.window-titlebar .wt-close{width:12px;height:12px;border-radius:50%;background:#28c840;cursor:pointer;box-shadow:0 0 0 1px rgba(0,0,0,.1);border:0;position:absolute;left:64px;transition:transform .15s}
.window-titlebar .wt-close:active{transform:scale(.8)}
.window-titlebar .wt-title{font-size:13px;color:#ddd;font-weight:600;flex:1;text-align:center;margin-left:80px}
.window-body{flex:1;overflow-y:auto;color:#ccc;font-size:14px;line-height:1.8;background:#1c1c1e}
.window-body::-webkit-scrollbar{width:6px}
.window-body::-webkit-scrollbar-track{background:transparent}
.window-body::-webkit-scrollbar-thumb{background:#3a3a3c;border-radius:3px}

/* 邮件App样式 */
.lp-mail-list{padding:0}
.lp-mail-row{display:flex;flex-direction:column;gap:3px;padding:13px 16px;border-bottom:1px solid rgba(255,255,255,.04);cursor:pointer;transition:background .15s}
.lp-mail-row:active{background:rgba(255,255,255,.05)}
.lp-mail-row.unread{background:rgba(43,108,255,.04)}
.lp-m-from{font-size:13px;color:#aaa;font-weight:500}
.lp-mail-row.unread .lp-m-from{color:#e8e8e8;font-weight:600}
.lp-m-subj{font-size:13.5px;color:#ccc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lp-m-prev{font-size:12px;color:#666;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lp-m-time{font-size:11px;color:#555}
.email-detail{padding:16px}
.email-detail .ed-header{border-bottom:1px solid rgba(255,255,255,.06);padding-bottom:12px;margin-bottom:14px}
.email-detail .ed-from{font-size:13px;color:#888}
.email-detail .ed-subj{font-size:16px;color:#fff;font-weight:600;margin-top:6px}
.email-detail .ed-date{font-size:11px;color:#555;margin-top:4px}
.email-detail .ed-body{font-size:14px;color:#ccc;line-height:2;white-space:pre-wrap}
.email-detail .ed-attach{margin-top:14px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:12px;cursor:pointer;transition:background .15s}
.email-detail .ed-attach:active{background:rgba(255,255,255,.08)}
.email-detail .ed-attach .ea-icon{font-size:20px}
.email-detail .ed-attach .ea-name{font-size:13px;color:#4a9eff;margin-top:4px}
.email-detail .ed-back{margin-top:16px;color:#888;font-size:13px;cursor:pointer}

/* 云盘App样式 */
.drive-path{padding:11px 16px;font-size:12px;color:#666;border-bottom:1px solid rgba(255,255,255,.04)}
.drive-list{padding:0}
.drive-item{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid rgba(255,255,255,.04);cursor:pointer;transition:background .15s}
.drive-item:active{background:rgba(255,255,255,.05)}
.drive-item .di-icon{font-size:22px;flex:0 0 auto}
.drive-item .di-name{font-size:13.5px;color:#ccc;flex:1}
.drive-item .di-size{font-size:11px;color:#555}
.drive-item .di-folder .di-icon{color:#5856d6}
.drive-item .di-file .di-icon{color:#888}
.drive-item .di-deleted{opacity:.5}
.drive-item .di-deleted .di-name{color:#ff9500}
.drive-file-view{padding:18px 16px}
.drive-file-view .dfv-header{border-bottom:1px solid rgba(255,255,255,.06);padding-bottom:12px;margin-bottom:14px}
.drive-file-view .dfv-name{font-size:15px;color:#fff;font-weight:600}
.drive-file-view .dfv-meta{font-size:11px;color:#555;margin-top:4px}
.drive-file-view .dfv-body{font-size:14px;color:#ccc;line-height:2;white-space:pre-wrap}
.drive-file-view .dfv-back{margin-top:16px;color:#888;font-size:13px;cursor:pointer}
.drive-file-view .dfv-audio{margin:14px 0;background:rgba(255,255,255,.04);border-radius:10px;padding:14px}
.drive-file-view .dfv-audio .da-bar{display:flex;align-items:flex-end;gap:2px;height:40px;margin-bottom:8px}
.drive-file-view .dfv-audio .da-bar .bar{width:3px;background:#5856d6;border-radius:2px;min-height:4px}
.drive-file-view .dfv-audio .da-bar .bar.peak{background:#ff453a}

/* 剪辑App样式 */
.ve-wrap{display:flex;flex-direction:column;height:100%}
.ve-preview{flex:0 0 auto;height:220px;background:#000;display:flex;align-items:center;justify-content:center;position:relative}
.ve-preview .vp-text{color:#555;font-size:13px}
.ve-preview .vp-play{position:absolute;width:52px;height:52px;border-radius:50%;background:rgba(255,255,255,.12);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;font-size:22px;color:#fff;cursor:pointer;border:1px solid rgba(255,255,255,.15)}
.ve-timeline{flex:1;overflow-y:auto;padding:14px;background:#0f0f0f}
.ve-track{margin-bottom:14px}
.ve-track-label{font-size:11px;color:#666;margin-bottom:5px;font-weight:500}
.ve-track-bar{height:44px;background:rgba(255,255,255,.04);border-radius:6px;position:relative;overflow:hidden;border:1px solid rgba(255,255,255,.03)}
.ve-track-clip{position:absolute;top:3px;bottom:3px;border-radius:4px;cursor:pointer}
.ve-track-clip.video{background:linear-gradient(90deg,#2b6cff,#5856d6)}
.ve-track-clip.audio1{background:linear-gradient(90deg,#34c759,#30b0c7)}
.ve-track-clip.audio2{background:linear-gradient(90deg,#ff453a,#ff9500);opacity:.7}
.ve-track-clip.hidden-track{border:1px dashed #ff453a;animation:hiddenPulse 2s infinite}
@keyframes hiddenPulse{0%,100%{opacity:.4}50%{opacity:.8}}
.ve-keyframe{position:absolute;top:0;bottom:0;width:2px;background:#ff9500;z-index:5}
.ve-info{flex:0 0 auto;background:rgba(0,0,0,.3);border-top:1px solid rgba(255,255,255,.06);padding:13px 16px;font-size:12px;color:#888;line-height:1.7}

/* 浏览器App样式（笔记本版） */
.lb-browser-bar{padding:9px 14px;background:rgba(30,30,30,.95);border-bottom:1px solid rgba(255,255,255,.06);display:flex;align-items:center;gap:8px}
.lb-browser-bar .bb-url{flex:1;background:#1a1a1a;border:1px solid rgba(255,255,255,.06);border-radius:8px;padding:7px 12px;font-size:12px;color:#888}
.lb-bookmarks{display:flex;gap:6px;padding:9px 14px;flex-wrap:wrap;border-bottom:1px solid rgba(255,255,255,.04)}
.lb-bookmark{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.04);border-radius:6px;padding:5px 11px;font-size:11px;color:#999;cursor:pointer;transition:background .15s}
.lb-bookmark:active{background:rgba(255,255,255,.12)}
.lb-history{padding:14px 16px}
.lb-history .lh-title{font-size:12px;color:#555;margin-bottom:8px;font-weight:500}
.lb-history .lh-item{font-size:13px;color:#888;padding:7px 0;border-bottom:1px solid rgba(255,255,255,.03)}
.lb-history .lh-item .lh-url{color:#4a9eff;font-size:11px}
.lb-page{padding:18px 16px;font-size:14px;color:#ccc;line-height:1.9}
.lb-page h2{color:#fff;font-size:16px;margin:14px 0 8px}
.lb-page .red{color:#ff453a}
.lb-page .yellow{color:#ff9500}
.lb-page .quote{background:rgba(88,86,214,.08);border-left:3px solid #5856d6;padding:12px 14px;border-radius:6px;margin:10px 0}

/* 加密文件夹样式 */
.enc-locked{padding:50px 24px;text-align:center}
.enc-locked .el-icon{font-size:60px;margin-bottom:18px;filter:drop-shadow(0 0 20px rgba(255,149,0,.2))}
.enc-locked .el-title{font-size:18px;color:#ff9500;font-weight:600;margin-bottom:8px}
.enc-locked .el-hint{font-size:13px;color:#555;margin-bottom:22px}
.enc-locked .el-input{background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.1);color:#fff;font-size:20px;text-align:center;padding:13px;border-radius:10px;width:220px;letter-spacing:.3em;outline:none;margin-bottom:14px;transition:border .2s,box-shadow .2s}
.enc-locked .el-input:focus{border-color:#ff9500;box-shadow:0 0 0 3px rgba(255,149,0,.12)}
.enc-locked .el-btn{background:linear-gradient(135deg,#ff9500,#ff7800);color:#000;border:none;padding:11px 32px;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;box-shadow:0 4px 14px rgba(255,149,0,.3)}
.enc-locked .el-error{color:#ff453a;font-size:12px;margin-top:8px}
.enc-files{padding:0}
.enc-file-item{display:flex;align-items:center;gap:12px;padding:13px 16px;border-bottom:1px solid rgba(255,255,255,.04);cursor:pointer;transition:background .15s}
.enc-file-item:active{background:rgba(255,255,255,.05)}
.enc-file-item .efi-icon{font-size:22px;flex:0 0 auto}
.enc-file-item .efi-name{font-size:13.5px;color:#ff9500;flex:1}
.enc-file-view{padding:18px 16px}
.enc-file-view .efv-header{border-bottom:1px solid rgba(255,255,255,.06);padding-bottom:12px;margin-bottom:14px}
.enc-file-view .efv-name{font-size:15px;color:#fff;font-weight:600}
.enc-file-view .efv-meta{font-size:11px;color:#555;margin-top:4px}
.enc-file-view .efv-body{font-size:14px;color:#ccc;line-height:2;white-space:pre-wrap}
.enc-file-view .efv-body .red{color:#ff453a}
.enc-file-view .efv-body .yellow{color:#ff9500}
.enc-file-view .efv-body .muted{color:#555}
.enc-file-view .efv-back{margin-top:16px;color:#888;font-size:13px;cursor:pointer}

/* 日记App样式 */
.diary-list{padding:0}
.diary-item{padding:13px 16px;border-bottom:1px solid rgba(255,255,255,.04);cursor:pointer;transition:background .15s}
.diary-item:active{background:rgba(255,255,255,.05)}
.diary-item .di-date{font-size:13.5px;color:#34c759;font-weight:600}
.diary-item .di-preview{font-size:13px;color:#888;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.diary-detail{padding:18px 16px}
.diary-detail .dd-date{font-size:16px;color:#34c759;font-weight:600;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid rgba(255,255,255,.06)}
.diary-detail .dd-body{font-size:14px;color:#ccc;line-height:2;white-space:pre-wrap}
.diary-detail .dd-body .red{color:#ff453a}
.diary-detail .dd-back{margin-top:16px;color:#888;font-size:13px;cursor:pointer}

/* 回声.exe样式 */
.echo-wrap{padding:28px 20px;text-align:center}
.echo-title{font-size:26px;color:#ff453a;font-weight:700;letter-spacing:.25em;margin-bottom:22px;text-shadow:0 0 24px rgba(255,69,58,.4)}
.echo-wave{height:90px;background:rgba(0,0,0,.4);border:1px solid rgba(255,69,58,.15);border-radius:10px;margin:18px 0;display:flex;align-items:center;justify-content:center;overflow:hidden}
.echo-wave .ew-bar{width:2px;background:#ff453a;margin:0 1px;min-height:4px;transition:height .1s}
.echo-text{font-size:15px;color:#ccc;line-height:2;margin:18px 0;min-height:80px}
.echo-text .red{color:#ff453a}
.echo-btn{background:rgba(255,69,58,.1);border:1px solid #ff453a;color:#ff453a;padding:11px 34px;border-radius:10px;font-size:14px;cursor:pointer;margin-top:18px;font-weight:500;transition:background .2s}
.echo-btn:active{background:#ff453a;color:#000}

/* 结局样式增强 */
.ending .ek{font-size:13px;color:#666;letter-spacing:.3em;text-transform:uppercase;margin-bottom:8px}
.ending h1{font-size:28px;color:#fff;margin-bottom:6px}
.ending .esub{font-size:14px;color:#ff453a;margin-bottom:20px}
.ending .eimg{width:100%;border-radius:8px;margin:14px 0;filter:contrast(1.2) brightness(.7)}
.ending .ebody{font-size:14px;color:#aaa;line-height:2;text-align:left;margin-bottom:20px}
.ending .estat{font-size:13px;color:#555;margin-bottom:20px;text-align:left}
.ending .estat b{color:#ff9500}
.ending .eacts{display:flex;gap:10px;justify-content:center}
.ending .ebtn{background:#222;border:1px solid #444;color:#fff;padding:10px 24px;border-radius:8px;cursor:pointer;font-size:14px}
.ending .ebtn.pri{background:#ff453a;border-color:#ff453a;color:#fff}

/* 移动端笔记本适配 */
@media(max-width:600px){
  .laptop-frame{border-radius:0;max-height:100vh;padding:0}
  .laptop-screen{border-radius:0}
  .desktop-icons{grid-template-columns:repeat(3,1fr);gap:10px;padding:16px}
  .desktop-icon .di-ic{width:40px;height:40px;font-size:20px}
  .laptop-window{top:32px}
  .window-body{font-size:13px}
}

/* ===== 设置App ===== */
.settings-page{padding:20px 16px 40px}
.settings-profile{text-align:center;padding:24px 16px;background:linear-gradient(135deg,#16191e,#0e1117);border-radius:16px;margin-bottom:20px;border:1px solid var(--ph-line)}
.settings-profile .sp-icon{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#2a2e36,#15171c);margin:0 auto 12px;display:flex;align-items:center;justify-content:center;border:2px solid var(--ph-line)}
.settings-profile .sp-name{font-size:18px;font-weight:600;color:var(--ink)}
.settings-profile .sp-sub{font-size:12px;color:var(--ink3);margin-top:4px}
.settings-group{background:var(--ph-card);border-radius:14px;overflow:hidden;margin-bottom:18px;border:1px solid var(--ph-line)}
.settings-group .sg-title{font-size:12px;color:var(--ink3);text-transform:uppercase;letter-spacing:.1em;padding:0 16px 8px;font-weight:600}
.settings-item{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--ph-line);cursor:pointer;transition:background .15s}
.settings-item:last-child{border-bottom:0}
.settings-item:active{background:var(--ph-card2)}
.settings-item .si-ic{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px;flex:0 0 30px}
.settings-item .si-ic.blue{background:rgba(74,158,255,.15);color:var(--blue)}
.settings-item .si-ic.green{background:rgba(52,199,89,.15);color:var(--green)}
.settings-item .si-ic.red{background:rgba(255,69,58,.15);color:var(--red)}
.settings-item .si-ic.orange{background:rgba(255,149,0,.15);color:var(--orange)}
.settings-item .si-main{flex:1;min-width:0}
.settings-item .si-t{font-size:15px;color:var(--ink)}
.settings-item .si-s{font-size:12px;color:var(--ink3);margin-top:2px}
.settings-item .si-arrow{color:var(--ink3);font-size:18px;flex:0 0 auto}
.settings-item.danger .si-t{color:var(--red)}
.settings-info{padding:14px 16px;font-size:12px;color:var(--ink3);line-height:1.8;text-align:center}
.settings-info b{color:var(--ink2)}
.save-modal{position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,.7);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;padding:30px;animation:lockIn .3s ease}
.save-modal .sm-box{background:var(--ph-card);border:1px solid var(--ph-line);border-radius:20px;padding:28px 24px;max-width:320px;width:100%;text-align:center}
.save-modal .sm-ic{font-size:40px;margin-bottom:14px}
.save-modal .sm-t{font-size:17px;font-weight:600;color:var(--ink);margin-bottom:8px}
.save-modal .sm-d{font-size:13px;color:var(--ink2);line-height:1.7;margin-bottom:20px}
.save-modal .sm-btns{display:flex;gap:10px}
.save-modal .sm-btn{flex:1;padding:11px;border-radius:10px;font-size:14px;cursor:pointer;border:1px solid var(--ph-line);background:var(--ph-card2);color:var(--ink);font-weight:500}
.save-modal .sm-btn.pri{background:var(--blue);border-color:var(--blue);color:#fff}
.save-modal .sm-btn.danger{background:var(--red);border-color:var(--red);color:#fff}

/* ===== 手机锁屏 ===== */
#lockscreen{
  position:fixed;inset:0;z-index:5000;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  background:
    radial-gradient(ellipse at 30% 20%,rgba(30,50,90,.35),transparent 50%),
    radial-gradient(ellipse at 70% 80%,rgba(60,20,80,.3),transparent 50%),
    linear-gradient(180deg,#0a0c10 0%,#0d1015 50%,#080a0e 100%);
  color:var(--ink);text-align:center;padding:40px 30px;
  animation:lockIn .8s ease;
  overflow:hidden;
}
@keyframes lockIn{from{opacity:0;filter:blur(8px)}to{opacity:1;filter:blur(0)}}
#lockscreen .lock-time{
  font-size:76px;font-weight:200;letter-spacing:.01em;
  font-variant-numeric:tabular-nums;line-height:1;
  text-shadow:0 0 40px rgba(74,158,255,.12),0 2px 8px rgba(0,0,0,.5);
}
#lockscreen .lock-date{
  font-size:15px;color:var(--ink2);margin-top:10px;letter-spacing:.06em;font-weight:500;
}
#lockscreen .lock-notify{
  margin-top:44px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.1);
  border-radius:18px;padding:14px 18px;display:flex;align-items:center;gap:12px;
  max-width:310px;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
  animation:notifySlide .8s ease .3s both;box-shadow:0 8px 32px rgba(0,0,0,.3);
}
@keyframes notifySlide{from{opacity:0;transform:translateY(24px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
#lockscreen .lock-notify .ln-icon{
  width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#07c160,#06a050);
  display:flex;align-items:center;justify-content:center;font-size:19px;flex:0 0 38px;
  box-shadow:0 4px 12px rgba(7,193,96,.3);
}
#lockscreen .lock-notify .ln-text{
  font-size:12.5px;color:var(--ink2);line-height:1.5;text-align:left;
}
#lockscreen .lock-pw-area{
  margin-top:40px;display:flex;flex-direction:column;align-items:center;gap:0;
}
#lockscreen .lock-pw-area input{
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);
  color:var(--ink);font-size:22px;text-align:center;padding:15px 20px;
  border-radius:16px;width:190px;letter-spacing:18px;outline:none;
  transition:border .25s,background .25s,box-shadow .25s;
  backdrop-filter:blur(8px);
}
#lockscreen .lock-pw-area input:focus{
  border-color:var(--blue);background:rgba(74,158,255,.1);box-shadow:0 0 0 3px rgba(74,158,255,.15);
}
#lockscreen .lock-pw-area input::placeholder{color:var(--ink3);letter-spacing:2px;font-size:14px}
#lockscreen .lock-pw-area button{
  margin-top:16px;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);
  color:var(--ink);padding:11px 44px;border-radius:26px;font-size:15px;cursor:pointer;font-weight:500;
  transition:background .2s,transform .1s;backdrop-filter:blur(8px);
}
#lockscreen .lock-pw-area button:active{background:rgba(74,158,255,.25);transform:scale(.96)}
#lockscreen .lock-hint{
  margin-top:50px;font-size:12px;color:var(--ink3);line-height:1.7;max-width:260px;
  opacity:.5;
}
#lockscreen::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.5'/%3E%3C/svg%3E");
  opacity:.04;
}
#lockscreen::after{
  content:"";position:absolute;top:0;left:0;right:0;height:200px;pointer-events:none;
  background:linear-gradient(180deg,rgba(255,255,255,.06),transparent);
}

/* ===== 学校官网场景 ===== */
.school-scene{
  background:#f3f5f8;
}
.school-scene.on{
  display:block;
  animation:schoolIn .4s ease;
}
@keyframes schoolIn{from{opacity:0;transform:scale(1.01)}to{opacity:1;transform:scale(1)}}
.school-container{
  width:100%;height:100%;overflow-y:auto;overflow-x:hidden;
  -webkit-overflow-scrolling:touch;
}
.school-container::-webkit-scrollbar{width:0}
.school-page{
  display:none;min-height:100%;
}
.school-page.on{display:block}
.school-page-body{min-height:100vh}

/* 学校官网全屏适配 */
@media(max-width:600px){
  .school-container{font-size:14px}
}
@media(min-width:601px){
  .school-scene .school-container{
    max-width:900px;margin:0 auto;background:#f3f5f8;
    box-shadow:0 0 40px rgba(0,0,0,.15);
  }
}

/* ===== 宿舍场景增强 ===== */
#dorm-scene{background:linear-gradient(180deg,#0a0a0c,#0d0e12)}
#dorm-scene.on{animation:dormIn .5s ease}
@keyframes dormIn{from{opacity:0}to{opacity:1}}
