/* ============ 全局 ============ */
* { margin:0; padding:0; box-sizing:border-box; }
html,body { width:100%; height:100%; overflow:hidden; background:#000;
  font-family:"Microsoft YaHei","SimSun",sans-serif; user-select:none; }
.hidden { display:none !important; }

/* ============ 开机（扁平世代：黑屏+转圈点） ============ */
#boot { position:fixed; inset:0; background:#000; z-index:900; padding:28px; }
#boot-text { color:#9aa; font:13px/1.7 "Consolas","Courier New",monospace; white-space:pre-wrap; }
#boot-logo { position:fixed; inset:0; z-index:901; background:#0b0f16;
  display:flex; align-items:center; justify-content:center; }
.logo-box { text-align:center; color:#fff; }
.logo-name { font-size:34px; letter-spacing:8px; font-weight:300; color:#e8ecf4; }
.logo-name span { font-size:15px; margin-left:8px; color:#5b8def; letter-spacing:2px; }
.spin { margin:34px auto 16px; width:64px; height:64px; position:relative; }
.spin i { position:absolute; left:50%; top:0; width:7px; height:7px; margin-left:-3.5px;
  background:#e8ecf4; border-radius:50%; transform-origin:50% 32px;
  animation:spin 1.6s cubic-bezier(.5,.15,.5,.85) infinite; }
.spin i:nth-child(2){ animation-delay:.14s } .spin i:nth-child(3){ animation-delay:.28s }
.spin i:nth-child(4){ animation-delay:.42s } .spin i:nth-child(5){ animation-delay:.56s }
@keyframes spin { from{transform:rotate(0)} to{transform:rotate(360deg)} }
.logo-tip { font-size:12px; color:#7a8496; }

/* ============ 桌面 ============ */
#desktop { position:fixed; inset:0; isolation:isolate; background-color:#061a3c;
  background-image:url("../assets/wallpaper_1_morning.jpg");
  background-position:center; background-size:cover; background-repeat:no-repeat; }
.progress-wallpaper-transition { position:absolute; inset:0; z-index:0; pointer-events:none;
  background-position:center; background-size:cover; background-repeat:no-repeat;
  opacity:0; transition:opacity 1.8s ease-in-out; }
.progress-wallpaper-transition.show { opacity:1; }
/* 接受"异常壁纸"之前的普通蓝色桌面 */
#desktop.intro-wallpaper { background-image:linear-gradient(135deg,#0e3a6e 0%,#134a8c 45%,#0a2a55 100%); }
#desktop::before { content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
  box-shadow:inset 0 0 150px rgba(0,0,15,.22); }
#desktop::after { content:""; position:absolute; inset:0; z-index:1200; pointer-events:none;
  opacity:0; background:#fff; }
#desktop.wallpaper-switching::after { animation:wallpaper-flash 1.08s ease-out both; }
@keyframes wallpaper-flash {
  0% { opacity:0; background:#fff; }
  18% { opacity:.92; background:#fff; }
  35% { opacity:.68; background:#8a071d; }
  62% { opacity:.2; background:#200310; }
  100% { opacity:0; background:#08050d; }
}
#wallpaper-tag { position:absolute; right:16px; bottom:56px; z-index:3; color:rgba(255,255,255,.3);
  font-size:12px; text-align:right; line-height:1.6; pointer-events:none; }

#icons { position:absolute; top:16px; left:14px; z-index:4; display:flex; flex-direction:column;
  flex-wrap:wrap; gap:10px; height:calc(100% - 80px); align-content:flex-start; }
.icon { width:84px; text-align:center; cursor:pointer; padding:8px 2px; border-radius:4px;
  border:1px solid transparent; }
.icon .glyph { height:48px; display:flex; align-items:center; justify-content:center;
  font-size:33px; filter:drop-shadow(0 2px 3px rgba(0,0,0,.45)); position:relative; }
/* 回收站里有没还原的东西：纸角从桶口露出来，并轻轻亮几下 */
.icon.trash-full .glyph::after { content:"📄"; position:absolute; top:-1px; left:50%;
  font-size:16px; transform:translateX(-46%) rotate(-14deg); pointer-events:none; }
.icon.trash-full .glyph { animation:trash-hint 2.6s ease-in-out 3; }
@keyframes trash-hint {
  0%,100% { filter:drop-shadow(0 2px 3px rgba(0,0,0,.45)); }
  50% { filter:drop-shadow(0 0 10px rgba(255,238,200,.9)) drop-shadow(0 2px 3px rgba(0,0,0,.45)); } }
@media (prefers-reduced-motion:reduce) { .icon.trash-full .glyph { animation:none; } }
.icon .label { color:#fff; font-size:12px; margin-top:5px; text-shadow:0 1px 2px rgba(0,0,0,.8);
  word-break:break-all; line-height:1.35; }
.icon.selected { background:rgba(255,255,255,.16); border-color:rgba(255,255,255,.35); }
.icon:hover { background:rgba(255,255,255,.09); }

/* ============ 窗口（扁平） ============ */
.win { position:absolute; background:#fff; border:1px solid #6d7684;
  box-shadow:0 8px 30px rgba(0,0,0,.45); display:flex; flex-direction:column;
  min-width:320px; min-height:200px; border-radius:6px; overflow:hidden; }
.win.focused { border-color:#2b62d9; box-shadow:0 12px 40px rgba(0,0,0,.55); }
.win-title { height:32px; display:flex; align-items:center; padding:0 4px 0 12px; gap:8px;
  background:#f2f4f7; color:#333; font-size:13px; border-bottom:1px solid #e2e5ea; cursor:default; }
.win:not(.focused) .win-title { color:#999; }
.win-title .t-icon { font-size:14px; }
.win-title .t-text { flex:1; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
.win-title .t-close { width:40px; height:32px; line-height:32px; text-align:center;
  color:#666; cursor:pointer; font-size:15px; }
.win-title .t-close:hover { background:#e44a4a; color:#fff; }
.win-title .t-max { width:40px; height:32px; line-height:32px; text-align:center;
  color:#666; cursor:pointer; font-size:13px; }
.win-title .t-max:hover { background:#e2e5ea; }
.win-resize { position:absolute; right:0; bottom:0; width:18px; height:18px;
  cursor:nwse-resize; z-index:5;
  background:linear-gradient(135deg, transparent 50%, #b8bdc6 50%, #b8bdc6 55%, transparent 55%,
    transparent 65%, #b8bdc6 65%, #b8bdc6 70%, transparent 70%,
    transparent 80%, #b8bdc6 80%, #b8bdc6 85%, transparent 85%); }
/* 手机形态窗口：固定尺寸，不给缩放/最大化（它是一台手机） */
.win.phone .t-max, .win.phone .win-resize { display:none; }
.win-body { flex:1; overflow:auto; background:#fff; }

/* 手机形态的APP窗口 */
.win.phone { border-radius:14px; border-color:#3a3f4a; }
.win.phone .win-title { background:#20242c; color:#dfe4ec; border-bottom:none; }
.win.phone .win-title .t-close:hover { border-radius:0 0 0 0; }
.app-head { display:flex; align-items:center; gap:10px; padding:12px 14px; color:#fff; }
.app-head .a-ic { font-size:22px; }
.app-head .a-name { font-size:16px; font-weight:bold; letter-spacing:1px; }
.app-body { background:#f4f5f7; min-height:100%; user-select:text; }
.app-search { display:flex; gap:6px; padding:10px 12px; }
.app-search input { flex:1; height:34px; border:none; border-radius:17px; padding:0 14px;
  font-size:13px; background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.08); outline:none; }
.app-search button { height:34px; padding:0 16px; border:none; border-radius:17px;
  color:#fff; font-size:13px; cursor:pointer; }

/* ============ 任务栏（扁平深色） ============ */
#taskbar { position:absolute; left:0; right:0; bottom:0; height:42px; z-index:500;
  background:#1a212e; display:flex; align-items:center; padding:0 6px; gap:4px;
  border-top:1px solid #2c3547; }
#btn-start { height:42px; padding:0 16px; font-size:16px; color:#dfe4ec;
  background:transparent; border:none; cursor:pointer; }
#btn-start:hover { background:#2b3648; }
#task-buttons { flex:1; display:flex; gap:3px; overflow:hidden; }
.task-btn { max-width:180px; height:34px; padding:0 12px; font-size:12px; color:#cfd6e2;
  background:transparent; border:none; border-bottom:2px solid transparent; border-radius:0;
  cursor:pointer; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
.task-btn:hover { background:#2b3648; }
.task-btn.active { background:#242e40; border-bottom-color:#5b8def; }
#tray { display:flex; align-items:center; gap:12px; color:#cfd6e2; font-size:12px;
  height:42px; padding:0 12px; }
#tray-battery { color:#ff9a9a; } #tray-battery i { font-style:normal; margin-left:2px; font-size:11px; }
#tray-storage { color:#ffd75e; cursor:help; animation:blink 2.4s infinite; }
@keyframes blink { 0%,60%,100%{opacity:1} 80%{opacity:.25} }

#start-menu { position:absolute; left:0; bottom:42px; width:240px; z-index:600;
  background:#232b3a; border:1px solid #33405a; box-shadow:0 -4px 24px rgba(0,0,0,.4);
  padding:6px; color:#dfe4ec; }
#start-menu hr { border:none; border-top:1px solid #33405a; margin:5px 2px; }
.sm-item { padding:10px 12px; font-size:13px; cursor:pointer; border-radius:3px; }
.sm-item:hover { background:#2f3b52; }

/* ============ 气泡 ============ */
#balloon { position:absolute; right:10px; bottom:50px; width:270px; z-index:550;
  background:#2a3346; border:1px solid #3c4a66; border-radius:6px; padding:12px 14px;
  font-size:12px; color:#dfe4ec; box-shadow:0 4px 16px rgba(0,0,0,.4); }
#balloon b { font-size:12.5px; }
#balloon p { margin-top:5px; color:#aeb8ca; line-height:1.7; }
#balloon-x { float:right; cursor:pointer; color:#8a93a6; }

/* 下载进度 */
.dl-bar { height:8px; background:#e2e5ea; border-radius:4px; overflow:hidden; margin:10px 0 6px; }
.dl-bar i { display:block; height:100%; width:0%; background:#2b62d9; border-radius:4px;
  transition:width .25s linear; }

/* ============ 动物园旧浮现层（保留兜底结构，正式版不显示栏杆） ============ */
#zoo-veil { position:absolute; inset:0; z-index:1; pointer-events:none;
  opacity:0; transition:opacity 2.5s ease; }
#zoo-veil [data-animal] { transition:opacity 3s ease; }

/* ============ 桌面宠物（被放出来的动物，在桌面上游荡） ============ */
#windows { position:absolute; inset:0; z-index:10; pointer-events:none; }
#windows .win { pointer-events:auto; }
/* 层级在窗口之上：你在查资料的时候，它就从浏览器窗口前面慢慢走过去 */
/* 可以点——点第五下的时候它会回头看你 */
.desk-pet { position:absolute; left:0; top:0; z-index:60; pointer-events:auto; cursor:pointer;
  will-change:transform; opacity:.86; filter:drop-shadow(0 4px 7px rgba(0,0,0,.4)); }
.desk-pet .pet-flip { display:block; width:100%; height:100%;
  transition:transform .35s ease; animation:pet-bob 1.7s ease-in-out infinite; }
@keyframes pet-bob { 0%,100% { translate:0 0; } 50% { translate:0 -3px; } }

/* ============ 桌面便签（清醒人格的痕迹） ============ */
#stickies { position:absolute; right:26px; top:238px; z-index:5; pointer-events:none; }
#stickies .sticky-red { pointer-events:auto; cursor:pointer; }
.sticky.crumple { animation:crumple .42s ease forwards; }
@keyframes crumple {
  40% { transform:rotate(-8deg) scale(.82); }
  100% { transform:rotate(24deg) scale(.15) translateY(30px); opacity:0; }
}
.sticky { width:150px; background:#fff8b8; color:#4a4433; font-size:13px; line-height:1.9;
  padding:12px 14px; margin-bottom:14px; transform:rotate(2.5deg);
  box-shadow:2px 3px 8px rgba(0,0,0,.35); position:relative; }
.sticky::before { content:""; position:absolute; top:-6px; left:50%; margin-left:-14px;
  width:28px; height:12px; background:rgba(255,255,255,.5); transform:rotate(-2deg); }
.sticky-red { background:#f8e8e4; color:#8a2018; font-size:16px; font-weight:bold;
  letter-spacing:2px; transform:rotate(-3deg); text-align:center; }

/* ============ 品牌脸上的动态红眼 ============ */
#watch-eye { position:absolute; z-index:1; pointer-events:none; overflow:hidden; border-radius:50%;
  background:radial-gradient(circle at 43% 36%,#ffecc0 0 28%,#f9d9a7 64%,#eab982 100%);
  box-shadow:0 0 5px rgba(92,24,20,.2),0 0 20px rgba(151,0,25,.18);
  animation:eye-awaken .78s cubic-bezier(.13,.88,.24,1.18) both; }
#watch-eye .eye-mask { position:absolute; inset:0; border-radius:50%; overflow:hidden;
  display:flex; align-items:center; justify-content:center; }
#watch-eye .eye-pupil { display:block; width:82%; height:82%; border-radius:50%;
  background:radial-gradient(circle at 38% 32%,#ff4b4c 0 5%,#e91b2a 35%,#b5071a 100%);
  box-shadow:inset -5px -7px 12px rgba(76,0,10,.24),0 0 9px rgba(182,0,20,.34);
  transform:translate3d(var(--eye-x,0),var(--eye-y,0),0) scaleY(var(--eye-sy,1));
  transform-origin:center; transition:transform .022s linear; will-change:transform; }
#watch-eye.blink .eye-pupil, #watch-eye.shut .eye-pupil {
  --eye-sy:.08; transition-duration:.075s; }
@keyframes eye-awaken {
  0% { opacity:0; transform:scale(.12) rotate(-7deg); filter:blur(5px); }
  55% { opacity:1; transform:scale(1.14) rotate(1.5deg); filter:blur(0); }
  100% { opacity:1; transform:scale(1) rotate(0); }
}

/* 壁纸舌头：视觉上贴合原图，拖走时用补片盖住壁纸里的静态舌头。 */
#drag-tongue { position:absolute; z-index:3; cursor:grab; touch-action:none; overflow:hidden;
  border:3px solid #ffdca5; border-top:0; border-radius:3px 3px 48% 48%;
  background:linear-gradient(90deg,#be071b 0%,#ec1726 46%,#c4091e 100%);
  box-shadow:0 5px 11px rgba(54,0,14,.25); }
#drag-tongue::before { content:""; position:absolute; inset:0;
  background:radial-gradient(ellipse at 42% 22%,rgba(255,111,104,.22),transparent 48%); }
#drag-tongue i { position:absolute; left:50%; top:22%; width:2px; height:44%; margin-left:-1px;
  border-radius:2px; background:rgba(255,220,176,.86); box-shadow:0 0 2px rgba(95,0,10,.3); }
#drag-tongue:hover { filter:brightness(1.08); }
#drag-tongue.dragging { cursor:grabbing; filter:brightness(1.14) drop-shadow(0 7px 7px rgba(0,0,0,.45)); }
#tongue-origin-mask { position:absolute; z-index:2; pointer-events:none; opacity:0; border-radius:3px 3px 48% 48%;
  background:linear-gradient(to bottom,#f5c895 0 57%,#481329 59%,#361024 100%);
  box-shadow:inset 0 2px 5px rgba(255,235,189,.22); }
#tongue-origin-mask.visible { opacity:1; }

/* 拖动舌头到边缘后的两段式突脸：闭嘴原图 → 张嘴图，并从张嘴瞬间播放 4 秒音频。 */
#mouth-jumpscare { position:fixed; inset:0; z-index:1450; overflow:hidden; pointer-events:none;
  background:#000; opacity:0; }
#mouth-jumpscare > img { position:absolute; inset:0; width:100%; height:100%; max-width:none;
  object-fit:cover; object-position:center; filter:contrast(1.13) brightness(.8); }
#mouth-jumpscare .mouth-closed { opacity:0; transform:scale(.42); }
#mouth-jumpscare .mouth-open { opacity:0; transform:scale(.68); }
#mouth-jumpscare.on { opacity:1; }
#mouth-jumpscare.on .mouth-closed { animation:mouth-closed-lunge .48s cubic-bezier(.06,.83,.16,1) forwards; }
#mouth-jumpscare.open .mouth-closed { animation:none; opacity:0; }
#mouth-jumpscare.open .mouth-open { opacity:1; animation:mouth-open-lunge .62s cubic-bezier(.04,.86,.12,1.03) both,
  mouth-open-tremor .075s steps(2,end) .12s 48; }
#mouth-jumpscare::before { content:""; position:absolute; inset:0; z-index:3; pointer-events:none;
  background:radial-gradient(circle at center,transparent 0 28%,rgba(115,0,13,.18) 57%,rgba(32,0,8,.68) 100%);
  opacity:0; }
#mouth-jumpscare.open::before { animation:mouth-red-flash .14s steps(2,end) 20; }
#mouth-jumpscare .mouth-scare-noise { position:absolute; inset:0; z-index:4; opacity:.2;
  background:repeating-linear-gradient(0deg,rgba(255,255,255,.1) 0 1px,transparent 1px 4px);
  mix-blend-mode:screen; animation:mouth-noise .11s steps(2,end) infinite; }
#mouth-jumpscare.out { opacity:0; transition:opacity .48s ease; }
body.mouth-scare-active #desktop { animation:desktop-hit .065s steps(2,end) 65; }
@keyframes mouth-closed-lunge {
  0% { opacity:0; transform:scale(.42); filter:blur(8px) brightness(.45); }
  18% { opacity:1; }
  100% { opacity:1; transform:scale(1.18); filter:blur(0) brightness(.82); }
}
@keyframes mouth-open-lunge {
  0% { opacity:.15; transform:scale(.62); filter:blur(8px) brightness(1.5); }
  12% { opacity:1; transform:scale(1.48) rotate(-1.1deg); filter:blur(0) brightness(.9); }
  28% { transform:scale(1.14) rotate(.5deg); }
  100% { opacity:1; transform:scale(1.24); filter:brightness(.72) contrast(1.2); }
}
@keyframes mouth-open-tremor {
  0% { margin-left:-11px; margin-top:7px; }
  50% { margin-left:12px; margin-top:-8px; }
  100% { margin-left:-5px; margin-top:6px; }
}
@keyframes mouth-red-flash { 0%{opacity:.06} 48%{opacity:.72} 100%{opacity:.16} }
@keyframes mouth-noise { 0%{transform:translateY(0)} 50%{transform:translateY(3px)} 100%{transform:translateY(-2px)} }

/* ============ 首次开机：异常壁纸弹窗风暴 ============ */
#desktop.intro-locked #btn-start { opacity:.58; cursor:default; }
#wallpaper-storm-layer { position:absolute; inset:0; z-index:900; overflow:hidden; pointer-events:none; }
.wallpaper-prompt { position:absolute; height:176px; overflow:hidden; pointer-events:auto;
  background:#f7f7f7; border:1px solid #7c8794; border-radius:6px;
  box-shadow:0 12px 34px rgba(0,0,0,.5); color:#20242a; opacity:0;
  transform:scale(.9) translateY(10px); transition:opacity .1s ease,transform .13s ease; }
.wallpaper-prompt.visible { opacity:1; transform:scale(1) translateY(0); }
.wallpaper-prompt-title { height:34px; padding-left:12px; display:flex; align-items:center;
  justify-content:space-between; background:#f1f3f6; border-bottom:1px solid #d9dde3;
  font-size:12px; color:#34383f; }
.wallpaper-prompt-title > button { width:42px; height:34px; border:0; background:transparent;
  color:#555; font-size:17px; cursor:pointer; }
.wallpaper-prompt-title > button:hover { background:#d9283a; color:#fff; }
.wallpaper-prompt-body { height:92px; padding:16px 18px; display:flex; align-items:center; gap:14px; }
.wallpaper-question { width:38px; height:38px; flex:0 0 38px; display:grid; place-items:center;
  color:#fff; background:#3277d5; border-radius:50%; font:bold 25px/1 "Segoe UI",sans-serif;
  box-shadow:inset 0 -2px 5px rgba(0,0,0,.18); }
.wallpaper-prompt-body b { font-size:15px; font-weight:600; letter-spacing:.2px; }
.wallpaper-prompt-body p { margin-top:7px; color:#70757d; font-size:11px; }
.wallpaper-prompt-actions { height:49px; display:flex; align-items:center; justify-content:flex-end;
  gap:8px; padding:0 12px; background:#eef0f3; border-top:1px solid #dadee4; }
.wallpaper-prompt-actions button { min-width:78px; height:29px; border:1px solid #a7adb6;
  border-radius:3px; background:#fff; color:#252a31; cursor:pointer; font-size:12px; }
.wallpaper-prompt-actions button[data-wallpaper-confirm] { border-color:#2365bd; background:#2b73d2; color:#fff; }
.wallpaper-prompt-actions button:hover { filter:brightness(.94); }
#wallpaper-storm-layer.urgent .wallpaper-prompt-title { animation:title-alarm .36s steps(2,end) infinite; }
#wallpaper-storm-layer.accepting .wallpaper-prompt { opacity:0; transform:scale(.72) translateY(22px);
  transition:opacity .34s ease,transform .45s ease; }
@keyframes title-alarm { 0%,46%{background:#f1f3f6;color:#34383f} 47%,100%{background:#6e0b1c;color:#fff} }
#desktop.storm-shake { animation:storm-shake .2s steps(2,end); }
@keyframes storm-shake { 0%{transform:translate(0)} 25%{transform:translate(-5px,3px)} 50%{transform:translate(5px,-3px)} 75%{transform:translate(-3px,-2px)} 100%{transform:translate(0)} }

/* 三个压缩包全部解压后的全屏突脸 */
#eye-jumpscare { position:fixed; inset:0; z-index:1300; overflow:hidden; pointer-events:none;
  display:flex; align-items:center; justify-content:center; background:#000; opacity:0; }
#eye-jumpscare .jumpscare-eye, #eye-jumpscare > img { width:116vw; height:116vh; max-width:none;
  object-fit:cover; object-position:center; filter:grayscale(1) contrast(1.32) brightness(.72);
  opacity:0; transform:scale(.36); will-change:transform,opacity,filter; }
#eye-jumpscare.on { opacity:1; animation:scare-flicker .68s steps(2,end) both; }
/* 抖动/红光的循环次数按音频的 4 秒配：抖到最后一声才停 */
#eye-jumpscare.on > img { animation:eye-lunge 1.05s cubic-bezier(.08,.84,.18,1.02) both,
  eye-tremor .09s steps(2,end) .2s 41; }
#eye-jumpscare .scare-noise { position:absolute; inset:0; opacity:.16; mix-blend-mode:screen;
  background:repeating-linear-gradient(0deg,rgba(255,255,255,.1) 0 1px,transparent 1px 3px); }
#eye-jumpscare::before { content:""; position:absolute; inset:0; z-index:2; opacity:0; pointer-events:none;
  background:radial-gradient(circle at center,rgba(255,25,25,.12) 0 28%,rgba(175,0,0,.42) 58%,rgba(45,0,0,.82) 100%);
  mix-blend-mode:screen; }
#eye-jumpscare.on::before { animation:red-strobe .13s steps(2,end) 30; }
#eye-jumpscare.out { opacity:0; transition:opacity .48s ease; }
body.jumpscare-active #desktop { animation:desktop-hit .065s steps(2,end) 60; }
@keyframes eye-lunge {
  0% { opacity:0; transform:scale(.36) translateZ(0); filter:blur(6px); }
  11% { opacity:1; transform:scale(1.52) rotate(-1.4deg); filter:blur(0); }
  21% { transform:scale(1.08) rotate(.8deg); }
  34% { transform:scale(1.28) translate(-1.2vw,.8vh); }
  100% { opacity:1; transform:scale(1.18); }
}
@keyframes eye-tremor {
  0% { margin-left:-12px; margin-top:7px; }
  50% { margin-left:14px; margin-top:-9px; }
  100% { margin-left:-7px; margin-top:10px; }
}
@keyframes red-strobe { 0%{opacity:.08} 42%{opacity:.9} 58%{opacity:.18} 100%{opacity:.74} }
@keyframes scare-flicker { 0%{background:#fff} 5%{background:#9b0000} 11%{background:#000} 18%{background:#3d0000} 26%{background:#000} 100%{background:#050000} }
@keyframes desktop-hit { 0%{transform:translate(0) rotate(0)} 35%{transform:translate(-12px,7px) rotate(-.15deg)} 70%{transform:translate(11px,-8px) rotate(.16deg)} 100%{transform:translate(-5px,4px)} }

/* 解压后自动打开的异常文本 */
.haunted-txt-window .win-body { background:#fbfbf8; }
.haunted-txt { min-height:100%; padding:28px 32px; color:#161616; background:#fbfbf8;
  font:26px/1.7 "Consolas","Courier New",monospace; user-select:text; white-space:pre-wrap; }

/* ============ 回收站 / 压缩文件夹 ============ */
.trash-window .win-body { overflow:hidden; background:#f8f9fb; }
.trash-explorer { height:100%; display:flex; flex-direction:column; color:#222; font:12px/1.35 "Microsoft YaHei",sans-serif; }
.trash-nav { height:46px; display:flex; align-items:center; gap:5px; padding:7px 10px; background:#fff; border-bottom:1px solid #e5e7eb; }
.trash-nav button { width:30px; height:30px; border:0; border-radius:4px; background:transparent; color:#4b5563; font-size:20px; cursor:pointer; }
.trash-nav button:hover:not(:disabled) { background:#eef2f7; }
.trash-nav button:disabled { color:#c9ced6; cursor:default; }
.trash-address { height:30px; flex:1; display:flex; align-items:center; gap:8px; padding:0 10px; border:1px solid #d6dae1; border-radius:4px; background:#fff; overflow:hidden; white-space:nowrap; }
.trash-address b { color:#9aa1ac; font-weight:400; }
.trash-search { width:180px; height:30px; border:1px solid #d6dae1; border-radius:4px; color:#8a9099; display:flex; align-items:center; justify-content:space-between; padding:0 9px; background:#fff; }
.trash-command { height:45px; display:flex; align-items:center; gap:4px; padding:6px 10px; background:#fff; border-bottom:1px solid #e5e7eb; }
.trash-command button, .archive-toolbar button, .archive-toolbar a { border:0; border-radius:4px; padding:7px 10px; background:transparent; color:#31363f; font:12px "Microsoft YaHei",sans-serif; text-decoration:none; cursor:pointer; }
.trash-command button:hover:not(:disabled), .archive-toolbar button:hover:not(:disabled), .archive-toolbar a:hover { background:#eaf2fb; }
.trash-command button:disabled { color:#aeb4bd; cursor:default; }
.trash-separator { height:22px; width:1px; background:#e0e3e8; margin:0 4px; }
.trash-spacer { flex:1; }
.trash-list { flex:1; min-height:0; overflow:auto; background:#fff; padding:0 10px; }
.trash-head, .trash-row { display:grid; grid-template-columns:minmax(170px,1.15fr) minmax(190px,1.35fr) 130px 65px; align-items:center; }
.trash-head { height:31px; color:#5d6470; border-bottom:1px solid #e6e8ec; position:sticky; top:0; background:#fff; z-index:1; }
.trash-head span, .trash-row > span { min-width:0; padding:0 8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
.trash-head span:not(:first-child), .trash-row > span:not(:first-child) { border-left:1px solid #f0f1f3; }
.trash-row { height:38px; border:1px solid transparent; border-radius:3px; cursor:default; }
.trash-row:hover { background:#f2f6fb; }
.trash-row.selected { background:#dcecff; border-color:#99c5f3; }
.trash-row.featured .trash-name { color:#15171a; font-weight:800; }
.trash-row.featured .trash-name i { filter:drop-shadow(0 1px 1px rgba(0,0,0,.25)); }
.trash-name { display:flex; align-items:center; gap:8px; }
.trash-name i { font-style:normal; font-size:19px; }
.trash-empty { height:100%; min-height:190px; display:flex; flex-direction:column; align-items:center; justify-content:center; color:#858c96; gap:8px; }
.trash-empty > span { font-size:48px; filter:grayscale(.3); opacity:.8; }
.trash-empty b { color:#555c66; font-size:14px; font-weight:500; }
.trash-empty small { font-size:12px; }
.trash-status { height:29px; display:flex; justify-content:space-between; align-items:center; padding:0 12px; color:#666d77; background:#f8f9fb; border-top:1px solid #e3e6eb; }
.archive-view { min-height:100%; position:relative; background:#fff; color:#31363f; font:12px "Microsoft YaHei",sans-serif; }
.archive-toolbar { height:44px; display:flex; align-items:center; gap:8px; padding:5px 10px; border-bottom:1px solid #e5e7eb; }
.archive-toolbar a { color:#225aa6; }
.archive-path { margin:9px 12px; height:30px; border:1px solid #d6dae1; padding:6px 10px; color:#5e6570; }
.archive-head, .archive-row { display:grid; grid-template-columns:1fr 120px 110px; align-items:center; margin:0 12px; }
.archive-head { height:28px; color:#66707c; border-bottom:1px solid #e5e7eb; }
.archive-row { height:42px; background:#f8fbff; border-bottom:1px solid #edf0f4; }
.archive-head span, .archive-row span { padding:0 8px; }
.archive-empty { height:145px; display:flex; align-items:center; justify-content:center; color:#9aa0a8; }
.archive-progress { height:7px; margin:18px 20px 8px; border-radius:4px; overflow:hidden; background:#e5e8ed; }
.archive-progress i { display:block; width:0; height:100%; background:#2b62d9; transition:width .1s linear; }
.archive-progress.complete i { background:#3c8b4e; }
.archive-result { min-height:26px; padding:0 20px; color:#5b6570; font-size:12px; word-break:break-all; }
.archive-message { position:absolute; left:0; right:0; bottom:0; height:29px; padding:6px 13px; color:#707782; background:#f8f9fb; border-top:1px solid #e3e6eb; }

/* ============ 黑屏 ============ */
#blackout { position:fixed; inset:0; background:#000; z-index:950; opacity:0;
  transition:opacity .35s; pointer-events:none;
  display:flex; align-items:center; justify-content:center; }
#blackout.on { opacity:1; pointer-events:all; }
#blackout .bo-text { color:#2a2a30; font-size:15px; letter-spacing:6px;
  font-family:"KaiTi","楷体",serif; opacity:0; transition:opacity 1.2s; }
#blackout .bo-text.show { opacity:1; }

/* ============================================================
   手机竖屏适配（body.mobile，由 os.js 按视口宽度 <720px 挂上）
   桌面隐喻在竖屏上保不住：窗口一律铺满，靠任务栏切换。
   ============================================================ */
body.mobile #icons {
  top:10px; left:0; right:0; padding:0 8px;
  flex-direction:row; flex-wrap:wrap; align-content:flex-start;
  height:auto; max-height:calc(100% - 120px); gap:4px 0;
}
body.mobile .icon { width:25%; padding:10px 2px; }        /* 一行四个，指头点得中 */
body.mobile .icon .glyph { height:44px; font-size:31px; }
body.mobile .icon .label { font-size:11px; }

/* 窗口铺满可视区，去掉圆角阴影，标题栏留出关闭键的点击面积 */
body.mobile #windows { inset:0 0 46px 0; }
body.mobile .win,
body.mobile .win.phone {
  left:0 !important; top:0 !important;
  width:100% !important; height:100% !important;
  min-width:0; min-height:0; border-radius:0; border:none;
  box-shadow:none;
}
body.mobile .win-title { height:44px; font-size:14px; padding-left:14px; }
body.mobile .win-title .t-close { width:52px; height:44px; line-height:44px; font-size:19px; }
body.mobile .win-title .t-max,
body.mobile .win-resize,
body.mobile #wallpaper-tag { display:none; }
body.mobile .win-body { -webkit-overflow-scrolling:touch; }

/* 任务栏：加高到能点，标签压缩 */
body.mobile #taskbar { height:46px; }
body.mobile #btn-start { height:46px; padding:0 14px; font-size:15px; }
body.mobile .task-btn { max-width:104px; height:38px; font-size:11.5px; padding:0 8px; }
body.mobile #tray { height:46px; padding:0 8px; gap:8px; font-size:11px; }
body.mobile #tray-storage { display:none; }
body.mobile #start-menu { width:min(280px,84vw); bottom:46px; }
body.mobile .sm-item { padding:13px 16px; }

/* 便签挪到右下，避免压住图标 */
body.mobile #stickies { right:8px; top:auto; bottom:56px; transform:scale(.86); transform-origin:100% 100%; }
/* 气泡贴着任务栏铺开 */
body.mobile #balloon { left:8px; right:8px; width:auto; bottom:54px; }

/* 输入框 ≥16px，否则 iOS 一聚焦就自动放大整页 */
body.mobile input, body.mobile textarea, body.mobile select { font-size:16px !important; }

/* 动物退到窗口后面：竖屏上窗口占满，走在前面会一直抢走点击 */
body.mobile .desk-pet { z-index:2; }

/* 开机画面 */
body.mobile #boot { padding:16px; }
body.mobile #boot-text { font-size:11px; }
body.mobile .logo-name { font-size:26px; letter-spacing:5px; }

/* 手机形态的APP窗口在竖屏下就是整块屏幕，不再画成一台手机 */
body.mobile .win.phone .win-title { border-radius:0; }

/* 回收站/压缩包：竖屏只留「名称 + 删除日期」两列，其余藏起来
   （删除日期必须留 —— 那个凌晨时间戳是线索本身） */
body.mobile .trash-head, body.mobile .trash-row { grid-template-columns:minmax(0,1fr) 96px; }
body.mobile .trash-head span:nth-child(2), body.mobile .trash-row > span:nth-child(2),
body.mobile .trash-head span:nth-child(4), body.mobile .trash-row > span:nth-child(4) { display:none; }
body.mobile .trash-nav .trash-search, body.mobile .trash-address { display:none; }
body.mobile .trash-command button { font-size:11.5px; padding:0 8px; }
body.mobile .archive-head, body.mobile .archive-row { grid-template-columns:minmax(0,1fr) 84px; }
body.mobile .archive-head span:nth-child(2), body.mobile .archive-row span:nth-child(2) { display:none; }

/* 兜底：任何页面里出现超宽的表格/预格式块，都改成自己横向滚动，绝不撑破整页 */
body.mobile .br-page table, body.mobile .app-body table { display:block; overflow-x:auto; max-width:100%; }
body.mobile .br-page pre { overflow-x:auto; max-width:100%; }
body.mobile img { max-width:100%; height:auto; }

/* 触摸目标：手指按不准 26px 的按钮。笔记本填名字是全游戏最关键的交互，必须放大 */
body.mobile .nb-input { width:132px !important; font-size:17px !important; padding:6px !important; }
body.mobile .nb-confirm { font-size:14px !important; padding:9px 18px !important; }
body.mobile .f-btn, body.mobile .app-search button, body.mobile button { min-height:38px; }
body.mobile .lnk, body.mobile .br-page a { padding:2px 0; }
/* 记号笔气泡在触屏上要更大更好按 */
body.mobile #mark-bubble { font-size:14px; padding:9px 14px; }

/* 浏览器工具栏：竖屏下 flex 会把按钮压成 18px，手指点不中。锁死宽度并放大
   「转到」在手机上隐藏——地址栏回车即可导航，省下的宽度还给地址栏 */
body.mobile .br-toolbar { gap:5px; padding:6px; }
body.mobile .br-toolbar button { flex:none; width:36px; min-width:36px; height:36px; font-size:15px; }
body.mobile .br-go { display:none; }
body.mobile .br-addr { min-width:0; height:36px; font-size:16px; }
body.mobile .br-bookmarks { overflow-x:auto; }
