/* ========== 全局重置 ========== */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --green:#4caf82;--green-dark:#2e8b62;--orange:#ec9f5c;--orange-dark:#dd8838;
  --bg:#f6f1e7;--card:#ffffff;--card2:#f3ecdd;--text:#2e2a24;--muted:#8a7f6d;
  --accent:#2e8b62;--accent2:#5a8fb0;--danger:#d96a60;--gold:#c9971f;
  --purple:#8b6fc7;--purple-dark:#7558b3;
  --radius:20px;--shadow:0 8px 24px rgba(120,100,70,.1);
  --grad:linear-gradient(135deg,#3d9e72,#4caf82);
  --grad2:linear-gradient(135deg,#45ab94,#5cc0aa);
  --grad3:linear-gradient(135deg,#8b6fc7,#a184d6);
  --grad-wechat:linear-gradient(135deg,#1aad19,#2dc653);
  --grad-star:linear-gradient(135deg,#e0b23e,#c9971f);
  --grad-moon:linear-gradient(135deg,#8fa8be,#a7bfd3);
  --grad-sun:linear-gradient(135deg,#ec9f5c,#e07f52);
}

/* ========== 夜晚主题（深蓝星空） ========== */
[data-theme="dark"]{
  --green:#5ec495;--green-dark:#4caf82;--orange:#f0b47e;--orange-dark:#e89a58;
  --bg:#1b2140;--card:#262c52;--card2:#303764;--text:#e9eaf5;--muted:#9aa0c4;
  --accent:#5ec495;--accent2:#7ab8d4;--danger:#e0817c;--gold:#e3bd5e;
  --purple:#a78fd4;--purple-dark:#8f74c2;
  --shadow:0 8px 28px rgba(0,0,0,.4);
  --grad:linear-gradient(135deg,#3d9e72,#5ec495);
  --grad2:linear-gradient(135deg,#45ab94,#6ec9ba);
  --grad3:linear-gradient(135deg,#8b6fc7,#a78fd4);
}
[data-theme="dark"] body{
  background:
    radial-gradient(1.5px 1.5px at 12% 18%,rgba(255,255,255,.9),transparent 100%),
    radial-gradient(1px 1px at 28% 42%,rgba(255,255,255,.7),transparent 100%),
    radial-gradient(2px 2px at 45% 12%,rgba(255,255,255,.85),transparent 100%),
    radial-gradient(1px 1px at 62% 30%,rgba(255,255,255,.6),transparent 100%),
    radial-gradient(1.5px 1.5px at 78% 8%,rgba(255,255,255,.8),transparent 100%),
    radial-gradient(1px 1px at 88% 38%,rgba(255,255,255,.65),transparent 100%),
    radial-gradient(1.2px 1.2px at 35% 65%,rgba(255,255,255,.55),transparent 100%),
    radial-gradient(1px 1px at 70% 72%,rgba(255,255,255,.5),transparent 100%),
    radial-gradient(1.5px 1.5px at 8% 82%,rgba(255,255,255,.6),transparent 100%),
    radial-gradient(1px 1px at 52% 88%,rgba(255,255,255,.5),transparent 100%),
    linear-gradient(180deg,#1b2140 0%,#232a52 55%,#1b2140 100%);
  background-attachment:fixed;
}
[data-theme="dark"] .navbar,
[data-theme="dark"] .site-footer,
[data-theme="dark"] .ticker-bar{background:#232a52;border-color:rgba(255,255,255,.1)}
[data-theme="dark"] .card,
[data-theme="dark"] .stat-card,
[data-theme="dark"] .login-box{border-color:rgba(255,255,255,.1)}
[data-theme="dark"] .input,
[data-theme="dark"] .textarea{background:#1f2547;border-color:rgba(255,255,255,.14);color:var(--text)}
[data-theme="dark"] .input::placeholder,
[data-theme="dark"] .textarea::placeholder{color:#6a7196}
[data-theme="dark"] .notice-bar-top{background:#3a3220}
[data-theme="dark"] .comment-room{background:var(--bg)}
[data-theme="dark"] .comment-room-topbar{background:#232a52;border-color:rgba(255,255,255,.1)}
[data-theme="dark"] .notice-static{background:rgba(227,189,94,.1);border-color:rgba(227,189,94,.25);color:#e3bd5e}
[data-theme="dark"] .btn-outline{border-color:rgba(255,255,255,.25);color:var(--text)}

html,body{height:100%}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{
  font-family:"Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--text);min-height:100vh;line-height:1.6;
  transition:background .4s ease,color .4s ease;
}
a{color:var(--accent2);text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;outline:none}
input,textarea,select{font-family:inherit;outline:none}

/* ========== 滚动条 ========== */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:var(--card2);border-radius:4px}
::-webkit-scrollbar-track{background:transparent}

/* ========== 顶部导航 ========== */
.navbar{
  position:sticky;top:0;z-index:100;
  background:#ffffff;
  border-bottom:1px solid rgba(90,130,105,.16);
  padding:0 28px;height:64px;display:flex;align-items:center;justify-content:space-between;
}
.brand{display:flex;align-items:center;gap:12px;font-size:20px;font-weight:700;letter-spacing:.5px}
.brand .logo{
  width:38px;height:38px;border-radius:10px;
  background:var(--grad);display:flex;align-items:center;justify-content:center;
  font-size:20px;box-shadow:0 4px 16px rgba(102,194,149,.4);
}
.brand small{font-size:11px;color:var(--muted);font-weight:400;margin-left:4px;letter-spacing:0}
.nav-right{display:flex;align-items:center;gap:16px}
.nav-right .user-chip{
  display:flex;align-items:center;gap:8px;
  padding:6px 14px 6px 6px;border-radius:999px;background:var(--card);font-size:14px;
}
.nav-right .avatar{
  width:30px;height:30px;border-radius:50%;background:var(--grad);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:#fff;
}
.nav-right .badge{font-size:11px;padding:2px 8px;border-radius:6px;background:rgba(95,143,110,.18);color:var(--accent2)}
.nav-right .badge.admin{background:rgba(107,143,95,.18);color:var(--purple)}
.nav-right .badge.mentor{background:rgba(251,191,36,.15);color:var(--gold)}
.nav-right .badge.wechat{background:rgba(26,173,25,.15);color:#2dc653}
.btn-ghost{background:transparent;color:var(--muted);padding:8px 14px;border-radius:10px;font-size:14px;transition:.2s}
.btn-ghost:hover{background:var(--card);color:var(--text)}

/* ========== 登录设备数量 & 下拉面板 ========== */
.device-chip{
  font-size:12px;color:var(--muted);cursor:pointer;user-select:none;
  padding:4px 10px;border-radius:8px;background:rgba(90,120,88,.04);transition:.2s;white-space:nowrap;
}
.device-chip:hover{background:var(--card);color:var(--text)}
.device-panel{
  position:absolute;top:100%;margin-top:6px;right:20px;z-index:120;width:320px;max-width:calc(100vw - 24px);
  background:#fff;border:1px solid rgba(90,120,88,.12);border-radius:14px;
  box-shadow:0 14px 44px rgba(64,110,72,.3);padding:12px;
  display:none;max-height:70vh;overflow-y:auto;
}
.device-panel.show{display:block;animation:fadeIn .18s ease}
.device-panel-title{font-size:13px;font-weight:600;color:var(--gold);padding:4px 6px 10px}
.device-panel-loading{font-size:13px;color:var(--muted);text-align:center;padding:16px 0}
.device-panel-tip{font-size:11px;color:var(--muted);padding:10px 6px 4px;line-height:1.6;border-top:1px solid rgba(90,120,88,.06);margin-top:8px}
.device-item{padding:10px;border-radius:10px;background:rgba(90,120,88,.03);margin-bottom:8px}
.device-item.current{background:rgba(45,198,83,.08);border:1px solid rgba(45,198,83,.25)}
.device-item-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}
.device-name{font-size:14px;font-weight:600;color:var(--text)}
.device-current-tag{font-size:11px;color:#2dc653;background:rgba(45,198,83,.15);padding:1px 8px;border-radius:6px}
.device-kick-btn{
  font-size:11px;color:#f87171;background:rgba(248,113,113,.1);
  border:1px solid rgba(248,113,113,.3);padding:2px 10px;border-radius:6px;
  cursor:pointer;transition:.2s;font-family:inherit;
}
.device-kick-btn:hover{background:rgba(248,113,113,.25);color:#fca5a5}
.device-item-meta{font-size:12px;color:var(--muted);line-height:1.7}

/* ========== 补卡月历（管理员） ========== */
.mk-grid{user-select:none}
.mk-row{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}
.mk-head span{text-align:center;font-size:12px;color:var(--muted);padding:2px 0}
.mk-cell{
  position:relative;height:46px;border-radius:9px;background:rgba(138,185,110,.09);
  border:1px solid rgba(90,120,88,.06);display:flex;flex-direction:column;align-items:center;justify-content:center;
}
.mk-cell.sat{background:rgba(125,154,122,.12);border-color:rgba(125,154,122,.25)}
.mk-cell.on{border-color:rgba(74,222,128,.4)}
/* 只完成一项（如只打了冥想）：橙色√与橙色边框 */
.mk-cell.on-part{border-color:rgba(251,146,60,.45)}
.mk-main.part{color:#fb923c}
.mk-cell.mk::after{content:'';position:absolute;top:4px;left:4px;width:5px;height:5px;border-radius:50%;background:var(--gold)}
.mk-cell.disabled{opacity:.35}
.mk-cell.empty{background:transparent;border:none}
.mk-day{position:absolute;top:3px;left:6px;right:auto;font-size:10px;color:var(--muted)}
.mk-cell.sat .mk-day{color:var(--accent2)}
.mk-main{
  background:transparent;border:none;cursor:pointer;width:100%;height:100%;
  font-size:clamp(14px,3.4vw,18px);font-weight:700;color:#3fb377;line-height:1;font-family:inherit;
  display:flex;align-items:center;justify-content:center;border-radius:9px;
}
.mk-main:disabled{cursor:not-allowed}
.mk-cell:not(.disabled) .mk-main:hover{background:rgba(74,222,128,.1)}
.mk-rit{
  position:absolute;top:2px;right:2px;width:17px;height:17px;border-radius:50%;
  border:1px solid rgba(107,143,95,.45);background:transparent;color:rgba(107,143,95,.55);
  font-size:11px;line-height:1;cursor:pointer;font-family:inherit;padding:0;z-index:2;
}
.mk-rit.on{background:rgba(107,143,95,.9);color:#fff;border-color:transparent}
.mk-rit:disabled{cursor:not-allowed;opacity:.4}
.mk-flag{position:absolute;bottom:3px;left:5px;font-size:10px;color:var(--gold);font-style:normal}
.mk-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--muted);margin-top:12px;align-items:center}
.mk-legend .mk-sym{display:inline-block;width:16px;text-align:center;font-style:normal;font-weight:700}
.mk-legend .mk-sym.ok{color:#3fb377}
.mk-legend .mk-sym.rit{color:var(--purple)}
.mk-legend .mk-sym.mk{color:var(--gold);font-size:11px}

/* ========== 打卡日详情浮窗 ========== */
.day-detail-mask{
  position:fixed;inset:0;z-index:400;background:rgba(70,100,72,.35);
  display:flex;align-items:center;justify-content:center;padding:20px;
  animation:fadeIn .18s ease;
}
.day-detail{
  position:relative;width:100%;max-width:480px;max-height:78vh;overflow-y:auto;
  background:var(--card);border:1px solid rgba(90,120,88,.1);border-radius:16px;
  padding:22px 20px;box-shadow:0 20px 60px rgba(64,110,72,.35);
}
.day-detail-close{
  position:absolute;top:10px;right:10px;width:30px;height:30px;border-radius:50%;
  background:rgba(90,120,88,.06);border:1px solid rgba(90,120,88,.12);
  color:var(--muted);font-size:14px;cursor:pointer;line-height:1;font-family:inherit;
  display:flex;align-items:center;justify-content:center;transition:.2s;
}
.day-detail-close:hover{background:rgba(248,113,113,.2);color:#fca5a5}
.day-detail-title{font-size:16px;font-weight:700;color:var(--gold);margin-bottom:14px;padding-right:36px}
.day-detail-block{margin-bottom:14px;padding:12px 14px;background:rgba(90,120,88,.03);border-radius:10px;border:1px solid rgba(90,120,88,.05)}
.day-detail-label{font-size:13px;font-weight:600;color:var(--accent2);margin-bottom:6px}
.day-detail-text{font-size:14px;line-height:1.8;color:var(--text);word-break:break-word;white-space:pre-wrap}
.day-detail-comment{margin-top:10px;padding-top:10px;border-top:1px dashed rgba(90,120,88,.08)}
.day-detail-comment:first-of-type{margin-top:0;padding-top:0;border-top:none}
.day-detail-comment-meta{font-size:12px;color:var(--muted);margin-top:4px;text-align:right}
@media (max-width:480px){
  .mk-row{gap:4px;margin-bottom:4px}
  .mk-cell{height:40px}
  .mk-rit{width:16px;height:16px;font-size:10px}
}

/* ========== 布局 ========== */
.container{max-width:1100px;margin:0 auto;padding:32px 20px 80px}
.page-title{font-size:28px;font-weight:700;margin-bottom:6px}
.page-sub{color:var(--muted);margin-bottom:28px;font-size:15px}

/* ========== 卡片 ========== */
.card{
  background:#ffffff;
  border:1px solid rgba(90,130,105,.14);
  border-radius:var(--radius);padding:28px;box-shadow:var(--shadow);
}
.card + .card{margin-top:22px}

/* ========== 按钮 ========== */
.btn{
  display:inline-flex;align-items:center;gap:8px;
  padding:11px 22px;border-radius:10px;font-size:15px;font-weight:600;
  transition:transform .15s,box-shadow .2s,opacity .2s;
}
.btn:active{transform:scale(.97)}
.btn-primary{background:var(--grad);color:#fff;box-shadow:0 6px 20px rgba(102,194,149,.35)}
.btn-primary:hover{box-shadow:0 8px 28px rgba(102,194,149,.5)}
.btn-success{background:linear-gradient(135deg,#5ec4b6,#9fe0d0);color:#fff;box-shadow:0 6px 20px rgba(94,196,182,.32)}
.btn-success:hover{box-shadow:0 8px 28px rgba(94,196,182,.48)}
/* 冥想空间入口按钮：匹配 mmkl 预览站奶油橙风（--accent:#E89B5C → --accent-2:#F0C28C） */
.btn-mmkl{background:linear-gradient(135deg,#E89B5C,#F0C28C);color:#fff;box-shadow:0 6px 20px rgba(232,155,92,.4);letter-spacing:1px}
.btn-mmkl:hover{box-shadow:0 8px 28px rgba(232,155,92,.55);filter:brightness(1.05)}
.btn-outline{background:transparent;color:var(--text);border:1px solid rgba(90,120,88,.28)}
.btn-outline:hover{background:var(--card2)}
.btn-danger{background:linear-gradient(135deg,#ef4444,#f87171);color:#fff}
.btn-danger:hover{box-shadow:0 8px 28px rgba(239,68,68,.4)}
.btn-purple{background:var(--grad3);color:#fff;box-shadow:0 6px 20px rgba(107,143,95,.3)}
.btn-purple:hover{box-shadow:0 8px 28px rgba(107,143,95,.45)}
.btn-wechat{background:var(--grad-wechat);color:#fff;box-shadow:0 6px 20px rgba(26,173,25,.3)}
.btn-wechat:hover{box-shadow:0 8px 28px rgba(26,173,25,.45)}
.btn-sm{padding:7px 14px;font-size:13px;border-radius:8px}
.btn:disabled{opacity:.5;cursor:not-allowed}

/* ========== 表单 ========== */
.field{margin-bottom:18px}
.field label{display:block;font-size:14px;color:var(--muted);margin-bottom:6px;font-weight:500}
.input,.textarea,.select{
  width:100%;padding:12px 14px;border-radius:10px;
  background:var(--card2);border:1px solid transparent;color:var(--text);font-size:15px;
  transition:border-color .2s,box-shadow .2s;
}
.textarea{resize:vertical;min-height:110px;line-height:1.7}
.input:focus,.textarea:focus,.select:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(95,143,110,.18)}
.input::placeholder,.textarea::placeholder{color:#a4bda1}

/* ========== 登录页 ========== */
.login-wrap{
  min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;
}
.login-box{
  width:100%;max-width:460px;border-radius:20px;
  background:#ffffff;
  padding:44px 36px 36px;border:1px solid rgba(90,130,105,.16);box-shadow:var(--shadow);
}
.login-box .logo-big{
  width:64px;height:64px;border-radius:16px;background:var(--grad);
  display:flex;align-items:center;justify-content:center;font-size:30px;margin:0 auto 18px;
  box-shadow:0 8px 28px rgba(102,194,149,.4);
}
.login-box h1{text-align:center;font-size:24px;margin-bottom:6px}
.login-box p.sub{text-align:center;color:var(--muted);font-size:14px;margin-bottom:24px}
.login-box .btn{width:100%;justify-content:center;padding:13px}
.login-hint{margin-top:20px;padding:14px;border-radius:10px;background:rgba(95,143,110,.08);font-size:13px;color:var(--muted);line-height:1.8}
.login-hint b{color:var(--accent2)}
.login-hint .admin-hint{color:var(--purple);font-weight:600}
.login-hint .wechat-hint{color:#2dc653;font-weight:600}

/* 每日正能量语录 */
.daily-quote{
  margin-top:18px;padding:14px 18px;border-radius:12px;
  background:linear-gradient(135deg,rgba(107,143,95,.08),rgba(102,194,149,.1));
  border:1px solid rgba(107,143,95,.15);font-size:14px;line-height:1.8;
  text-align:center;color:var(--text);position:relative;overflow:hidden;
}
.daily-quote::before{content:'✦';position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--purple);opacity:.5;font-size:12px}
.daily-quote::after{content:'✦';position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--accent2);opacity:.5;font-size:12px}
.daily-quote .q-text{font-style:italic;color:var(--text)}
.daily-quote .q-author{font-size:12px;color:var(--muted);margin-top:4px;font-style:normal}

.tab-toggle{display:flex;gap:8px;margin-bottom:20px;background:var(--card2);padding:4px;border-radius:10px}
.tab-toggle button{flex:1;padding:9px;border-radius:8px;background:transparent;color:var(--muted);font-size:14px;font-weight:500;transition:.2s}
.tab-toggle button.active{background:var(--grad);color:#fff;font-weight:600}

/* 微信登录分隔线 */
.wechat-divider{
  display:flex;align-items:center;gap:12px;margin:20px 0 16px;color:var(--muted);font-size:13px;
}
.wechat-divider::before,.wechat-divider::after{
  content:'';flex:1;height:1px;background:rgba(90,120,88,.08);
}
.wechat-login-btn{
  width:100%;display:flex;align-items:center;justify-content:center;gap:10px;
  padding:12px 22px;border-radius:10px;font-size:15px;font-weight:600;
  background:var(--grad-wechat);color:#fff;border:none;cursor:pointer;
  box-shadow:0 6px 20px rgba(26,173,25,.3);transition:.2s;
}
.wechat-login-btn:hover{box-shadow:0 8px 28px rgba(26,173,25,.45)}
.wechat-login-btn .wx-icon{font-size:20px}

/* ========== 微信扫码弹窗 ========== */
.qrcode-modal{text-align:center;padding:10px}
.qrcode-modal .qrcode-area{
  width:220px;height:220px;margin:16px auto;
  background:#fff;border-radius:12px;display:flex;align-items:center;justify-content:center;
  position:relative;overflow:hidden;
}
.qrcode-modal .qrcode-placeholder{
  width:200px;height:200px;background:
    repeating-conic-gradient(#333 0% 25%, #fff 0% 50%) 50%/20px 20px;
  border-radius:8px;position:relative;
}
.qrcode-modal .qrcode-placeholder::after{
  content:'🌳';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  font-size:40px;background:#fff;width:56px;height:56px;border-radius:12px;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 2px 8px rgba(0,0,0,.1);
}
.qrcode-modal .scan-tip{font-size:14px;color:var(--muted);margin-top:8px}
.qrcode-modal .scan-tip .highlight{color:#2dc653;font-weight:600}
/* 内置库表格渲染的二维码（createTableTag）：整体等比缩放塞进扫码框，保证显示完整 */
.qrtable{display:flex;align-items:center;justify-content:center;width:100%;height:100%}
.qrtable table{border-collapse:collapse;background:#fff;transform:scale(1);transform-origin:center}
.qrtable td{padding:0}
.qrcode-modal .demo-btns{display:flex;gap:10px;justify-content:center;margin-top:18px;flex-wrap:wrap}
.qrcode-modal .demo-btns button{padding:8px 16px;border-radius:8px;font-size:13px;border:1px solid var(--card2);background:var(--card2);color:var(--text);cursor:pointer}
.qrcode-modal .demo-btns button:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
.qrcode-modal .demo-btns button.success-btn{background:rgba(26,173,25,.15);color:#2dc653;border-color:rgba(26,173,25,.3)}
.qrcode-modal .demo-btns button.success-btn:hover{background:rgba(26,173,25,.3)}

/* 微信绑定状态 */
.wechat-bind-status{
  display:flex;align-items:center;gap:10px;padding:12px 16px;
  border-radius:10px;margin-bottom:16px;font-size:14px;
}
.wechat-bind-status.bound{background:rgba(26,173,25,.08);border:1px solid rgba(26,173,25,.2);color:#2dc653}
.wechat-bind-status.unbound{background:rgba(125,154,122,.06);border:1px solid rgba(125,154,122,.15);color:var(--muted)}

/* ========== 打卡区 ========== */
.dashboard-header{
  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px;margin-bottom:24px;
}
.dashboard-header .greeting{font-size:22px;font-weight:700}
.dashboard-header .date{color:var(--muted);font-size:14px;margin-top:2px}
.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:16px;margin-bottom:24px}
.stat-card{
  background:#ffffff;
  border:1px solid rgba(90,130,105,.14);border-radius:var(--radius);
  padding:20px;text-align:center;
}
.stat-card .num{font-size:30px;font-weight:800;background:var(--grad);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.stat-card .num.purple{background:var(--grad3);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.stat-card .num.gold{background:linear-gradient(135deg,#fbbf24,#f59e0b);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.stat-card .num.green{background:linear-gradient(135deg,#1aad19,#2dc653);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.stat-card .num.star{background:var(--grad-star);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.stat-card .num.moon{background:var(--grad-moon);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.stat-card .num.sun{background:var(--grad-sun);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.stat-card .lbl{font-size:13px;color:var(--muted);margin-top:4px}

.section-title{font-size:18px;font-weight:700;margin-bottom:18px;display:flex;align-items:center;gap:10px}
.section-title .dot{width:8px;height:8px;border-radius:50%;background:var(--grad)}

/* 打卡状态 */
.status-banner{
  display:flex;align-items:center;gap:12px;padding:14px 18px;border-radius:12px;margin-bottom:22px;
  background:rgba(74,222,128,.08);border:1px solid rgba(74,222,128,.2);
}
.status-banner.done{background:rgba(74,222,128,.08);border-color:rgba(74,222,128,.2)}
.status-banner.todo{background:rgba(251,146,60,.08);border-color:rgba(251,146,60,.2)}
.status-banner.locked{background:rgba(107,143,95,.08);border-color:rgba(107,143,95,.2)}
.status-banner .icon{font-size:22px}

/* 标签 */
.tag-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.tag{
  display:inline-flex;align-items:center;gap:4px;
  padding:4px 12px;border-radius:8px;font-size:13px;font-weight:500;
}
.tag-green{background:rgba(74,222,128,.15);color:var(--green);border:1px solid rgba(74,222,128,.3)}
.tag-orange{background:rgba(251,146,60,.15);color:var(--orange);border:1px solid rgba(251,146,60,.3)}
.tag-purple{background:rgba(107,143,95,.15);color:var(--purple);border:1px solid rgba(107,143,95,.3)}
.tag-blue{background:rgba(95,143,110,.15);color:#5f8f6e;border:1px solid rgba(95,143,110,.3)}
.tag-gray{background:rgba(125,154,122,.1);color:var(--muted);border:1px solid rgba(125,154,122,.2)}
.tag-red{background:rgba(248,113,113,.15);color:var(--danger);border:1px solid rgba(248,113,113,.3)}
.tag-wechat{background:rgba(26,173,25,.12);color:#2dc653;border:1px solid rgba(26,173,25,.25)}
.tag-star{background:rgba(251,191,36,.15);color:var(--gold);border:1px solid rgba(251,191,36,.35);font-size:14px;padding:5px 14px}
.tag-nobox{background:none;border:none;padding:5px 2px;font-size:14px;box-shadow:none}
.tag-moon{background:rgba(125,154,122,.15);color:#a08fb5;border:1px solid rgba(125,154,122,.4);font-size:14px;padding:5px 14px}
.tag-sun{background:rgba(245,158,11,.15);color:var(--gold);border:1px solid rgba(245,158,11,.35);font-size:14px;padding:5px 14px}

/* 点评 */
.comment-box{
  margin-top:16px;padding:16px;border-radius:12px;
  background:rgba(95,143,110,.06);border:1px solid rgba(95,143,110,.15);
}
.comment-box .c-title{font-size:14px;font-weight:600;color:var(--accent2);margin-bottom:10px}
.comment-item{
  padding:12px 14px;border-radius:10px;background:rgba(90,120,88,.03);
  margin-bottom:8px;border-left:3px solid var(--accent);
}
.comment-item .c-meta{font-size:12px;color:var(--muted);margin-bottom:4px}
.comment-item .c-text{font-size:14px;line-height:1.6}

/* 列表 */
.member-list{display:flex;flex-direction:column;gap:12px}
.member-item{
  display:flex;align-items:center;gap:14px;padding:16px 20px;
  background:var(--card2);border-radius:12px;flex-wrap:wrap;
}
.member-item .m-name{font-weight:600;font-size:15px;min-width:100px}
.member-item .m-account{font-size:12px;color:var(--muted)}
.member-item .m-tags{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto;align-items:center}

/* 筛选 */
.filter-row{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap}
.filter-btn{
  padding:7px 16px;border-radius:8px;font-size:13px;
  background:var(--card2);color:var(--muted);transition:.2s;border:1px solid transparent;
}
.filter-btn.active{background:rgba(95,143,110,.15);color:var(--accent2);border-color:rgba(95,143,110,.3)}
.filter-btn:hover:not(.active){background:var(--card);color:var(--text)}

/* 模态框 */
.modal-overlay{
  display:none;position:fixed;inset:0;z-index:200;
  background:rgba(70,100,72,.4);backdrop-filter:blur(4px);
  align-items:center;justify-content:center;padding:20px;
}
.modal-overlay.show{display:flex}
.modal{
  background:var(--card);border-radius:20px;padding:32px;
  max-width:680px;width:100%;max-height:85vh;overflow-y:auto;
  border:1px solid rgba(90,120,88,.06);box-shadow:var(--shadow);position:relative;
}
.modal h2{font-size:20px;margin-bottom:20px}
.modal .close-btn{
  position:absolute;top:12px;right:12px;font-size:20px;color:var(--muted);
  background:rgba(90,120,88,.07);border:1px solid rgba(90,120,88,.12);
  width:44px;height:44px;border-radius:12px;cursor:pointer;z-index:5;
  display:flex;align-items:center;justify-content:center;line-height:1;
}
.modal h2{padding-right:52px} /* 给右上角关闭按钮留出位置，标题不被遮挡 */
.modal .close-btn:hover{background:rgba(239,68,68,.15);border-color:rgba(239,68,68,.35);color:#fca5a5}

/* ========== 静态页脚（不悬浮，正常文档流） ========== */
/* 结构：品牌 → 链接 → 备案，从上到下排列 */
.site-footer{
  margin-top:60px;
  background:#ffffff;
  border-top:1px solid rgba(90,130,105,.14);
  padding:28px 20px 24px;
  text-align:center;
  font-size:13px;
  color:var(--muted);
  line-height:2;
}
.site-footer .footer-brand{
  font-size:15px;color:var(--accent2);font-weight:600;
  margin-bottom:10px;letter-spacing:.5px;
}
.site-footer .footer-brand a{color:var(--accent2);text-decoration:none;font-weight:400;font-size:13px}
.site-footer .footer-links{
  display:flex;gap:18px;justify-content:center;flex-wrap:wrap;
  margin-bottom:12px;
}
.site-footer .footer-links a{
  color:var(--muted);text-decoration:none;
  display:inline-flex;align-items:center;gap:4px;
  padding:5px 12px;border-radius:8px;
  transition:color .2s,background .2s;
  font-size:13px;
}
.site-footer .footer-links a:hover{
  color:var(--accent2);background:rgba(95,143,110,.08);
}
.site-footer .footer-beian{
  font-size:12px;color:var(--muted);
  padding-top:8px;border-top:1px solid rgba(90,120,88,.04);
}
.site-footer .footer-beian a{color:var(--muted);text-decoration:none}
.site-footer .footer-beian a:hover{color:var(--accent2)}

/* 底部滚动栏（唯一保持悬浮的元素） */
.ticker-bar{
  position:fixed;bottom:0;left:0;right:0;z-index:95;
  background:#ffffff;
  border-top:1px solid rgba(90,130,105,.14);
  padding:10px 0;overflow:hidden;height:44px;
}
.ticker-track{display:flex;gap:40px;animation:tick 40s linear infinite;white-space:nowrap;width:max-content}
.ticker-track span{font-size:13px;color:var(--muted)}
@keyframes fadeIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
@keyframes tick{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* 补卡/导出区域 */
.makeup-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.export-section{background:rgba(107,143,95,.06);border:1px solid rgba(107,143,95,.15);border-radius:12px;padding:20px;margin-top:16px}
.export-section h3{font-size:16px;margin-bottom:14px;color:var(--purple)}
.export-controls{display:flex;gap:12px;align-items:end;flex-wrap:wrap}

/* 打卡记录表格 */
.record-table{width:100%;border-collapse:collapse;font-size:13px;margin-top:12px}
.record-table th{background:var(--card2);padding:8px 10px;text-align:center;font-weight:600;color:var(--muted);border-bottom:1px solid rgba(90,120,88,.06)}
.record-table td{padding:7px 10px;text-align:center;border-bottom:1px solid rgba(90,120,88,.03)}
.record-table tr:hover td{background:rgba(90,120,88,.02)}
.record-table .check-y{color:var(--green);font-weight:700}
.record-table .check-n{color:var(--muted);opacity:.4}

/* 周六仪式 */
.ritual-locked{padding:20px;text-align:center;color:var(--muted)}
.ritual-locked .lock-icon{font-size:36px;margin-bottom:10px}
.ritual-open{animation:glow 2s ease-in-out infinite alternate}
@keyframes glow{from{box-shadow:0 0 10px rgba(107,143,95,.1)}to{box-shadow:0 0 25px rgba(107,143,95,.25)}}

/* 提示 */
.toast{
  position:fixed;top:80px;left:50%;transform:translateX(-50%) translateY(-20px);
  background:var(--card);border:1px solid rgba(74,222,128,.3);color:var(--green);
  padding:12px 24px;border-radius:10px;font-size:14px;font-weight:500;
  box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:.3s;z-index:300;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.error{border-color:rgba(248,113,113,.3);color:var(--danger)}

/* 管理员导航 */
.admin-nav{display:flex;gap:8px;margin-bottom:24px;flex-wrap:wrap}
.admin-nav button{padding:10px 20px;border-radius:10px;font-size:14px;font-weight:500;background:var(--card);color:var(--muted);border:1px solid transparent;transition:.2s;cursor:pointer}
.admin-nav button.active{background:rgba(107,143,95,.15);color:var(--purple);border-color:rgba(107,143,95,.3)}
.admin-nav button:hover:not(.active){background:var(--card2);color:var(--text)}

/* 学员管理表格 */
.member-manage-table{width:100%;border-collapse:collapse;font-size:14px;margin-top:12px}
.member-manage-table th{background:var(--card2);padding:10px 12px;text-align:left;font-weight:600;color:var(--muted);border-bottom:1px solid rgba(90,120,88,.06)}
.member-manage-table td{padding:10px 12px;border-bottom:1px solid rgba(90,120,88,.03);vertical-align:middle}
.member-manage-table tr:hover td{background:rgba(90,120,88,.02)}
.member-manage-table .actions{display:flex;gap:6px;flex-wrap:wrap}

/* 密码强度 */
.pwd-strength{display:flex;gap:4px;margin-top:6px}
.pwd-strength .bar{height:4px;flex:1;border-radius:2px;background:var(--card2);transition:.3s}
.pwd-strength .bar.active.weak{background:var(--danger)}
.pwd-strength .bar.active.med{background:var(--gold)}
.pwd-strength .bar.active.strong{background:var(--green)}

/* 设置面板 */
.settings-section{margin-bottom:20px}
.settings-section h3{font-size:15px;margin-bottom:12px;color:var(--accent2)}

/* 角色标签 */
.role-tag{display:inline-block;padding:2px 8px;border-radius:6px;font-size:12px;font-weight:500}
.role-student{background:rgba(95,143,110,.12);color:var(--accent2)}
.role-mentor{background:rgba(251,191,36,.12);color:var(--gold)}
.role-admin{background:rgba(107,143,95,.12);color:var(--purple)}
.role-assistant{background:rgba(20,184,166,.12);color:#48b39c}

/* ========== 星标 & 排名 ========== */
.star-display{
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px;
}
.star-icon{font-size:22px;line-height:1;filter:drop-shadow(0 0 4px rgba(251,191,36,.4))}
.star-icon.half{position:relative;display:inline-block}
.star-icon.half::after{
  content:'⭐';position:absolute;left:0;top:0;
  clip-path:polygon(0 0,50% 0,50% 100%,0 100%);
}
.moon-icon{font-size:22px;line-height:1;filter:drop-shadow(0 0 4px rgba(125,154,122,.4))}
.sun-icon{font-size:22px;line-height:1;filter:drop-shadow(0 0 6px rgba(251,191,36,.5))}

/* 排名表格 */
.ranking-table{width:100%;border-collapse:collapse;font-size:14px;margin-top:12px}
.ranking-table th{background:linear-gradient(135deg,rgba(251,191,36,.1),rgba(107,143,95,.08));padding:10px 12px;text-align:center;font-weight:600;color:var(--gold);border-bottom:2px solid rgba(251,191,36,.2)}
.ranking-table td{padding:12px;text-align:center;border-bottom:1px solid rgba(90,120,88,.04);vertical-align:middle}
.ranking-table tr:hover td{background:rgba(90,120,88,.03)}
.ranking-table .rank-num{font-size:18px;font-weight:800;width:50px}
.ranking-table .rank-1{color:var(--gold);font-size:22px}
.ranking-table .rank-2{color:#b9a8c4;font-size:20px}
.ranking-table .rank-3{color:#f97316;font-size:20px}
.ranking-table .r-name{text-align:left;font-weight:600}
.ranking-table .r-stars{text-align:left;padding-left:20px}

.month-selector{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.month-selector label{font-size:14px;color:var(--muted)}
.month-selector select{background:var(--card2);border:1px solid transparent;color:var(--text);padding:8px 14px;border-radius:8px;font-size:14px}

/* 学员星标卡片 */
.my-stars-card{
  background:linear-gradient(135deg,rgba(251,191,36,.06),rgba(107,143,95,.04));
  border:1px solid rgba(251,191,36,.15);border-radius:14px;padding:22px;margin-bottom:22px;
}
.my-stars-card .stars-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}
.my-stars-card .stars-label{font-size:13px;color:var(--muted);margin-right:6px}

/* 隐藏类 */
.hidden{display:none !important}

/* ========== 烟花庆祝特效 ========== */
.fireworks-canvas{
  position:fixed;inset:0;z-index:9999;pointer-events:none;
}
.firework-particle{
  position:absolute;width:6px;height:6px;border-radius:50%;
  pointer-events:none;will-change:transform,opacity;
}
.celebration-text{
  position:fixed;top:30%;left:50%;transform:translateX(-50%);
  z-index:10000;pointer-events:none;
  font-size:32px;font-weight:800;letter-spacing:2px;
  background:linear-gradient(135deg,#fbbf24,#f59e0b,#ec4899,#a855f7,#6366f1);
  background-size:300% 300%;
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;
  background-clip:text;
  animation:celebText 2.5s ease-out forwards,celebGradient 2s ease-in-out infinite;
  text-shadow:none;white-space:nowrap;
}
@keyframes celebText{
  0%{opacity:0;transform:translateX(-50%) scale(.5) translateY(20px)}
  15%{opacity:1;transform:translateX(-50%) scale(1.15) translateY(0)}
  30%{transform:translateX(-50%) scale(1) translateY(0)}
  80%{opacity:1;transform:translateX(-50%) scale(1) translateY(-10px)}
  100%{opacity:0;transform:translateX(-50%) scale(.9) translateY(-30px)}
}
@keyframes celebGradient{
  0%,100%{background-position:0% 50%}
  50%{background-position:100% 50%}
}
.confetti-piece{
  position:fixed;z-index:9998;pointer-events:none;
  width:10px;height:10px;border-radius:2px;top:-20px;
  will-change:transform,opacity;
}

/* ========== 移动端适配（≤768px 平板 / ≤480px 手机） ========== */
@media (max-width:768px){
  /* 顶部导航：允许换行，缩小留白 */
  .navbar{padding:8px 14px;height:auto;min-height:56px;flex-wrap:wrap;row-gap:6px}
  .brand{font-size:17px;gap:8px}
  .brand .logo{width:32px;height:32px;font-size:17px;border-radius:8px}
  .brand small{display:none}
  .nav-right{gap:6px;flex-wrap:wrap;justify-content:flex-end}
  .nav-right .user-chip{padding:4px 10px 4px 4px;font-size:13px}
  .nav-right .avatar{width:26px;height:26px;font-size:12px}
  .nav-right .badge{font-size:10px;padding:1px 6px}
  .btn-ghost{padding:6px 10px;font-size:13px}
  .device-chip{font-size:11px;padding:3px 8px}
  .device-panel{right:12px;left:12px;width:auto}

  /* 页面容器与卡片 */
  .container{padding:20px 12px 90px}
  .card{padding:20px 16px;border-radius:12px}
  .page-title{font-size:22px}
  .dashboard-header .greeting{font-size:19px}

  /* 登录盒 */
  .login-wrap{padding:16px 14px}
  .login-box{padding:32px 20px 26px;border-radius:16px}

  /* 输入框字号≥16px，避免 iOS/安卓 聚焦时自动放大页面 */
  .input,.textarea,.select{font-size:16px}

  /* 统计卡片两列 */
  .stats-row{grid-template-columns:repeat(2,1fr);gap:10px}
  .stat-card{padding:14px 8px}
  .stat-card .num{font-size:24px}

  /* 表单网格转单列 */
  .makeup-grid{grid-template-columns:1fr}
  /* 补卡区间行：手机上日期输入框一行两个、占满宽度 */
  .makeup-date-row{display:grid;grid-template-columns:auto 1fr auto 1fr auto;gap:8px;align-items:center}
  .makeup-date-row .date-label{min-width:0}
  .makeup-date-row input{font-size:16px;min-width:0;width:100%;padding:9px 8px}
  .makeup-date-row .btn-remove-date{grid-column:1/-1;width:100%;text-align:center;padding:8px}
  .makeup-date-row #rangeDays0,.makeup-date-row span[id^="rangeDays"]{grid-column:1/-1;text-align:right}
  .export-controls{flex-direction:column;align-items:stretch}
  .export-controls .field{min-width:0 !important}
  .export-controls .btn{width:100%;justify-content:center}

  /* 表格横向滑动，不挤压页面 */
  .member-manage-table,.ranking-table,.record-table{
    display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;
    white-space:nowrap;
  }
  .ranking-table th,.ranking-table td{white-space:normal;min-width:52px}
  .ranking-table .r-stars{white-space:normal}

  /* 弹窗占满更多屏幕 */
  .modal-overlay{padding:12px}
  .modal{padding:24px 16px;border-radius:16px;max-height:92vh}

  /* 成员列表纵向排布 */
  .member-item{align-items:flex-start;gap:10px;padding:14px}
  .member-item .m-tags{margin-left:0;width:100%}
  .member-item .m-name{min-width:0}

  /* 二维码弹窗缩小 */
  .qrcode-modal .qrcode-area{width:200px;height:200px}
  .qrcode-modal .qrcode-placeholder{width:180px;height:180px}

  /* 庆祝文字不溢出 */
  .celebration-text{font-size:22px;white-space:normal;text-align:center;max-width:92vw;line-height:1.4}

  /* 底部滚动条与页脚 */
  .ticker-bar{height:40px;padding:8px 0}
  .ticker-track span{font-size:12px}
  .site-footer{padding:22px 14px 20px}
  .site-footer .footer-links{gap:6px}
  .site-footer .footer-links a{padding:4px 8px;font-size:12px}
}

@media (max-width:480px){
  .nav-right .btn-ghost{padding:6px 8px;font-size:12px}
  .admin-nav button{padding:8px 12px;font-size:13px}
  .status-banner{padding:12px 14px}
  .status-banner .icon{font-size:19px}
  .my-stars-card{padding:16px}
  .star-icon,.moon-icon,.sun-icon{font-size:19px}
  .makeup-date-row .date-label{min-width:48px;font-size:12px}
  .makeup-date-row input{padding:6px 8px;font-size:13px}
  .btn{padding:10px 18px;font-size:14px}
  .field label{font-size:13px}
  .input,.textarea,.select{font-size:16px;padding:11px 12px}
  .tab-toggle button{padding:8px 4px;font-size:13px}
}

/* 防止任何元素造成整页横向滚动 */
html,body{overflow-x:hidden}

/* ========== 语音输入按钮（仅微信内显示） ========== */
.voice-btn{
  display:none;align-items:center;gap:6px;
  padding:8px 16px;border-radius:999px;font-size:13px;font-weight:600;
  background:#e8f3ec;color:#2e8b62;
  border:1px solid rgba(76,175,130,.45);cursor:pointer;transition:.2s;font-family:inherit;
  -webkit-tap-highlight-color:rgba(76,175,130,.2);
}
.voice-btn:active{transform:scale(.96)}
body.wx-voice-ua .voice-btn{display:inline-flex !important;pointer-events:auto}
.voice-btn.recording{background:linear-gradient(135deg,#66c295,#9fe0bd);color:#fff;animation:voicePulse 1.2s ease-in-out infinite}
@keyframes voicePulse{0%,100%{box-shadow:0 0 0 0 rgba(255,157,180,.45)}50%{box-shadow:0 0 0 8px rgba(255,157,180,0)}}
.voice-row{display:flex;justify-content:flex-end;margin-top:6px}

/* ========== 冥想倒计时 ========== */
.timer-btns{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.timer-btn{
  display:flex;flex-direction:column;align-items:center;gap:4px;
  padding:12px 4px;border-radius:12px;font-size:13px;font-weight:600;color:var(--text);
  background:var(--card2);border:2px solid transparent;cursor:pointer;transition:.2s;font-family:inherit;
}
.timer-btn .timer-emoji{font-size:26px;line-height:1}
.timer-btn:hover{transform:translateY(-2px);border-color:rgba(76,158,107,.5)}
.timer-btn.active{border-color:#66c295;background:rgba(76,158,107,.14)}
.timer-panel{
  margin-top:12px;padding:18px;border-radius:14px;text-align:center;
  background:linear-gradient(135deg,rgba(76,158,107,.08),rgba(138,185,110,.08));
  border:1px solid rgba(138,185,110,.25);
}
.timer-animal-big{font-size:52px;line-height:1.2;display:inline-block}
.timer-animal-big.anim-hop{animation:animHop 1s ease-in-out infinite}
.timer-animal-big.anim-sway{animation:animSway 2.4s ease-in-out infinite}
.timer-animal-big.anim-fly{animation:animFly 1.8s ease-in-out infinite}
.timer-animal-big.anim-swim{animation:animSwim 2.8s ease-in-out infinite}
@keyframes animHop{0%,100%{transform:translateY(0)}40%{transform:translateY(-16px)}60%{transform:translateY(-12px)}}
@keyframes animSway{0%,100%{transform:translateX(-8px) rotate(-4deg)}50%{transform:translateX(8px) rotate(4deg)}}
@keyframes animFly{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-12px) rotate(3deg)}}
@keyframes animSwim{0%,100%{transform:translateX(-10px) translateY(0)}25%{transform:translateX(0) translateY(-6px)}50%{transform:translateX(10px) translateY(0)}75%{transform:translateX(0) translateY(6px)}}
.timer-clock{font-size:40px;font-weight:800;letter-spacing:2px;color:var(--text);margin:8px 0;font-variant-numeric:tabular-nums}
.timer-progress{height:8px;border-radius:4px;background:rgba(90,120,88,.12);overflow:hidden;margin:0 auto 12px;max-width:320px}
.timer-progress-bar{height:100%;width:0;border-radius:4px;background:linear-gradient(90deg,#66c295,#b5d9ab);transition:width 1s linear}
.timer-actions{display:flex;gap:10px;justify-content:center}
.timer-result{margin-top:10px;font-size:13px;color:var(--accent2);line-height:1.7}
.timer-result b{color:#66c295}
@media (max-width:480px){.timer-btns{grid-template-columns:repeat(2,1fr)}}

/* ========== 分享广场 ========== */
.plaza-card{border:1px solid rgba(76,158,107,.25)}
.plaza-quota{font-size:12px;color:var(--muted);font-weight:400;margin-left:auto}
.plaza-composer{margin-bottom:14px}
.plaza-feed{display:flex;flex-direction:column;gap:12px}
.plaza-post{
  padding:14px 16px;border-radius:12px;
  background:rgba(76,158,107,.05);border:1px solid rgba(76,158,107,.16);
}
.plaza-post-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.plaza-avatar{
  width:28px;height:28px;border-radius:50%;flex-shrink:0;
  background:linear-gradient(135deg,#66c295,#b5d9ab);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;
}
.plaza-name{font-size:14px;font-weight:600}
.plaza-time{font-size:12px;color:var(--muted);margin-left:auto}
.plaza-del{
  background:none;border:none;color:var(--muted);font-size:13px;cursor:pointer;
  padding:2px 6px;border-radius:6px;font-family:inherit;
}
.plaza-del:hover{color:#c05a4e;background:rgba(224,96,126,.1)}
.plaza-content{font-size:14px;line-height:1.8;word-break:break-word;white-space:pre-wrap}
.plaza-actions{display:flex;gap:16px;margin-top:10px}
.plaza-like,.plaza-cmt-toggle{
  background:none;border:none;font-size:13px;color:var(--muted);cursor:pointer;
  padding:4px 8px;border-radius:8px;transition:.2s;font-family:inherit;display:inline-flex;align-items:center;gap:4px;
}
.plaza-like:hover,.plaza-cmt-toggle:hover{background:rgba(76,158,107,.12);color:var(--text)}
.plaza-like.liked{color:#c05a4e}
.plaza-comments{margin-top:10px;padding-top:10px;border-top:1px dashed rgba(90,120,88,.15)}
.plaza-comment{font-size:13px;line-height:1.7;margin-bottom:6px}
.plaza-comment-name{font-weight:600;color:var(--accent2)}
.plaza-comment-meta{font-size:11px;color:var(--muted);margin-left:6px}
.plaza-comment-meta a{color:var(--muted)}
.plaza-comment-meta a:hover{color:#c05a4e}
.plaza-comment-input{display:flex;gap:8px;margin-top:8px}
.plaza-comment-input .input{flex:1;padding:8px 12px;font-size:14px;min-height:0}

/* ========== 冥想空间（全屏） ========== */
.med-room{
  position:fixed;inset:0;z-index:600;display:none;overflow-y:auto;
  background:
    radial-gradient(ellipse at 50% 120%,rgba(102,194,149,.55),transparent 60%),
    radial-gradient(ellipse at 20% -10%,rgba(124,194,145,.35),transparent 55%),
    linear-gradient(180deg,#0d2818 0%,#123a22 45%,#1a4a2c 100%);
  color:#eaf5ea;
}
.med-room.show{display:block;animation:fadeIn .25s ease}
.med-room-inner{max-width:560px;margin:0 auto;padding:76px 20px 60px;position:relative;z-index:2;text-align:center}
.med-room-back{
  position:absolute;top:18px;right:16px;z-index:10;
  padding:8px 16px;border-radius:999px;font-size:13px;font-weight:600;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);
  color:#eaf5ea;cursor:pointer;font-family:inherit;transition:.2s;
}
.med-room-back:hover{background:rgba(255,255,255,.22)}
.med-room-title{font-size:26px;font-weight:800;letter-spacing:2px;margin-bottom:10px;text-shadow:0 2px 12px rgba(0,0,0,.4)}
.med-room-sub{font-size:14px;color:rgba(234,245,234,.75);margin-bottom:28px;line-height:1.8}
.med-room-times{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}
.med-time-btn{
  width:96px;height:96px;border-radius:20px;cursor:pointer;font-family:inherit;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  background:rgba(255,255,255,.1);border:2px solid rgba(255,255,255,.22);
  color:#eaf5ea;transition:.2s;backdrop-filter:blur(6px);
}
.med-time-btn b{font-size:26px;line-height:1}
.med-time-btn span{font-size:12px;color:rgba(234,245,234,.7)}
.med-time-btn:hover{transform:translateY(-4px) scale(1.04);background:rgba(124,194,145,.28);border-color:rgba(178,230,190,.6);box-shadow:0 10px 30px rgba(0,0,0,.35)}
.med-room-tip{margin-top:22px;font-size:12px;color:rgba(234,245,234,.55)}
.med-room-clock{font-size:72px;font-weight:800;letter-spacing:4px;font-variant-numeric:tabular-nums;text-shadow:0 4px 24px rgba(0,0,0,.5);margin:30px 0 18px}
.med-room-progress{height:8px;border-radius:4px;background:rgba(255,255,255,.15);overflow:hidden;max-width:360px;margin:0 auto 22px}
.med-room-progress-bar{height:100%;border-radius:4px;background:linear-gradient(90deg,#9fe0bd,#b2e6be);transition:width 1s linear}
.med-room-actions{display:flex;gap:12px;justify-content:center}
.med-room-actions .btn-outline{border-color:rgba(255,255,255,.35);color:#eaf5ea}
.med-room-actions .btn-outline:hover{background:rgba(255,255,255,.14)}
.med-room-form{text-align:center}
.med-room-form .field label{color:rgba(234,245,234,.85)}
.med-room-form .textarea,.med-room-form .input{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.22);color:#eaf5ea}
.med-room-form .textarea::placeholder,.med-room-form .input::placeholder{color:rgba(234,245,234,.45)}
.med-room-form .textarea:focus,.med-room-form .input:focus{border-color:#9fe0bd;box-shadow:0 0 0 3px rgba(124,194,145,.25)}
.med-room-form .textarea:disabled{opacity:.5}
.med-room-form .voice-btn{display:inline-flex}

/* 特效层：覆盖全屏、不挡点击 */
.med-fx{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.fx-p{position:absolute;pointer-events:none;will-change:transform,opacity}
.fx-leaves{animation:fxLeaf var(--fx-dur,7s) linear forwards}
@keyframes fxLeaf{
  0%{transform:translateY(-40px) translateX(0) rotate(0deg);opacity:0}
  8%{opacity:.95}
  100%{transform:translateY(105vh) translateX(var(--fx-drift,40px)) rotate(560deg);opacity:.7}
}
.fx-meteor{
  width:90px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,rgba(255,255,255,0),#fff,#b2e6be);
  box-shadow:0 0 8px rgba(178,230,190,.9);
  animation:fxMeteor var(--fx-dur,1.5s) ease-in forwards;
}
@keyframes fxMeteor{
  0%{transform:translate(0,0) rotate(-32deg);opacity:0}
  10%{opacity:1}
  100%{transform:translate(var(--fx-dx,-160px),220px) rotate(-32deg);opacity:0}
}
.fx-sparkle{color:#ffe9a8;text-shadow:0 0 10px rgba(255,233,168,.9);animation:fxSparkle var(--fx-dur,3s) ease-in-out forwards}
@keyframes fxSparkle{
  0%{transform:translate(0,0) scale(.4);opacity:0}
  30%{opacity:1;transform:translate(var(--fx-drift,14px),-24px) scale(1.1)}
  100%{transform:translate(calc(var(--fx-drift,14px) * 2),-70px) scale(.6);opacity:0}
}
.fx-flame{animation:fxFlame var(--fx-dur,2s) ease-out forwards}
@keyframes fxFlame{
  0%{transform:translateY(0) scale(.7);opacity:.95}
  100%{transform:translateY(-140px) translateX(var(--fx-drift,10px)) scale(1.15);opacity:0}
}
.fx-fire-base{position:absolute;bottom:34px;left:50%;transform:translateX(-50%);font-size:44px;filter:drop-shadow(0 0 18px rgba(255,140,60,.6))}
.fx-rainbow{
  position:absolute;top:-46vh;left:50%;transform:translateX(-50%);
  width:150vmax;height:150vmax;border-radius:50%;
  background:radial-gradient(circle,transparent 55%,
    rgba(255,120,120,.28) 56%,rgba(255,200,90,.26) 61%,rgba(255,235,130,.24) 66%,
    rgba(140,230,160,.24) 71%,rgba(130,190,255,.24) 76%,rgba(190,140,240,.22) 81%,transparent 84%);
  animation:fxRainbow 8s ease-in-out infinite alternate;
}
.fx-glow{position:absolute;inset:0;background:radial-gradient(ellipse at 50% 0%,rgba(255,255,255,.1),transparent 55%)}
@keyframes fxRainbow{from{opacity:.5;transform:translateX(-50%) scale(.96)}to{opacity:.95;transform:translateX(-50%) scale(1.03)}}
@media (max-width:480px){
  .med-room-clock{font-size:56px}
  .med-time-btn{width:82px;height:82px}
  .med-room-inner{padding:66px 14px 50px}
}

/* ========== 登录页公开动态 ========== */
.login-plaza{
  margin-top:20px;padding:14px 16px;border-radius:12px;
  background:rgba(76,158,107,.07);border:1px solid rgba(76,158,107,.18);
}
.login-plaza-title{font-size:13px;font-weight:700;color:var(--accent);margin-bottom:10px;letter-spacing:.5px}
.login-plaza-item{
  display:flex;align-items:baseline;gap:8px;font-size:13px;line-height:1.7;
  padding:6px 0;border-top:1px dashed rgba(90,120,88,.14);
}
.login-plaza-item:first-of-type{border-top:none}
.login-plaza-name{font-weight:600;color:var(--accent2);white-space:nowrap}
.login-plaza-text{color:var(--text);flex:1;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.login-plaza-time{font-size:11px;color:var(--muted);white-space:nowrap}

/* ========== 秘密花园氛围特效层 ========== */
.garden-fx{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.gfx{position:absolute;pointer-events:none;will-change:transform,opacity}
.gfx-firefly{
  width:6px;height:6px;border-radius:50%;
  background:radial-gradient(circle,#fff8c9 0%,rgba(255,238,150,.9) 35%,rgba(255,238,150,0) 70%);
  box-shadow:0 0 12px 4px rgba(255,238,150,.45);
  animation:gfxFirefly var(--g-dur,14s) ease-in-out var(--g-delay,0s) infinite alternate;
}
@keyframes gfxFirefly{
  0%{transform:translate(0,0);opacity:.15}
  25%{opacity:.9}
  50%{transform:translate(var(--g-dx,60px),var(--g-dy,-40px));opacity:.3}
  75%{opacity:.85}
  100%{transform:translate(0,0);opacity:.2}
}
.gfx-petal{
  top:-40px;opacity:.55;
  animation:gfxPetal var(--g-dur,16s) linear var(--g-delay,0s) infinite;
}
@keyframes gfxPetal{
  0%{transform:translateY(-40px) translateX(0) rotate(0deg);opacity:0}
  6%{opacity:.55}
  90%{opacity:.45}
  100%{transform:translateY(105vh) translateX(var(--g-drift,50px)) rotate(480deg);opacity:0}
}
.gfx-bokeh{
  border-radius:50%;
  background:radial-gradient(circle,rgba(178,230,190,.16) 0%,rgba(178,230,190,0) 65%);
  animation:gfxBokeh var(--g-dur,20s) ease-in-out var(--g-delay,0s) infinite alternate;
}
@keyframes gfxBokeh{
  from{transform:translate(0,0) scale(.9);opacity:.5}
  to{transform:translate(var(--g-dx,40px),var(--g-dy,30px)) scale(1.1);opacity:.9}
}
/* 特效层不挡任何内容布局（navbar 保持更高层级，待点评/设备面板不被遮） */
.login-wrap,.container,.site-footer{position:relative;z-index:2}
.navbar{position:sticky;z-index:100}
.ticker-bar{position:fixed}

/* 待点评/设备面板贴住导航右上角，始终不被页面内容遮挡 */
.device-panel{position:fixed;top:64px;right:20px;z-index:150}
@media (max-width:480px){
  .gfx-bokeh{display:none}
  .gfx-petal{opacity:.4}
}

/* ========== 顶部通知滚动条 ========== */
.notice-bar{
  margin-bottom:14px;border-radius:12px;overflow:hidden;
  background:rgba(201,165,63,.1);border:1px solid rgba(201,165,63,.3);
  /* 顶部悬浮：固定在页面顶端居中胶囊，不随内容滚动 */
  position:fixed;top:10px;left:50%;transform:translateX(-50%);
  width:min(680px,calc(100vw - 24px));z-index:160;
  background:rgba(253,246,224,.96);backdrop-filter:blur(8px);
  box-shadow:0 6px 24px rgba(168,132,42,.28);
}
.notice-bar.hidden{display:none}
.notice-bar-top{
  position:sticky;top:0;z-index:99;margin:0;border-radius:0;
  border-left:none;border-right:none;border-top:none;
  background:#fdf6e0;
}
.notice-bar-inner{
  display:flex;align-items:center;gap:10px;padding:9px 14px;cursor:pointer;
}
.notice-icon{font-size:15px;flex-shrink:0}
.notice-marquee{flex:1;overflow:hidden;min-width:0}
.notice-marquee-track{
  display:inline-flex;align-items:center;white-space:nowrap;width:max-content;
  animation:noticeScroll 30s linear infinite;
}
.notice-bar:hover .notice-marquee-track{animation-play-state:paused}
@keyframes noticeScroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.notice-text{font-size:13px;color:#a8842a;font-weight:600}
.notice-gap{display:inline-block;width:60px}
.notice-more{font-size:12px;color:var(--gold);white-space:nowrap;flex-shrink:0}

/* 通知详情 */
.notice-detail-item{
  padding:14px;border-radius:12px;margin-bottom:12px;
  background:rgba(201,165,63,.06);border:1px solid rgba(201,165,63,.2);
}
.notice-detail-content{font-size:14px;line-height:1.9;word-break:break-word;white-space:pre-wrap}
.notice-detail-meta{
  display:flex;align-items:center;margin-top:10px;
  font-size:12px;color:var(--muted);
}

/* 管理员通知管理 */
.notice-admin-item{
  padding:14px;border-radius:12px;margin-bottom:12px;
  background:rgba(201,165,63,.05);border:1px solid rgba(201,165,63,.18);
}
.notice-admin-content{font-size:14px;line-height:1.8;word-break:break-word;white-space:pre-wrap}
.notice-admin-meta{
  display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap;
  font-size:12px;color:var(--muted);
}

/* ========== 全屏点评页（层级最高，压过一切弹窗） ========== */
.comment-room{
  position:fixed;inset:0;z-index:700;display:none;overflow-y:auto;
  background:
    radial-gradient(ellipse at 12% 0%,rgba(127,214,168,.3),transparent 55%),
    radial-gradient(ellipse at 88% 100%,rgba(197,174,240,.24),transparent 55%),
    var(--bg);
  color:var(--text);
}
.comment-room.show{display:block;animation:fadeIn .2s ease}
.comment-room-inner{max-width:680px;margin:0 auto;padding:0 16px 60px}
.comment-room-topbar{
  position:sticky;top:0;z-index:10;
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:14px 4px;margin-bottom:14px;
  background:var(--bg);
  border-bottom:1px solid rgba(90,130,105,.16);
}
.comment-room-title{font-size:16px;font-weight:700;line-height:1.4;min-width:0}
.comment-room-back{
  flex-shrink:0;padding:9px 18px;border-radius:999px;font-size:13px;font-weight:600;
  background:var(--card2);border:1px solid rgba(90,120,88,.2);
  color:var(--text);cursor:pointer;font-family:inherit;transition:.2s;
}
.comment-room-back:hover{background:var(--card);box-shadow:0 4px 14px rgba(120,170,150,.25)}
.comment-room-body{padding-top:4px}
.comment-room .voice-btn{display:inline-flex}
@media (max-width:480px){
  .comment-room-inner{padding:0 10px 50px}
  .comment-room-title{font-size:14px}
}

/* 静态小字通知栏：已读后滚动条消失，此栏保留 */
.notice-static{
  margin-bottom:12px;padding:8px 14px;border-radius:10px;
  background:rgba(201,151,31,.07);border:1px solid rgba(201,151,31,.18);
  font-size:12px;color:#a8842a;line-height:1.7;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.notice-static.hidden{display:none}
.notice-static-inner{display:flex;align-items:center;gap:8px;cursor:pointer}
.notice-static-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.notice-static-more{font-size:11px;color:var(--gold);white-space:nowrap;flex-shrink:0;font-weight:600}
.notice-static:active{filter:brightness(.97)}

/* ========== 主题切换按钮 ========== */
.theme-toggle{
  position:fixed;bottom:64px;right:16px;z-index:180;
  width:46px;height:46px;border-radius:50%;border:none;cursor:pointer;
  background:var(--card);box-shadow:var(--shadow);
  font-size:20px;display:flex;align-items:center;justify-content:center;
  transition:transform .25s,box-shadow .25s;
  border:1px solid rgba(120,100,70,.12);
}
[data-theme="dark"] .theme-toggle{border-color:rgba(255,255,255,.15)}
.theme-toggle:hover{transform:scale(1.12) rotate(15deg)}
.theme-toggle:active{transform:scale(.95)}

/* ========== 动态效果 ========== */
/* 卡片入场浮动 */
@keyframes cardFloatIn{
  from{opacity:0;transform:translateY(14px)}
  to{opacity:1;transform:translateY(0)}
}
.card{animation:cardFloatIn .45s ease both}
.card:nth-of-type(2){animation-delay:.06s}
.card:nth-of-type(3){animation-delay:.12s}
.card:nth-of-type(4){animation-delay:.18s}

/* 卡片 hover 轻微上浮 */
.card{transition:transform .25s ease,box-shadow .25s ease}
.card:hover{transform:translateY(-2px);box-shadow:0 12px 32px rgba(120,100,70,.14)}
[data-theme="dark"] .card:hover{box-shadow:0 12px 36px rgba(0,0,0,.5)}

/* 夜晚星星闪烁 */
@keyframes starTwinkle{0%,100%{opacity:.35}50%{opacity:1}}
[data-theme="dark"] body::after{
  content:'';position:fixed;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(1.5px 1.5px at 20% 25%,rgba(255,255,255,.95),transparent 100%),
    radial-gradient(1px 1px at 55% 15%,rgba(255,255,255,.8),transparent 100%),
    radial-gradient(1.5px 1.5px at 82% 45%,rgba(255,255,255,.9),transparent 100%),
    radial-gradient(1px 1px at 40% 55%,rgba(255,255,255,.7),transparent 100%),
    radial-gradient(1.2px 1.2px at 92% 70%,rgba(255,255,255,.75),transparent 100%);
  animation:starTwinkle 3.5s ease-in-out infinite;
}

/* 夜晚模式下花园特效减弱，突出星空 */
[data-theme="dark"] .gfx-bokeh{display:none}
[data-theme="dark"] .gfx-petal{opacity:.25}

/* 页面切换平滑 */
.navbar,.card,.stat-card,.site-footer,.ticker-bar,.input,.textarea{
  transition:background .35s ease,border-color .35s ease,color .35s ease;
}

/* ========== 底部悬浮打卡滚动条 ========== */
.ticker-float{
  position:fixed;bottom:14px;left:50%;transform:translateX(-50%);
  z-index:95;display:flex;align-items:center;gap:8px;max-width:92vw;
}
.ticker-float.hidden{display:none}
.ticker-float-inner{
  background:var(--card);border:1px solid rgba(120,100,70,.14);
  border-radius:999px;box-shadow:var(--shadow);
  padding:9px 18px;overflow:hidden;height:38px;
  display:flex;align-items:center;max-width:78vw;
}
[data-theme="dark"] .ticker-float-inner{border-color:rgba(255,255,255,.14)}
.ticker-float-inner .ticker-track{
  display:inline-flex;white-space:nowrap;width:max-content;
  animation:tick 30s linear infinite;font-size:13px;
}
.ticker-float-inner:hover .ticker-track{animation-play-state:paused}
@media (max-width:480px){
  .ticker-float{bottom:10px;max-width:96vw}
  .ticker-float-inner{max-width:74vw;padding:8px 14px}
}

/* ========== 穿越星星和云朵过渡动画（跳转 mmkl 冥想空间） ========== */
.warp-room{
  position:fixed;inset:0;z-index:900;display:none;overflow:hidden;
  background:radial-gradient(ellipse at 50% 55%, #2c3560 0%, #171c38 55%, #0b0e22 100%);
}
.warp-room.show{display:block;animation:warpFadeIn .3s ease}
@keyframes warpFadeIn{from{opacity:0}to{opacity:1}}
.warp-star{
  position:absolute;border-radius:50%;opacity:0;
  animation:starWarp 1.5s ease-in forwards;
}
@keyframes starWarp{
  0%{transform:translate(-50%,-50%) scale(.3);opacity:0}
  15%{opacity:1}
  100%{transform:translate(calc(-50% + var(--dx)),calc(-50% + var(--dy))) scale(2.4);opacity:0}
}
.warp-cloud{
  position:absolute;font-size:84px;opacity:0;filter:blur(1px);
  animation:cloudFly 1.5s ease-in forwards;
  pointer-events:none;
}
@keyframes cloudFly{
  0%{transform:translateX(0) scale(.6);opacity:0}
  25%{opacity:.85}
  100%{transform:translateX(120vw) scale(1.5);opacity:0}
}
.warp-center{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:5;
}
.warp-glow{
  position:absolute;width:220px;height:220px;border-radius:50%;
  background:radial-gradient(circle, rgba(255,236,170,.5), rgba(255,236,170,0) 70%);
  animation:warpGlow 1.4s ease-in forwards;
}
@keyframes warpGlow{
  0%{transform:scale(.3);opacity:0}
  40%{opacity:1}
  100%{transform:scale(3.2);opacity:0}
}
.warp-text{
  position:relative;font-size:16px;color:#fff3c9;letter-spacing:4px;font-weight:700;
  text-shadow:0 0 18px rgba(255,236,170,.8);
  animation:warpText 1.4s ease forwards;
}
@keyframes warpText{
  0%{opacity:0;transform:scale(.8)}
  30%{opacity:1;transform:scale(1)}
  80%{opacity:1}
  100%{opacity:0;transform:scale(1.25)}
}

/* ========== 冥想空间进入特效 ========== */
.med-enter-fx{
  position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:18px;z-index:5;
}
.med-enter-ring{
  position:absolute;width:120px;height:120px;border-radius:50%;
  border:2px solid rgba(178,230,190,.55);
  animation:medRing 1.6s ease-out infinite;
}
.med-enter-ring.r2{animation-delay:.35s;border-color:rgba(124,194,145,.4)}
.med-enter-ring.r3{animation-delay:.7s;border-color:rgba(178,230,190,.25)}
@keyframes medRing{
  0%{transform:scale(.4);opacity:0}
  30%{opacity:.9}
  100%{transform:scale(2.6);opacity:0}
}
.med-enter-icon{
  font-size:64px;line-height:1;
  animation:medIconIn .9s cubic-bezier(.2,1.4,.4,1) both;
  filter:drop-shadow(0 0 24px rgba(124,194,145,.6));
}
@keyframes medIconIn{
  0%{transform:scale(.2) translateY(30px);opacity:0}
  60%{transform:scale(1.15) translateY(-4px);opacity:1}
  100%{transform:scale(1) translateY(0)}
}
.med-enter-text{
  font-size:14px;color:rgba(234,245,234,.75);letter-spacing:3px;
  animation:medTextIn .8s ease .3s both;
}
@keyframes medTextIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* ========== 冥想时间按钮视觉优化（9档网格） ========== */
.med-room-times{
  display:grid;grid-template-columns:repeat(3,1fr);gap:12px;
  max-width:360px;margin:0 auto;
}
.med-time-btn{
  width:auto;height:88px;border-radius:18px;cursor:pointer;font-family:inherit;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  background:rgba(255,255,255,.08);border:2px solid rgba(255,255,255,.18);
  color:#eaf5ea;transition:all .25s cubic-bezier(.2,1.2,.4,1);backdrop-filter:blur(6px);
  position:relative;overflow:hidden;
}
.med-time-btn::before{
  content:'';position:absolute;inset:0;
  background:radial-gradient(circle at 50% 0%,rgba(178,230,190,.18),transparent 70%);
  opacity:0;transition:opacity .25s;
}
.med-time-btn b{font-size:24px;line-height:1;position:relative}
.med-time-btn span{font-size:11px;color:rgba(234,245,234,.65);position:relative}
.med-time-btn:hover{
  transform:translateY(-4px) scale(1.05);
  background:rgba(124,194,145,.24);border-color:rgba(178,230,190,.55);
  box-shadow:0 10px 28px rgba(0,0,0,.35),0 0 20px rgba(124,194,145,.25);
}
.med-time-btn:hover::before{opacity:1}
.med-time-btn:active{transform:scale(.96)}
@media (max-width:480px){
  .med-room-times{gap:10px;max-width:320px}
  .med-time-btn{height:76px}
  .med-time-btn b{font-size:20px}
}

/* ========== 夜晚模式深化：消除刺眼白框 ========== */
[data-theme="dark"] .card,
[data-theme="dark"] .stat-card,
[data-theme="dark"] .login-box{
  background:#252b4e;
  border-color:rgba(255,255,255,.09);
  box-shadow:0 8px 28px rgba(0,0,0,.45);
}
[data-theme="dark"] .card:hover{box-shadow:0 12px 36px rgba(0,0,0,.55)}
[data-theme="dark"] .status-banner.todo{background:rgba(224,189,94,.1);border-color:rgba(224,189,94,.22)}
[data-theme="dark"] .status-banner.done{background:rgba(94,196,149,.1);border-color:rgba(94,196,149,.22)}
[data-theme="dark"] .field label{color:var(--muted)}
[data-theme="dark"] .modal{background:#252b4e;border-color:rgba(255,255,255,.1);color:var(--text)}
[data-theme="dark"] .day-detail{background:#252b4e;color:var(--text)}
[data-theme="dark"] .plaza-post{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.1)}
[data-theme="dark"] .plaza-avatar{background:linear-gradient(135deg,#3d9e72,#5ec495)}
[data-theme="dark"] .notice-detail-item,
[data-theme="dark"] .notice-admin-item{background:rgba(227,189,94,.07);border-color:rgba(227,189,94,.2)}
[data-theme="dark"] .stars-card,
[data-theme="dark"] .my-stars-card{background:#252b4e;border-color:rgba(255,255,255,.09)}
[data-theme="dark"] .device-panel{background:#252b4e;border-color:rgba(255,255,255,.12);color:var(--text)}
[data-theme="dark"] .ticker-float-inner{background:#252b4e;border-color:rgba(255,255,255,.12);color:var(--text)}
[data-theme="dark"] .theme-toggle{background:#2e3560;border-color:rgba(255,255,255,.15)}
[data-theme="dark"] .ranking-table th{background:#2e3560;color:var(--muted)}
[data-theme="dark"] .ranking-table td{border-color:rgba(255,255,255,.08)}
[data-theme="dark"] .admin-nav button{background:#2e3560;color:var(--muted);border-color:rgba(255,255,255,.1)}
[data-theme="dark"] .admin-nav button.active{background:var(--grad);color:#fff}
[data-theme="dark"] .tab-toggle button{background:#2e3560;color:var(--muted)}
[data-theme="dark"] .tab-toggle button.active{background:var(--grad);color:#fff}
[data-theme="dark"] .comment-room-body .tag-row .tag{border-color:rgba(255,255,255,.15)}
[data-theme="dark"] .mk-cell{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.08)}
[data-theme="dark"] .login-plaza{background:rgba(94,196,149,.08);border-color:rgba(94,196,149,.2)}
[data-theme="dark"] .timer-btn{background:#2e3560;color:var(--text)}
[data-theme="dark"] .timer-panel{background:rgba(94,196,149,.08);border-color:rgba(94,196,149,.2)}
[data-theme="dark"] .user-chip{color:var(--text)}
[data-theme="dark"] .btn-ghost{color:var(--muted)}
[data-theme="dark"] .btn-ghost:hover{color:var(--text);background:rgba(255,255,255,.08)}
[data-theme="dark"] .greeting{color:var(--text)}
[data-theme="dark"] .section-title{color:var(--text)}
[data-theme="dark"] .daily-quote{background:#252b4e;border-color:rgba(255,255,255,.09);color:var(--muted)}
[data-theme="dark"] .qr-modal{background:#252b4e}
[data-theme="dark"] .toast{background:#2e3560;color:var(--text)}
[data-theme="dark"] .voice-btn{background:#2e3560;color:#5ec495;border-color:rgba(94,196,149,.4)}
[data-theme="dark"] .plaza-comment-input .input{background:#1f2547}
[data-theme="dark"] .mentor-note{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.1)}
[data-theme="dark"] .checkin-record{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.08)}
[data-theme="dark"] .export-section{background:#252b4e;border-color:rgba(255,255,255,.09)}
[data-theme="dark"] .device-panel-loading{color:var(--muted)}
[data-theme="dark"] .notice-bar{background:rgba(227,189,94,.1);border-color:rgba(227,189,94,.25)}
[data-theme="dark"] .notice-text{color:#e3bd5e}
[data-theme="dark"] .navbar .logo-text{color:var(--text)}
[data-theme="dark"] .wx-notice{background:rgba(94,196,149,.08);border-color:rgba(94,196,149,.2)}

/* 补卡栏输入框加明显描边，匹配打卡窗口色调 */
.card .field .input,.card .field .textarea,.card .field .select{
  border:1.5px solid rgba(76,175,130,.4);
  background:#fff;
}
.card .field .input:focus,.card .field .textarea:focus,.card .field .select:focus{
  border-color:var(--accent);box-shadow:0 0 0 3px rgba(76,175,130,.2);
}
[data-theme="dark"] .card .field .input,
[data-theme="dark"] .card .field .textarea,
[data-theme="dark"] .card .field .select{
  border-color:rgba(255,255,255,.18);background:#1f2547;
}
