/* ============================================================
 * style.css — 亮色教务门户（表面） + 深色教职工后台（登录后）
 * z-index 层级（不得越级使用）：
 *   10   顶栏 header / footer
 *   200  井页 #jingPage（jingSpot 201 / jingBox 202）
 *   300  笔记本模式 #laptopScreen（内部窗口 100/200）
 *   400  系统通知 #sysToast
 *   9000 刮除动效 canvas
 *   9600 闪现面孔
 *   9999 后台扫描线 body.admin::after
 *   99999 终局覆盖层
 * ============================================================ */
*{box-sizing:border-box; margin:0; padding:0;}
html,body{height:100%;}
body{
  background:#eef1f5; color:#222;
  font-family:"Microsoft YaHei","PingFang SC","SimHei",sans-serif;
  font-size:15px; line-height:1.8;
}
a{color:#1e6fb8; text-decoration:none;}
a:hover{text-decoration:underline;}
button{cursor:pointer; font-family:inherit;}
input{font-family:inherit;}

/* ===== 亮色门户 ===== */
.wrap{max-width:960px; margin:0 auto; padding:10px 20px 80px;}
header{background:#fff; border-bottom:3px solid #1e6fb8; position:sticky; top:0; z-index:50; box-shadow:0 1px 4px rgba(0,0,0,.06);}
header .bar{max-width:960px; margin:0 auto; padding:14px 20px; display:flex; justify-content:space-between; align-items:center;}
header .brand{color:#1e6fb8; letter-spacing:3px; font-size:18px; font-weight:bold;}
header nav a{color:#444; margin-left:18px; font-size:14px;}
header nav a:hover{color:#1e6fb8;}
.safety{background:#fff8e6; color:#9a7b2e; font-size:12px; padding:7px 14px; text-align:center; border-bottom:1px solid #f0e0b0; min-height:2em;}

.hero{position:relative;margin-top:16px;border-radius:6px;overflow:hidden;}
.card{background:#fff; border:1px solid #e3e8ee; border-radius:6px; padding:22px 26px; margin:16px 0; box-shadow:0 1px 3px rgba(0,0,0,.04);}
.card h1{font-size:22px; font-weight:normal; letter-spacing:1px; margin-bottom:12px; color:#1e3a5c;}
.card h2{font-size:16px; font-weight:normal; color:#1e6fb8; margin:18px 0 8px;}
.dim{color:#7a8694; font-size:13px;}
.red{color:#c0392b;}
.grid{display:grid; grid-template-columns:repeat(3,1fr); gap:14px; margin-top:18px;}
.grid a{background:#f6f9fc; border:1px solid #e3e8ee; padding:18px; color:#222; display:block;border-radius:6px;}
.grid a:hover{border-color:#1e6fb8; text-decoration:none; background:#eef4fb;}
.grid b{color:#1e6fb8; font-weight:normal; display:block; margin-bottom:4px; font-size:15px;}
.grid span{color:#98a4b0; font-size:12px;}

input[type=text],input[type=password]{
  background:#fff; border:1px solid #c8d2dc; color:#222; padding:8px 10px; font-size:14px; border-radius:4px;
}
input:focus{outline:none; border-color:#1e6fb8;}
.btn{background:#1e6fb8; color:#fff; border:none; padding:8px 18px; border-radius:4px;}
.btn:hover{background:#185a96;}

.transcript{background:#fff8e0; color:#222; padding:24px; font-family:SimSun,serif; margin-top:16px; border:1px solid #e0d6a8;}
.transcript table{width:100%; border-collapse:collapse;}
.transcript td,.transcript th{border:1px solid #ccc; padding:6px 10px; font-size:14px;}
.transcript .verdict{margin-top:16px; color:#c0392b; font-weight:bold;}

.about-head{display:flex;gap:18px;align-items:center;margin-bottom:18px;}
.seal{width:72px;height:72px;border-radius:50%;border:3px solid #c0392b;display:flex;align-items:center;justify-content:center;color:#c0392b;font-size:12px;letter-spacing:1px;text-align:center;line-height:1.2;flex-shrink:0;}
.news-row{padding:10px 0;border-bottom:1px solid #eef1f5;display:flex;justify-content:space-between;gap:10px;cursor:pointer;}
.news-row:hover{background:#f4f8fc;}
.news-row .cat{color:#1e6fb8;white-space:nowrap;font-size:13px;}
.news-row .date{color:#98a4b0;font-size:12px;white-space:nowrap;}
.sched{width:100%;border-collapse:collapse;font-size:14px;}
.sched td{padding:7px 10px;border-bottom:1px solid #eef1f5;}
.sched td:first-child{color:#1e6fb8;font-family:monospace;white-space:nowrap;width:110px;}
.sched .odd{color:#c0392b;}

/* ===== 深色后台（教职工登录后） ===== */
body.admin{background:#0b0f13; color:#c9d4d8;}
body.admin::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:99998;
  background:repeating-linear-gradient(0deg,rgba(0,0,0,.18) 0 1px,transparent 1px 3px);}
body.admin header{background:#0e141a; border-bottom:1px solid #1e2a33; box-shadow:none;}
body.admin header .brand{color:#6fd3e3;}
body.admin header nav a{color:#5e7078;}
body.admin header nav a:hover{color:#c9d4d8;}
body.admin .safety{background:#0a1518; border-color:#1c3a40; color:#7fa8ad;}
body.admin .card{background:#12181f; border-color:#1e2a33; color:#c9d4d8; box-shadow:none;}
body.admin .card h1{color:#c9d4d8;}
body.admin .card h2{color:#6fd3e3;}
body.admin .dim{color:#5e7078;}
body.admin .red{color:#b33a3a;}
body.admin .grid a{background:#162029; border-color:#1e2a33; color:#c9d4d8;}
body.admin .grid a:hover{border-color:#6fd3e3; background:#1a2630;}
body.admin .grid b{color:#6fd3e3;}
body.admin .grid span{color:#5e7078;}
body.admin input{background:#0a0e12; color:#c9d4d8; border-color:#1e2a33;}
body.admin .btn{background:#16222a; color:#6fd3e3; border:1px solid #1e2a33;}
body.admin .btn:hover{background:#1d2f3a;}
body.admin .news-row:hover{background:#0e161c;}

/* CCTV */
.cctv{background:#000; aspect-ratio:4/3; position:relative; overflow:hidden; border:1px solid #1c3a2a;}
.cctv .ts{position:absolute; top:8px; right:10px; color:#7fd0a0; font-family:monospace; font-size:12px;}
.cctv .rec{position:absolute; top:8px; left:10px; color:#c0392b; font-size:12px;}
.cctv .rec::before{content:"● "; animation:blink 1s steps(1) infinite;}
@keyframes blink{50%{opacity:0;}}
.cctv .scan{position:absolute; left:0; right:0; height:30px; background:rgba(120,255,170,.06); animation:scan 4s linear infinite;}
@keyframes scan{0%{top:-10%;}100%{top:110%;}}

/* 仪容镜 */
.mirror{height:340px; background:linear-gradient(#0a1015,#05080a); border:1px solid #1e2a33; position:relative; overflow:hidden; margin-top:14px;}
.mirror .hall{position:absolute; inset:0; background:repeating-linear-gradient(90deg,transparent 0 60px,rgba(111,211,227,.05) 60px 61px);}
.mirror .real{position:absolute; bottom:0; left:50%; width:30px; height:110px; background:#1a2530;}
.mirror .ghost{position:absolute; bottom:0; left:62%; width:30px; height:110px; background:#243440; opacity:0; transition:opacity 1.2s;}
.mirror.scrolled .ghost{opacity:.85;}

/* 日志终端风 */
.logbox{background:#060a08; color:#9fd0b0; font-family:monospace; font-size:13px; padding:14px; margin-top:12px;}

/* ===== /jing ===== */
#jingPage{position:fixed; inset:0; background:#000; z-index:200; display:none; align-items:center; justify-content:center; flex-direction:column;}
#jingSpot{position:fixed; inset:0; pointer-events:none; z-index:201;
  background:radial-gradient(circle calc(130px * var(--s,1)) at var(--mx,50%) var(--my,50%),rgba(120,110,90,.2),transparent 70%);}
#jingBox{position:relative; z-index:202; text-align:center; color:#888;}
#jingBox input{background:transparent; border:none; border-bottom:1px solid #444; color:#ccc; text-align:center; font-size:18px; padding:6px; width:200px;}

/* ===== 笔记本模式 ===== */
#laptopScreen{position:fixed; inset:0; background:#000; z-index:300; display:none; overflow:hidden;}
#bootScreen{position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; cursor:pointer;}
#bootScreen .bl{color:#999; margin:4px 0; opacity:0; transition:opacity .3s;}
#bootScreen .bl.on{opacity:1;}
#bootScreen .cursor{display:inline-block;width:8px;height:14px;background:#999;vertical-align:middle;animation:blink 1s steps(1) infinite;}
#desktop{position:absolute; inset:0; display:none; background:linear-gradient(rgba(0,0,0,.55),rgba(0,0,0,.75)),#23282a;}
.desk-icons{position:absolute; top:20px; left:20px; display:flex; flex-direction:column; gap:16px;}
.dicon{width:84px; text-align:center; cursor:pointer; user-select:none;}
.dicon .pic{width:48px;height:48px;margin:0 auto 6px;background:#cfd2c8;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:22px;color:#333;box-shadow:0 2px 6px rgba(0,0,0,.5);}
.dicon .lbl{font-size:12px;color:#eee;text-shadow:0 1px 2px #000;}
.win{position:absolute; min-width:340px; min-height:180px; background:#dcd8cc; color:#1a1a1a; box-shadow:0 10px 40px rgba(0,0,0,.7); border:1px solid #111; display:none; flex-direction:column; z-index:100;}
.win.active{z-index:200;}
.win .tb{background:#3a3d38; color:#ddd; padding:6px 10px; font-size:13px; cursor:pointer; display:flex; justify-content:space-between;}
.win .tb .x{cursor:pointer;padding:0 6px;}
.win .tb .x:hover{background:#8b1a1a;}
.win .bd{padding:16px 18px; overflow:auto; font-size:14px; line-height:1.85;}
.win .bd .doc{white-space:pre-wrap; font-family:SimSun,serif;}
.win .prompt{margin-top:12px; padding-top:10px; border-top:1px dashed #999;}
.win .prompt input{padding:6px; font-family:monospace;}
.win .fb{margin-top:8px; font-size:13px; min-height:18px;}
.win .fb.ok{color:#1a5a1a;}
.win .fb.bad{color:#8b1a1a;}
.transcript-ink{background:#e9e4d2; padding:14px; font-family:SimSun,serif; color:#222;}

/* ===== 贴吧（独立站点） ===== */
.tieba{background:#f4f5f7;color:#333;}
.tieba .tb-bar{background:#4e6ef2;color:#fff;padding:10px 16px;font-size:14px;}
.tieba .tb-body{background:#fff;padding:20px;}
.tieba .tb-post{border:1px solid #e0e0e0;padding:14px;margin-bottom:14px;}
.tieba .tb-post h3{font-size:16px;color:#222;margin-bottom:8px;}
.tieba .tb-reply{border-top:1px solid #f0f0f0;padding:10px 0;font-size:14px;}
.tieba .tb-reply .floor{color:#999;font-size:12px;margin-bottom:4px;}
.tieba .tb-reply .who{color:#4e6ef2;}
.tieba .tb-del{color:#999;text-decoration:line-through;}

/* ===== 红头公文 ===== */
.reddoc{background:#f5f1e6;color:#1a1a1a;padding:30px 34px;font-family:SimSun,serif;}
.reddoc .rhead{color:#c00;font-size:22px;letter-spacing:3px;font-weight:bold;text-align:center;margin-bottom:6px;}
.reddoc .rline{border-bottom:2px solid #c00;margin-bottom:18px;}
.reddoc .rtitle{text-align:center;font-size:18px;margin:14px 0;}
.reddoc p{text-indent:2em;margin:8px 0;}
.reddoc .rseal{width:90px;height:90px;border-radius:50%;border:3px solid rgba(200,0,0,.5);color:rgba(200,0,0,.5);
  display:flex;align-items:center;justify-content:center;font-size:12px;text-align:center;margin:18px 0 0 auto;transform:rotate(-12deg);}

/* 系统浮动通知 */
#sysToast{position:fixed;right:16px;bottom:16px;max-width:320px;background:rgba(20,30,38,.95);border:1px solid #6fd3e3;
  color:#cfe8ec;font-size:13px;padding:12px 14px;z-index:400;display:none;line-height:1.6;}
#sysToast .x{position:absolute;top:4px;right:8px;cursor:pointer;color:#5e7078;}

footer{color:#98a4b0; font-size:12px; text-align:center; padding:24px 0;}
/* 顶栏"更多"下拉 */
.more{position:relative;margin-left:18px;font-size:14px;color:#444;cursor:pointer;display:inline-block;}
.more:hover{color:#1e6fb8;}
.more-menu{display:none;position:absolute;top:100%;left:0;background:#fff;min-width:140px;box-shadow:0 4px 14px rgba(0,0,0,.12);padding:6px 0;z-index:60;}
.more:hover .more-menu{display:block;}
.more-menu a{display:block;padding:8px 16px;margin:0;font-size:13px;}
body.admin .more-menu{background:#0e141a;}
body.admin .more-menu a{color:#5e7078;}
/* ===== 第二轮优化补丁 ===== */
.convscratch{stroke-dasharray:220;stroke-dashoffset:220;animation:drawScratch 1.6s ease-out forwards;}
@keyframes drawScratch{to{stroke-dashoffset:0;}}
@keyframes spin{to{transform:rotate(360deg);}}
@media (max-width:640px){
  body.admin .wrap > div{display:block !important;}
  body.admin .wrap > div > aside{width:100% !important;display:flex;overflow-x:auto;}
  body.admin .wrap > div > aside > div{white-space:nowrap;}
}

/* ============================================================
 * 第五轮美术增强（纯 CSS/SVG，不改 JS）
 * 一、门户视觉层次
 * ============================================================ */
/* card 三级层次 */
.card{ background:#fff; border:1px solid #e3e8ee; border-radius:6px; padding:18px 20px;
  box-shadow:0 1px 3px rgba(20,40,60,.06); margin:14px 0; }
.card.feature{ border-left:3px solid #8a2a2a; background:#fffdfb; }
.card.archive{ background:#f4ecd8; border-color:#d8c89a; color:#3a3222;
  box-shadow:inset 0 0 30px rgba(120,90,40,.08); font-family:SimSun,serif; }
.card.archive h1,.card.archive h2{ color:#5a4a22; }

/* hero 图渐入：60% 灰度 → 0 */
@keyframes heroFade{ from{ filter:grayscale(.6); opacity:.6;} to{ filter:grayscale(0); opacity:1;} }
.hero-img{ animation:heroFade 1.2s ease-out both; }

/* 顶部滚动进度线 */
#progressBar{ position:fixed; top:0; left:0; height:2px; width:0;
  background:linear-gradient(90deg,#1e6fb8,#6fd3e3); z-index:80; transition:width .1s; }

/* 页脚斜纹档案袋 */
footer{ background:repeating-linear-gradient(45deg,#f7f4ec 0 6px,#f2ede0 6px 12px) !important; }
footer .dim{ color:#8a8578; }
.fictional{ position:relative; }
.fictional::after{ content:""; position:absolute; left:-2px; right:-2px; top:55%; height:1px;
  background:#8a2a2a; transform:rotate(-3deg); }

/* ============================================================
 * 二、笔记本年代感（Win10 2019）
 * ============================================================ */
#desktop{
  background:
    radial-gradient(ellipse at 30% 20%, rgba(60,120,180,.35), transparent 55%),
    radial-gradient(ellipse at 75% 80%, rgba(20,60,110,.5), transparent 60%),
    linear-gradient(135deg,#0a2a55 0%,#071a3a 50%,#04102a 100%);
}
#desktop .dicon .pic{ box-shadow:0 2px 6px rgba(0,0,0,.5); border-radius:6px; }
#desktop .dicon .lbl{ text-shadow:0 1px 2px #000; }

.win{ background:#d8d8d0 !important; border:1px solid #000;
  box-shadow:0 0 0 1px rgba(255,255,255,.25) inset, 4px 6px 18px rgba(0,0,0,.6), 2px 2px 8px rgba(0,20,60,.5); }
.win .tb{ background:linear-gradient(#3a3d38,#2c2f2a) !important; color:#e8e8e0 !important; }
.win .bd{ background:#ece9dd !important; }

/* CRT 开机：白线展开 */
@keyframes crtOn{ 0%{ background:#000; } 40%{ background:#0f0; } 100%{ background:#000; } }
#bootScreen.boot-crt{ animation:crtOn .6s ease-out; }

/* ============================================================
 * 三、刮除母题静态渗透
 * ============================================================ */
/* archive 老照片上方 SVG 白痕 */
.scratch-band{ position:relative; }
.scratch-band::before{ content:""; position:absolute; left:-5%; top:40%; width:110%; height:14px;
  background:linear-gradient(90deg,transparent,#e8e4d8 30%,#fff 50%,#e8e4d8 70%,transparent);
  transform:rotate(-4deg); opacity:.85; filter:blur(.4px); pointer-events:none; }

/* news 末条上方横向擦痕 */
.news-scratch{ height:10px; margin:10px 0;
  background:linear-gradient(90deg,transparent,rgba(232,228,216,.7),transparent);
  filter:blur(1px); }

/* roster 第四行被抠掉 */
.row-scratched{ -webkit-mask:linear-gradient(90deg,#000 70%,transparent 78%);
  color:transparent !important; position:relative; }
.row-scratched::after{ content:""; position:absolute; left:60%; top:0; bottom:0; width:25%;
  background:repeating-linear-gradient(90deg,#e8e4d8 0 2px,#d8d4c8 2px 4px);
  transform:rotate(-1deg); }

/* ============================================================
 * 四、主题切换过渡
 * ============================================================ */
body{ transition:background .3s ease,color .3s ease; }
#portalRoot{ transition:opacity .3s ease; }
body.admin #portalRoot{ opacity:1; }
/* ============================================================
 * 笔记本年代感动效（CRT / Win10 2019）
 * ============================================================ */
/* 屏幕整体轻微闪烁（像旧 LCD 背光） */
@keyframes lcdFlicker {
  0%,100% { opacity:1; }
  97% { opacity:1; }
  98% { opacity:.86; }
  99% { opacity:.95; }
}
#laptopScreen{ animation:lcdFlicker 6s infinite; }

/* CRT 扫描线覆盖层 */
#laptopScreen::after{
  content:""; position:absolute; inset:0; pointer-events:none; z-index:301;
  background:repeating-linear-gradient(0deg, rgba(0,0,0,.12) 0 1px, transparent 1px 3px);
  mix-blend-mode:multiply;
}
/* 暗角 */
#laptopScreen::before{
  content:""; position:absolute; inset:0; pointer-events:none; z-index:301;
  background:radial-gradient(ellipse at center, transparent 55%, rgba(0,0,0,.55) 100%);
}

/* bootScreen 绿字 CRT */
#bootScreen{ background:#000 !important; color:#33ff66 !important;
  font-family:Consolas,"Courier New",monospace; text-shadow:0 0 6px rgba(51,255,102,.6); }
#bootScreen .blink{ animation:blink 1s steps(1) infinite; }
@keyframes blink{ 50%{ opacity:0; } }

/* 窗口打开：轻微缩放 + 旧系统"啪"地一声的视觉感 */
@keyframes winOpen{ from{ transform:scale(.96); opacity:.4;} to{ transform:scale(1); opacity:1;} }
.win{ animation:winOpen .12s ease-out; }

/* 桌面图标选中反色（Win10 风格） */
.dicon .pic:hover{ filter:brightness(1.2); }
.dicon:hover .lbl{ background:rgba(30,111,184,.6); }

/* 任务栏（底部）质感：深灰渐变 */
#desktop::after{
  content:""; position:absolute; left:0; right:0; bottom:0; height:28px;
  background:linear-gradient(#2a2d33,#1c1e22); border-top:1px solid #000;
}
/* 桌面底部留任务栏高度，避免图标被遮 */
#desktop{ padding-bottom:28px; box-sizing:border-box; }
/* "该生不存在" 幽灵字：淡入后轻微闪烁，像在系统里犹豫 */
@keyframes ghostIn { from{opacity:0; filter:blur(3px);} to{opacity:1; filter:blur(0);} }
@keyframes ghostBlink { 0%,100%{opacity:1;} 48%{opacity:1;} 50%{opacity:.2;} 52%{opacity:1;} 70%{opacity:.6;} 72%{opacity:1;} }
.ghostline{ display:inline-block; animation:ghostIn .6s ease-out, ghostBlink 4s 1s infinite; }
/* ============================================================
 * /exam 成绩单打印式揭示
 * ============================================================ */
.transcript{ transform:translateY(-40px) scaleY(.02); opacity:0; transform-origin:top center;
  transition:transform .8s cubic-bezier(.2,.9,.25,1.1), opacity .5s; }
.transcript.revealing{ transform:translateY(0) scaleY(1); opacity:1; }
.transcript .row{ opacity:0; transform:translateX(-8px); transition:opacity .25s, transform .25s; }
.transcript .row.on{ opacity:1; transform:translateX(0); }
.transcript .row.shake{ animation:rowShake .12s; }
@keyframes rowShake{ 0%,100%{transform:translateX(0);} 25%{transform:translateX(-2px);} 75%{transform:translateX(2px);} }
.transcript.crash{ animation:crash 400ms; }
@keyframes crash{ 0%,100%{transform:scale(1);} 50%{transform:scale(.998);} }
.caret{ display:inline-block;width:8px;background:#333;animation:blink 1s steps(1) infinite; }
@media (max-width:600px){ .transcript{ transform:none; opacity:1; transition:none; } }
/* sysToast 从右滑入 */
#sysToast{ animation:toastIn .3s ease-out; }
@keyframes toastIn{ from{ transform:translateX(110%);} to{ transform:translateX(0);} }
#sysToast.out{ animation:toastOut .4s ease-in forwards; }
@keyframes toastOut{ to{ transform:translateX(110%); opacity:0;} }.mcursor::after{ content:"▌"; margin-left:2px; animation:blink 1s steps(1) infinite; }
.transcript .row{ opacity:0; transform:translateX(-8px); transition:opacity .25s, transform .25s; }
.transcript .row.on{ opacity:1; transform:translateX(0); }
/* 仪容镜：更像一面真镜子 + 走廊纵深 */
.mirror{ background:linear-gradient(#0d1620,#05080a); }
.mirror::before{ content:""; position:absolute; left:8%; right:8%; top:12%; bottom:18%;
  border:6px solid #2a3a44; border-radius:4px;
  box-shadow:inset 0 0 40px rgba(111,211,227,.06); }
.mirror .hall{ background:
  repeating-linear-gradient(90deg,transparent 0 90px,rgba(111,211,227,.06) 90px 91px),
  linear-gradient(transparent 60%, rgba(111,211,227,.05) 60%); }
.mirror .real{ left:42%; background:linear-gradient(#243440,#101820); box-shadow:0 0 10px rgba(111,211,227,.1); }
.mirror .ghost{ left:56%; }
.mirror.scrolled .ghost{ background:linear-gradient(#3a4a54,#1a2228); }