/* ===== 主题变量 ===== */
:root{
  --radius-lg:26px; --radius-md:18px; --radius-sm:14px;
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI Variable","Segoe UI",Inter,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --tap:44px;
  --ease:cubic-bezier(.22,.61,.36,1);
}

/* 暗色（默认） */
html[data-theme="dark"]{
  --fg:#eaf1ff;
  --fg-strong:#ffffff;
  --muted:#9dafd0;
  --line:rgba(255,255,255,.16);
  --line-soft:rgba(255,255,255,.09);
  --glass-a:rgba(255,255,255,.16);
  --glass-b:rgba(255,255,255,.055);
  --glass-hi:rgba(255,255,255,.22);
  --field:rgba(6,10,24,.5);
  --well:rgba(0,0,0,.2);
  --accent:#7cd0ff;
  --accent-2:#f0a2ff;
  --accent-ink:#06101f;
  --shadow:0 18px 50px rgba(0,0,0,.34);
  --page-bg:radial-gradient(1200px 700px at 18% 4%,#2f4d8e 0%,#111938 34%,#070a16 100%);
  --orb-1:#3ec4ff; --orb-2:#b455ff; --orb-op:.5;
  --ok:#5fe0a8; --warn:#ffc46b;
}

/* 亮色 */
html[data-theme="light"]{
  --fg:#1d2740;
  --fg-strong:#0e1526;
  --muted:#5f6d8c;
  --line:rgba(28,44,80,.14);
  --line-soft:rgba(28,44,80,.08);
  --glass-a:rgba(255,255,255,.78);
  --glass-b:rgba(255,255,255,.52);
  --glass-hi:rgba(255,255,255,.95);
  --field:rgba(255,255,255,.72);
  --well:rgba(255,255,255,.5);
  --accent:#2f7fe0;
  --accent-2:#b45ce0;
  --accent-ink:#ffffff;
  --shadow:0 14px 38px rgba(38,60,110,.14);
  --page-bg:radial-gradient(1200px 700px at 16% 2%,#dbe8ff 0%,#eef2fd 38%,#f7f5fb 100%);
  --orb-1:#8fc4ff; --orb-2:#d9a8ff; --orb-op:.42;
  --ok:#0f9d64; --warn:#b8730a;
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}

body{
  margin:0; min-height:100vh; min-height:100dvh;
  color:var(--fg); font-family:var(--font); font-size:16px; line-height:1.6;
  background:var(--page-bg); background-attachment:fixed;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
  padding-bottom:env(safe-area-inset-bottom);
  transition:background .5s var(--ease), color .3s var(--ease);
}

/* 背景光斑 */
.orb{position:fixed;border-radius:999px;filter:blur(60px);opacity:var(--orb-op);z-index:-1;pointer-events:none;transition:opacity .5s var(--ease),background .5s var(--ease)}
.o1{width:min(46vw,380px);aspect-ratio:1;background:var(--orb-1);left:-8vw;top:6vh}
.o2{width:min(56vw,460px);aspect-ratio:1;background:var(--orb-2);right:-12vw;bottom:-4vh}

main{width:min(1140px,94vw);margin:auto;padding:22px 0 56px}

/* ===== 顶栏 ===== */
.top{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:20px;flex-wrap:wrap}
.top h1{margin:0;font-size:clamp(19px,4.4vw,25px);font-weight:800;letter-spacing:.3px;color:var(--fg-strong);white-space:nowrap}
nav{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
a{color:var(--fg);text-decoration:none}

nav a,.ghost,#themeBtn{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:38px;padding:8px 14px;font-size:14px;
  border:1px solid var(--line);border-radius:var(--radius-sm);
  background:var(--glass-b);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  transition:background .2s var(--ease),transform .12s var(--ease),border-color .2s var(--ease);
  white-space:nowrap;
}
nav a:hover,.ghost:hover,#themeBtn:hover{background:var(--glass-a);border-color:var(--accent)}
nav a:active,#themeBtn:active{transform:scale(.96)}
nav a[aria-current="page"]{background:var(--glass-a);border-color:var(--accent);color:var(--fg-strong);font-weight:700}

#themeBtn{cursor:pointer;color:var(--fg);font-family:inherit;gap:6px}

/* ===== 玻璃卡片 ===== */
.card,.mini{
  border:1px solid var(--line);
  background:linear-gradient(150deg,var(--glass-a),var(--glass-b));
  backdrop-filter:blur(24px) saturate(150%);-webkit-backdrop-filter:blur(24px) saturate(150%);
  box-shadow:var(--shadow),inset 0 1px 0 var(--glass-hi);
  border-radius:var(--radius-lg);
  transition:background .4s var(--ease),border-color .3s var(--ease),box-shadow .3s var(--ease),transform .18s var(--ease);
}
.card{padding:22px;margin:16px 0}
.card h2{margin:0 0 14px;font-size:18px;font-weight:750;color:var(--fg-strong);display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.card h2 small{font-weight:400;font-size:13px}

.hero{display:flex;justify-content:space-between;align-items:center;gap:18px}
.hero h2{margin:0 0 6px}
.hero p{margin:0 0 4px;font-size:15px}
.hero form{margin:0}
.hero button{white-space:nowrap}

/* ===== 进度卡片 ===== */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:14px}
.mini{padding:17px;display:flex;flex-direction:column;gap:5px}
.mini b{font-size:15px;font-weight:750;color:var(--fg-strong);line-height:1.35}
.mini span{font-size:12.5px}
.mini p{font-size:16px;margin:8px 0 0;font-weight:600;line-height:1.45;flex:1}
.mini small{font-size:12.5px}
.mini:hover{transform:translateY(-2px)}
.mini span,.muted,small{color:var(--muted)}

/* ===== 表单 ===== */
form{display:grid;gap:12px}
label{display:grid;gap:6px;font-size:13.5px;color:var(--muted)}
input,textarea,select{
  width:100%;min-height:var(--tap);padding:11px 14px;font-size:16px;font-family:inherit;
  border-radius:var(--radius-md);border:1px solid var(--line);
  background:var(--field);color:var(--fg);outline:none;
  transition:border-color .2s var(--ease),box-shadow .2s var(--ease),background .3s var(--ease);
  -webkit-appearance:none;appearance:none;
}
select{background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - 19px) 50%,calc(100% - 14px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:38px}
input:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent)}
textarea{min-height:110px;line-height:1.6;resize:vertical}
input[type=checkbox]{width:20px;height:20px;min-height:0;accent-color:var(--accent)}
label:has(input[type=checkbox]){display:flex;align-items:center;gap:10px;font-size:14.5px;color:var(--fg);min-height:var(--tap)}

button{
  border:0;border-radius:var(--radius-md);min-height:var(--tap);padding:12px 20px;
  font-size:15px;font-family:inherit;font-weight:750;letter-spacing:.2px;
  color:var(--accent-ink);background:linear-gradient(135deg,var(--accent),var(--accent-2));
  cursor:pointer;box-shadow:0 6px 18px color-mix(in srgb,var(--accent) 28%,transparent);
  transition:transform .12s var(--ease),box-shadow .2s var(--ease),filter .2s var(--ease);
}
button:hover{filter:brightness(1.07);box-shadow:0 9px 24px color-mix(in srgb,var(--accent) 36%,transparent)}
button:active{transform:scale(.97)}
button.mini-btn{min-height:36px;padding:7px 13px;font-size:13px;border-radius:var(--radius-sm);box-shadow:none}

.rowform{grid-template-columns:1fr 1fr 2fr 1.5fr 130px 90px;align-items:end}
.settings{max-width:640px}
.login{max-width:420px;margin:14vh auto}
.login h2{justify-content:center}

/* ===== 通用表格 ===== */
.tablewrap{overflow-x:auto;border-radius:var(--radius-md);background:var(--well);-webkit-overflow-scrolling:touch}
table{width:100%;border-collapse:collapse}
th,td{padding:12px 13px;border-bottom:1px solid var(--line-soft);text-align:left;vertical-align:top;font-size:14.5px}
th{color:var(--fg-strong);font-weight:700;font-size:13px}
tbody tr:last-child td,tbody tr:last-child th{border-bottom:0}

/* ===== 计划表 ===== */
.plantable{font-size:15px}
.plantable thead th{font-size:12px;letter-spacing:.6px;text-transform:uppercase;background:var(--glass-b);padding:11px 14px;white-space:nowrap;position:sticky;top:0;backdrop-filter:blur(8px)}
.plantable td,.plantable th{padding:13px 14px;border-bottom:1px solid var(--line-soft)}
.plantable th.subj{width:172px;color:var(--accent);font-weight:750;font-size:14.5px;line-height:1.4;vertical-align:top;background:linear-gradient(180deg,var(--glass-b),transparent 70%);border-right:1px solid var(--line-soft)}
.plantable thead th.chk,.plantable td.chk{width:56px;text-align:center;padding-left:0;padding-right:0}

/* 科目分组之间加一条略重的分隔线 */
.plantable tr.grp-start > th.subj,
.plantable tr.grp-start > td{border-top:1px solid var(--line)}

/* 任务行 */
.plantable tr.taskrow:hover > td{background:var(--glass-b)}
.plantable td.task{line-height:1.6}
.plantable td.task label{display:block;cursor:pointer;color:var(--fg);transition:opacity .2s var(--ease),text-decoration-color .2s var(--ease)}

/* 自定义勾选框：隐藏原生 input，用 label.tick 绘制 */
.plantable input.taskbox{position:absolute;opacity:0;width:0;height:0;pointer-events:none}
.plantable label.tick{
  display:inline-block;width:21px;height:21px;border-radius:7px;
  border:1.5px solid var(--line);background:var(--glass-b);
  cursor:pointer;position:relative;vertical-align:middle;
  transition:background .18s var(--ease),border-color .18s var(--ease),transform .12s var(--ease),box-shadow .18s var(--ease)
}
.plantable label.tick:hover{border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 12%,transparent)}
.plantable label.tick:active{transform:scale(.9)}
.plantable label.tick::after{
  content:'';position:absolute;left:6px;top:2.5px;width:6px;height:11px;
  border:solid #fff;border-width:0 2px 2px 0;border-radius:1px;
  transform:rotate(45deg) scale(.4);opacity:0;
  transition:opacity .16s var(--ease),transform .16s var(--ease)
}
.plantable input.taskbox:checked + label.tick{
  background:var(--accent);border-color:var(--accent)
}
.plantable input.taskbox:checked + label.tick::after{opacity:1;transform:rotate(45deg) scale(1)}
.plantable input.taskbox:focus-visible + label.tick{box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 26%,transparent)}

/* 勾选后任务文字淡化划掉 */
.plantable tr:has(input.taskbox:checked) td.task label,
.plantable tr.done td.task label{opacity:.4;text-decoration:line-through}

.plan{white-space:pre-wrap;line-height:1.75;font-family:inherit;font-size:15px;background:var(--well);border-radius:var(--radius-md);padding:17px;margin:0;overflow-x:auto}

.files li{margin:9px 0}
.files{padding-left:20px}

/* ===== 平板 ===== */
@media(max-width:900px){
  .rowform{grid-template-columns:1fr 1fr;}
  .rowform button{grid-column:1/-1}
}

/* ===== 手机 ===== */
@media(max-width:720px){
  main{width:92vw;padding:16px 0 42px}
  .card{padding:17px;margin:13px 0;border-radius:22px}
  .mini{padding:15px;border-radius:20px}
  .grid{grid-template-columns:1fr 1fr;gap:11px}
  .mini b{font-size:14px}
  .mini p{font-size:15px}

  /* 顶栏：标题一行，导航横向滑动 */
  .top{display:block;margin-bottom:16px}
  .top h1{font-size:20px;margin-bottom:12px}
  nav{
    display:flex;gap:8px;flex-wrap:nowrap;
    overflow-x:auto;-webkit-overflow-scrolling:touch;
    scrollbar-width:none;margin:0 -4vw;padding:2px 4vw 6px;
  }
  nav::-webkit-scrollbar{display:none}
  nav a,#themeBtn{flex:0 0 auto;min-height:var(--tap);padding:9px 14px}

  .hero{display:block}
  .hero form{margin-top:14px}
  .hero button{width:100%}

  .rowform{grid-template-columns:1fr}
  .login{margin:7vh auto}

  /* 计划表：保持表格结构（rowspan 分组不适合堆叠），仅压缩间距 */
  .tablewrap{background:var(--well);overflow-x:visible}
  .plantable{font-size:14.5px}
  .plantable thead{display:none}
  .plantable td,.plantable th{padding:11px 9px}
  .plantable th.subj{width:88px;font-size:13px;line-height:1.35;word-break:break-word;padding-left:10px}
  .plantable thead th.chk,.plantable td.chk{width:44px}
  .plantable label.tick{width:23px;height:23px}
  .plantable label.tick::after{left:7px;top:3px}
  .plantable td.task{line-height:1.55;padding-right:11px}

  /* 通用表格（进度/复盘/设备）转堆叠 */
  table.stack,table.stack tbody,table.stack tr,table.stack td{display:block;width:auto}
  table.stack thead{display:none}
  table.stack tbody tr{border:1px solid var(--line-soft);border-radius:var(--radius-md);padding:12px 13px;margin-bottom:10px;background:var(--glass-b)}
  table.stack td{padding:5px 0;border-bottom:0}
  table.stack td[data-l]::before{content:attr(data-l) "　";color:var(--muted);font-size:12.5px}
}

@media(max-width:420px){
  .grid{grid-template-columns:1fr}
  main{width:94vw}
}

/* 无障碍：尊重减弱动效偏好 */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{transition-duration:.01ms!important;animation-duration:.01ms!important}
  .mini:hover{transform:none}
}
