/* ========== 全局重置 ========== */
*,*::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:transparent;display:flex;align-items:center;justify-content:center;
  font-size:20px;
}
.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.on-gra{border-color:rgba(251,191,36,.55)}
.mk-main.part-gra{color:#eab308}
.mk-cell.on-med{border-color:rgba(96,165,250,.55)}
.mk-main.part-med{color:#60a5fa}
.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:76px;height:76px;border-radius:0;background:transparent;
  display:flex;align-items:center;justify-content:center;font-size:30px;margin:0 auto 18px;
  
}
.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.orange{background:linear-gradient(135deg,#f0a35c,#e8893c);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.stat-card .num.full-glow{
  background:linear-gradient(135deg,#ffd76e,#f5a623);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
  animation:fullGlow 1.6s ease-in-out infinite;font-size:26px;letter-spacing:2px;
}
@keyframes fullGlow{
  0%,100%{filter:drop-shadow(0 0 4px rgba(245,166,35,.5))}
  50%{filter:drop-shadow(0 0 14px rgba(255,215,110,.95))}
}
.stat-card .num.star{background:var(--grad-star);-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}
.comment-item .c-reply{
  margin-top:8px;padding:8px 10px;border-radius:8px;font-size:13px;line-height:1.6;
  background:rgba(95,143,110,.07);border-left:3px solid rgba(95,143,110,.35);
}
.comment-item .c-reply-time{font-size:11px;color:var(--muted);margin-left:8px}
.comment-item .c-reply-box{display:flex;gap:8px;margin-top:8px;align-items:center}
.comment-item .c-reply-box.hidden{display:none}

/* 列表 */
.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,.3);background:linear-gradient(150deg,rgba(127,184,154,.2),rgba(96,168,150,.06) 55%,rgba(76,158,107,.13)),var(--card)}
[data-theme="dark"] .plaza-card{background:linear-gradient(150deg,rgba(104,196,160,.22),rgba(104,196,160,.06) 55%,rgba(120,180,220,.12)),var(--card)}
[data-theme="pink"] .plaza-card{background:linear-gradient(150deg,rgba(224,135,168,.24),rgba(224,135,168,.07) 55%,rgba(200,120,190,.14)),var(--card)}
[data-theme="wood"] .plaza-card{background:linear-gradient(150deg,rgba(125,143,87,.24),rgba(208,138,75,.1) 55%,rgba(176,110,53,.15)),var(--card)}
.card.plaza-card{margin-top:34px} /* 与上一栏留出更多空隙，增强区分 */
.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}
}

/* 滚动栏翻页按钮：导师/管理员电脑端显示，圆形悬浮，匹配滚动栏风格 */
.ticker-nav{
  flex:0 0 auto;width:38px;height:38px;border-radius:50%;
  border:1px solid rgba(120,100,70,.14);background:var(--card);
  box-shadow:var(--shadow);color:var(--muted);
  font-size:20px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:all .2s ease;padding:0 0 2px;
}
.ticker-nav:hover:not(:disabled){color:var(--accent);border-color:rgba(224,135,168,.45);transform:scale(1.08)}
.ticker-nav:disabled{opacity:.3;cursor:not-allowed}
.ticker-nav.hidden{display:none}
[data-theme="dark"] .ticker-nav{background:#252b4e;border-color:rgba(255,255,255,.12);color:var(--text)}
@media (max-width:768px){ .ticker-nav{display:none !important} }

/* ========== 穿越星星和云朵过渡动画（跳转 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;
}

/* ========== 提问墙（全屏独立界面） ========== */
.qa-room{
  position:fixed;inset:0;z-index:650;display:none;overflow-y:auto;
  background:var(--bg);
}
.qa-room.show{display:block;animation:fadeIn .25s ease}
.qa-topbar{
  position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;
  padding:14px 18px;background:var(--card);border-bottom:1px solid rgba(76,175,130,.15);
  backdrop-filter:blur(10px);box-shadow:0 2px 12px rgba(0,0,0,.06);
}
.qa-back{
  border:none;background:rgba(76,175,130,.12);color:var(--accent2);cursor:pointer;font-family:inherit;
  padding:8px 14px;border-radius:10px;font-size:14px;font-weight:600;transition:all .2s;
}
.qa-back:hover{background:rgba(76,175,130,.22)}
.qa-title{font-size:17px;font-weight:800;letter-spacing:2px}
.qa-body{max-width:640px;margin:0 auto;padding:18px 16px 60px}
.qa-tabs{
  display:flex;gap:0;margin-bottom:12px;border-radius:12px;overflow:hidden;
  border:1.5px solid rgba(76,175,130,.3);background:var(--card);
}
.qa-tab{
  flex:1;padding:10px;border:none;background:transparent;cursor:pointer;font-family:inherit;
  font-size:14px;font-weight:600;color:var(--muted);transition:all .2s;
}
.qa-tab.active{background:linear-gradient(135deg,#4da87b,#6fbf8f);color:#fff}
.qa-ask-card{margin-bottom:16px}
.qa-item{
  background:var(--card);border-radius:16px;padding:16px;margin-bottom:12px;
  border:1.5px solid rgba(76,175,130,.15);box-shadow:0 2px 10px rgba(0,0,0,.04);
  animation:cardFloatIn .4s ease both;
}
.qa-item.answered{border-color:rgba(76,175,130,.35)}
.qa-q-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.qa-asker{font-size:13px;font-weight:700;color:var(--accent2)}
.qa-time{font-size:11px;color:var(--muted)}
.qa-q-content{font-size:14px;line-height:1.8;word-break:break-word;white-space:pre-wrap}
.qa-answer{
  margin-top:12px;padding:12px;border-radius:12px;
  background:rgba(76,175,130,.08);border-left:3px solid #4da87b;
}
.qa-a-head{font-size:12px;font-weight:700;color:#4da87b;margin-bottom:6px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.qa-a-content{font-size:13px;line-height:1.8;word-break:break-word;white-space:pre-wrap}
.qa-pending{margin-top:10px;font-size:12px;color:var(--muted)}
.qa-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:10px}
.qa-answer-box{margin-top:10px}
.qa-empty{text-align:center;padding:40px 20px;color:var(--muted);font-size:14px}
[data-theme="dark"] .qa-item{background:#252b4e;border-color:rgba(139,127,212,.25)}
[data-theme="dark"] .qa-topbar{background:#1b2140;border-color:rgba(139,127,212,.2)}
[data-theme="dark"] .qa-answer{background:rgba(139,127,212,.12);border-left-color:#8b7fd4}
[data-theme="dark"] .qa-a-head{color:#b3a8e8}
[data-theme="dark"] .qa-back{background:rgba(139,127,212,.15);color:#b3a8e8}
[data-theme="dark"] .qa-tabs{background:#252b4e;border-color:rgba(139,127,212,.3)}
[data-theme="dark"] .qa-tab.active{background:linear-gradient(135deg,#6b5fc0,#8b7fd4)}

/* 广场卡片闪光提示（右上角「分享」点击定位时） */
.plaza-flash{animation:plazaFlash 1.6s ease}
@keyframes plazaFlash{
  0%,100%{box-shadow:0 2px 10px rgba(0,0,0,.04)}
  20%,60%{box-shadow:0 0 0 4px rgba(77,168,123,.45),0 8px 30px rgba(77,168,123,.35)}
}

/* 可点击统计卡 + 名单弹窗行 */
.stat-card.clickable{cursor:pointer;transition:transform .18s,box-shadow .18s}
.stat-card.clickable:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(0,0,0,.1)}
.stat-list-row{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:11px 14px;border-radius:10px;margin-bottom:8px;
  background:rgba(76,175,130,.06);border:1px solid rgba(76,175,130,.15);
}
.stat-list-name{font-size:14px;font-weight:700}
.stat-list-sub{font-size:12px;color:var(--accent2)}
.stat-list-sub.muted{color:var(--muted)}
[data-theme="dark"] .stat-list-row{background:rgba(139,127,212,.08);border-color:rgba(139,127,212,.2)}
[data-theme="dark"] .stat-list-sub{color:#b3a8e8}

/* 分享广场完整页：底部固定分享输入栏 */
.plaza-page-composer{
  margin-top:18px;
  background:var(--card);border:1px solid rgba(76,175,130,.2);
  padding:14px 16px;
  box-shadow:0 4px 18px rgba(0,0,0,.06);border-radius:16px;
}
[data-theme="dark"] .plaza-page-composer{background:#1b2140;border-color:rgba(139,127,212,.25)}

/* ==========================================================
   视觉升级 v57：高级感·神秘感
   白天=春日暖阳（落叶飘零+微风光线） 夜晚=深邃星空（星闪+流星+银河光晕）
   ========================================================== */

/* ---------- 白天：春日微风背景（暖奶油渐变 + 柔和光晕流动） ---------- */
body{
  background:
    radial-gradient(1200px 600px at 85% -10%, rgba(255,214,170,.35), transparent 60%),
    radial-gradient(900px 500px at -10% 30%, rgba(178,224,190,.3), transparent 60%),
    radial-gradient(700px 700px at 60% 110%, rgba(255,236,200,.4), transparent 60%),
    var(--bg);
  background-attachment:fixed;
}
/* 微风拂过的光线（白天） */
body::before{
  content:'';position:fixed;inset:-20%;z-index:0;pointer-events:none;
  background:
    linear-gradient(115deg, transparent 40%, rgba(255,255,255,.35) 48%, transparent 56%),
    linear-gradient(115deg, transparent 60%, rgba(255,244,214,.3) 68%, transparent 76%);
  background-size:280% 280%;
  animation:breeze 16s ease-in-out infinite;
}
@keyframes breeze{
  0%{background-position:120% 0, 220% 0}
  100%{background-position:-80% 0, -120% 0}
}
/* 夜晚：隐藏微风光线，用星空层 */
[data-theme="dark"] body::before{display:none}

/* ---------- 夜晚：深邃星空背景（多层星闪 + 银河光带） ---------- */
[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%),
    radial-gradient(1000px 500px at 70% -5%, rgba(90,110,220,.22), transparent 60%),
    radial-gradient(800px 400px at 15% 100%, rgba(60,80,180,.18), transparent 60%),
    linear-gradient(180deg,#141833 0%,#1b2140 45%,#232a52 75%,#1a1e3c 100%);
  background-attachment:fixed;
}

}

/* ---------- 卡片：玻璃拟态 + 细腻描边 + 悬浮微光 ---------- */
.card{
  position:relative;
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  box-shadow:var(--shadow), inset 0 1px 0 rgba(255,255,255,.65);
  border:1px solid rgba(120,150,125,.18);
  transition:box-shadow .3s ease, transform .3s ease;
}
.card:hover{box-shadow:0 12px 34px rgba(120,100,70,.16), inset 0 1px 0 rgba(255,255,255,.7)}
[data-theme="dark"] .card{
  background:rgba(38,44,82,.72);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border-color:rgba(160,170,255,.14);
  box-shadow:0 10px 30px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.06);
}
[data-theme="dark"] .card:hover{box-shadow:0 14px 38px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.08)}

/* ---------- 输入栏：更明显（加厚描边+底色对比+聚焦光环） ---------- */
.input,.textarea,.select{
  background:#fffdf7;border:1.5px solid rgba(76,175,130,.45);
  box-shadow:inset 0 1px 3px rgba(90,130,105,.08);
}
.card .field .input,.card .field .textarea,.card .field .select{
  border:1.5px solid rgba(76,175,130,.55);
}
.input:focus,.textarea:focus,.select:focus{
  border-color:var(--accent);background:#ffffff;
  box-shadow:0 0 0 4px rgba(76,175,130,.16), inset 0 1px 3px rgba(90,130,105,.06);
}
.input::placeholder,.textarea::placeholder{color:#a8b8a2}
[data-theme="dark"] .input,[data-theme="dark"] .textarea,[data-theme="dark"] .select{
  background:#1c2246;border:1.5px solid rgba(139,160,255,.4);color:#eef0ff;
  box-shadow:inset 0 1px 3px rgba(0,0,0,.3);
}
[data-theme="dark"] .input:focus,[data-theme="dark"] .textarea:focus,[data-theme="dark"] .select:focus{
  border-color:#8b9fe8;background:#212848;
  box-shadow:0 0 0 4px rgba(139,159,232,.2), inset 0 1px 3px rgba(0,0,0,.3);
}
[data-theme="dark"] .input::placeholder,[data-theme="dark"] .textarea::placeholder{color:#7a81ad}

/* ---------- 查看文字栏（已打卡横幅/点评框/问答卡）：与背景区分更明确 ---------- */
.status-banner{
  backdrop-filter:blur(4px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5), 0 2px 8px rgba(120,100,70,.06);
}
.status-banner.done{background:rgba(94,196,150,.14);border:1.5px solid rgba(76,175,130,.35)}
.status-banner.todo{background:rgba(236,159,92,.14);border:1.5px solid rgba(236,159,92,.38)}
.status-banner.locked{background:rgba(139,143,165,.12);border:1.5px solid rgba(139,143,165,.3)}
[data-theme="dark"] .status-banner.done{background:rgba(94,196,150,.12);border-color:rgba(94,196,150,.35)}
[data-theme="dark"] .status-banner.todo{background:rgba(240,180,126,.1);border-color:rgba(240,180,126,.35)}
.comment-box{
  background:rgba(255,251,240,.7);border:1.5px solid rgba(201,151,31,.28);
  border-radius:14px;padding:14px;margin-top:14px;
}
[data-theme="dark"] .comment-box{background:rgba(20,24,51,.6);border-color:rgba(227,189,94,.3)}
.qa-item{
  backdrop-filter:blur(6px);
  box-shadow:0 4px 16px rgba(120,100,70,.08), inset 0 1px 0 rgba(255,255,255,.5);
}
.plaza-post{
  background:rgba(255,253,247,.75);border:1.5px solid rgba(120,150,125,.16);
  border-radius:14px;padding:14px;margin-bottom:12px;
  box-shadow:0 3px 12px rgba(120,100,70,.06);
}
[data-theme="dark"] .plaza-post{background:rgba(34,40,76,.75);border-color:rgba(160,170,255,.14)}

/* ---------- 标题与分割线：更精致 ---------- */
.section-title .dot{box-shadow:0 0 8px rgba(76,175,130,.5)}
[data-theme="dark"] .section-title .dot{box-shadow:0 0 10px rgba(139,160,255,.6)}

/* ---------- 导航栏：玻璃拟态 ---------- */
.navbar{
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  background:rgba(255,255,255,.82);
}
[data-theme="dark"] .navbar{background:rgba(27,33,64,.85)}

/* ---------- 按钮：细腻高光 ---------- */
.btn-primary,.btn-success,.btn-mmkl,.btn-wechat{
  box-shadow:0 6px 20px rgba(76,175,130,.3), inset 0 1px 0 rgba(255,255,255,.3);
}
.btn-mmkl{box-shadow:0 6px 20px rgba(232,155,92,.4), inset 0 1px 0 rgba(255,255,255,.35)}

/* ---------- 白天：落叶春风特效增强（落叶更柔和、带旋转摇摆） ---------- */
.gfx-petal{animation:petalFall var(--g-dur,14s) linear var(--g-delay,0s) infinite}
@keyframes petalFall{
  0%{transform:translate(0,-5vh) rotate(0deg);opacity:0}
  8%{opacity:.85}
  50%{transform:translate(var(--g-drift,40px),48vh) rotate(200deg)}
  92%{opacity:.7}
  100%{transform:translate(calc(var(--g-drift,40px) * .4),102vh) rotate(380deg);opacity:0}
}
/* 夜晚：萤火虫更亮、带光晕 */
[data-theme="dark"] .gfx-firefly{
  box-shadow:0 0 12px 3px rgba(220,240,170,.5);
}
/* 夜晚：花瓣层改为星光微尘（emoji 透明化只留微光） */
[data-theme="dark"] .gfx-petal{opacity:.35;filter:brightness(1.3)}

/* 主题氛围分工：白天落叶（隐藏萤火虫），夜晚萤火虫+星光微尘（隐藏落叶emoji） */
[data-theme="dark"] .gfx-petal{display:none}
.gfx-firefly{display:none}
[data-theme="dark"] .gfx-firefly{display:block}

/* ==========================================================
   四主题系统 v59
   light=春日白天(默认) | dark=星空海边 | pink=莫兰迪粉 | wood=木质丰收
   全部主题带"呼吸感"背景（光晕缓慢涨落）
   ========================================================== */

/* ---------- 全局呼吸感：页面光晕缓慢涨落 ---------- */
@keyframes bgBreathe{
  0%,100%{opacity:.55;transform:scale(1)}
  50%{opacity:.9;transform:scale(1.06)}
}
.breathe-glow{
  position:fixed;inset:0;z-index:0;pointer-events:none;
  animation:bgBreathe 9s ease-in-out infinite;
}

/* ---------- 白天：呼吸光晕（在 body::before 微风之上叠加柔和呼吸） ---------- */
body{animation:none}
.breathe-glow{background:radial-gradient(900px 480px at 50% -8%, rgba(255,226,180,.4), transparent 65%)}

/* ---------- 🌙 星空海边（dark 主题改造） ---------- */
[data-theme="dark"] body{
  background:
    /* 星空 */
    radial-gradient(1.5px 1.5px at 12% 12%,rgba(255,255,255,.9),transparent 100%),
    radial-gradient(1px 1px at 28% 26%,rgba(255,255,255,.7),transparent 100%),
    radial-gradient(2px 2px at 45% 8%,rgba(255,255,255,.85),transparent 100%),
    radial-gradient(1px 1px at 62% 20%,rgba(255,255,255,.6),transparent 100%),
    radial-gradient(1.5px 1.5px at 78% 6%,rgba(255,255,255,.8),transparent 100%),
    radial-gradient(1px 1px at 88% 24%,rgba(255,255,255,.65),transparent 100%),
    /* 海面 */
    linear-gradient(180deg,#101736 0%,#16204a 38%,#1b2d5e 55%,#16385e 68%,#0e4a63 82%,#0a3b52 100%);
  background-attachment:fixed;
}
/* 海面波光（月光碎在海面上，缓慢摇曳） */
[data-theme="dark"] body::before{
  display:block;content:'';position:fixed;left:0;right:0;bottom:0;height:34%;z-index:0;pointer-events:none;
  background:
    repeating-linear-gradient(178deg, rgba(150,200,255,.10) 0 2px, transparent 2px 14px),
    radial-gradient(420px 120px at 50% 0%, rgba(190,220,255,.22), transparent 70%);
  animation:seaShimmer 7s ease-in-out infinite alternate;
}
@keyframes seaShimmer{
  0%{opacity:.55;transform:translateY(0) scaleY(1)}
  100%{opacity:.95;transform:translateY(-6px) scaleY(1.03)}
}

}
/* 海边主题呼吸：月光光晕 */
[data-theme="dark"] .breathe-glow{
  background:radial-gradient(560px 300px at 72% 6%, rgba(215,230,255,.28), transparent 65%);
}

/* ---------- 🌺 莫兰迪粉色系 ---------- */
[data-theme="pink"]{
  --green:#7fb89a;--green-dark:#5ea37f;--orange:#f2b585;--orange-dark:#e8a06a;
  --bg:#fdeef3;--card:#fff8fb;--card2:#fbe4ee;--text:#6b4a5a;--muted:#b08ba0;
  --accent:#e087a8;--accent2:#8fb8d9;--danger:#e8909c;--gold:#e0b36a;
  --purple:#b39ddb;--purple-dark:#9b82c9;
  --radius:20px;--shadow:0 8px 26px rgba(224,135,168,.16);
  --grad:linear-gradient(135deg,#f0a4c0,#f7c6d8);
  --grad2:linear-gradient(135deg,#a8cde8,#c6e0f2);
  --grad3:linear-gradient(135deg,#b39ddb,#cdb9e8);
}
[data-theme="pink"] body{
  background:
    radial-gradient(1000px 520px at 80% -8%, rgba(255,214,231,.55), transparent 60%),
    radial-gradient(800px 460px at 8% 32%, rgba(214,235,248,.5), transparent 60%),
    radial-gradient(720px 500px at 90% 70%, rgba(226,216,244,.4), transparent 60%),
    radial-gradient(700px 600px at 55% 108%, rgba(255,228,238,.55), transparent 60%),
    var(--bg);
  background-attachment:fixed;
}
/* 莫兰迪粉：微风光线改柔粉 */
[data-theme="pink"] body::before{
  background:
    linear-gradient(115deg, transparent 40%, rgba(255,255,255,.4) 48%, transparent 56%),
    linear-gradient(115deg, transparent 60%, rgba(248,228,235,.35) 68%, transparent 76%);
  background-size:280% 280%;
  animation:breeze 18s ease-in-out infinite;
}
[data-theme="pink"] .breathe-glow{
  background:radial-gradient(860px 460px at 50% -6%, rgba(255,205,225,.55), transparent 65%);
}
/* 莫兰迪粉：静态柔和彩虹（地平线上的淡彩虹弧） */
.rainbow-arc{
  position:fixed;left:50%;bottom:-180px;transform:translateX(-50%);
  width:760px;height:380px;border-radius:50%;z-index:0;pointer-events:none;
  background:radial-gradient(closest-side, transparent 62%,
    rgba(247,177,199,.25) 66%, rgba(250,214,165,.23) 70%, rgba(252,244,171,.21) 74%,
    rgba(184,224,200,.21) 78%, rgba(174,216,238,.21) 82%, rgba(207,186,227,.2) 86%, transparent 90%);
  filter:blur(1px);animation:rainbowBreathe 10s ease-in-out infinite;
  display:none;
}
[data-theme="pink"] .rainbow-arc{display:block}
@keyframes rainbowBreathe{
  0%,100%{opacity:.7;transform:translateX(-50%) scale(1)}
  50%{opacity:1;transform:translateX(-50%) scale(1.04)}
}
[data-theme="pink"] .card,[data-theme="pink"] .stat-card,[data-theme="pink"] .login-box{
  border-color:rgba(224,135,168,.25);
  box-shadow:var(--shadow), inset 0 1px 0 rgba(255,255,255,.7);
}
[data-theme="pink"] .navbar{background:rgba(255,248,251,.88);border-color:rgba(224,135,168,.25)}
[data-theme="pink"] .input,[data-theme="pink"] .textarea,[data-theme="pink"] .select{
  background:#fffafd;border:1.5px solid rgba(224,135,168,.5);color:var(--text);
}
[data-theme="pink"] .input:focus,[data-theme="pink"] .textarea:focus,[data-theme="pink"] .select:focus{
  border-color:var(--accent);box-shadow:0 0 0 4px rgba(224,135,168,.22);
}
[data-theme="pink"] .status-banner.done{background:rgba(127,184,154,.14);border-color:rgba(127,184,154,.4)}
[data-theme="pink"] .gfx-petal{display:none} /* 粉色主题叶子特效已由 🌺🏵️ 花朵散落替代 */
[data-theme="pink"] .theme-toggle{background:#fff0f6;border-color:rgba(224,135,168,.35)}

/* ---------- 🌳 托斯卡纳田园风（暖阳·橄榄·陶土） ---------- */
[data-theme="wood"]{
  --green:#7d8f57;--green-dark:#64734a;--orange:#d08a4b;--orange-dark:#b06e35;
  --bg:#f6efe0;--card:#fffdf6;--card2:#f3ead4;--text:#4a4033;--muted:#9c8b6f;
  --accent:#7d8f57;--accent2:#b06e35;--danger:#b5543c;--gold:#c1932f;
  --purple:#9c8465;--purple-dark:#7d6a50;
  --shadow:0 6px 22px rgba(140,110,60,.12);
  --grad:linear-gradient(135deg,#64734a,#7d8f57);
  --grad2:linear-gradient(135deg,#b06e35,#d08a4b);
  --grad3:linear-gradient(135deg,#9c8465,#b7a180);
}
[data-theme="wood"] body{
  background:
    /* 托斯卡纳午后阳光洒在石灰墙面上 */
    radial-gradient(1100px 560px at 82% -8%, rgba(230,180,90,.28), transparent 62%),
    radial-gradient(900px 520px at 6% 34%, rgba(150,165,100,.2), transparent 62%),
    radial-gradient(760px 640px at 55% 110%, rgba(210,140,80,.2), transparent 62%),
    var(--bg);
  background-attachment:fixed;
}
[data-theme="wood"] .breathe-glow{
  background:radial-gradient(880px 460px at 50% -6%, rgba(235,190,110,.42), transparent 65%);
}
/* 田园果实点缀（向日葵/葡萄/麦穗，轻微摇曳） */
.ink-fx{
  position:fixed;z-index:1;pointer-events:none;opacity:.55;
  animation:inkSway var(--h-dur,9s) ease-in-out var(--h-delay,0s) infinite alternate;
  display:none;
}
[data-theme="wood"] .ink-fx{display:block}
@keyframes inkSway{
  0%{transform:translate(0,0) rotate(-2deg)}
  100%{transform:translate(10px,-10px) rotate(2deg)}
}
[data-theme="wood"] .gfx-petal{display:none} /* 托斯卡纳风不落绿叶 */
/* 卡片与其他主题保持一致（圆角/字体均继承默认） */
[data-theme="wood"] .card,[data-theme="wood"] .stat-card,[data-theme="wood"] .login-box{
  border:1px solid rgba(170,130,70,.2);
  box-shadow:0 6px 20px rgba(140,110,60,.1), inset 0 1px 0 rgba(255,255,255,.65);
}
[data-theme="wood"] .navbar{background:rgba(255,253,246,.92);border-color:rgba(170,130,70,.2)}
[data-theme="wood"] .input,[data-theme="wood"] .textarea,[data-theme="wood"] .select{
  background:#fffef9;border:1.5px solid rgba(180,145,85,.4);color:var(--text);
  box-shadow:inset 0 1px 4px rgba(170,130,70,.08);
}
[data-theme="wood"] .input::placeholder,[data-theme="wood"] .textarea::placeholder{color:#bfa985}
[data-theme="wood"] .input:focus,[data-theme="wood"] .textarea:focus,[data-theme="wood"] .select:focus{
  border-color:#b06e35;background:#fffefb;box-shadow:0 0 0 4px rgba(208,138,75,.16);
}
[data-theme="wood"] .theme-toggle{background:#f8f1de;border-color:rgba(176,110,53,.35)}

/* 马卡龙粉：花瓣落下 */
.macaron-petal{
  position:fixed;top:-24px;z-index:1;pointer-events:none;
  width:14px;height:14px;border-radius:80% 0 80% 0;
  background:linear-gradient(135deg,#ffd6e8,#f7a8c4);
  box-shadow:inset -2px -2px 4px rgba(224,135,168,.3);
  animation:petalSway var(--p-dur,12s) linear var(--p-delay,0s) infinite;
  opacity:0;display:none;
}
[data-theme="pink"] .macaron-petal{display:block}

/* 马卡龙粉：🌺🏵️ 花朵散落（沿用金钱掉落轨迹） */
.pink-flower{
  position:fixed;top:-28px;z-index:1;pointer-events:none;opacity:0;
  animation:coinFall var(--f-dur,13s) linear var(--f-delay,0s) infinite;
  display:none;
}
[data-theme="pink"] .pink-flower{display:block}
/* 粉色主题：🍃 叶子调成粉色系 */
.pink-leaf{filter:hue-rotate(210deg) saturate(1.05) brightness(1.03)}
@keyframes petalSway{
  0%{transform:translate(0,0) rotate(0deg);opacity:0}
  8%{opacity:.85}
  25%{transform:translate(calc(var(--p-dx,40px) * .6),24vh) rotate(120deg)}
  50%{transform:translate(calc(var(--p-dx,40px) * .1),50vh) rotate(240deg)}
  75%{transform:translate(calc(var(--p-dx,40px) * .8),76vh) rotate(340deg)}
  92%{opacity:.7}
  100%{transform:translate(calc(var(--p-dx,40px) * .4),104vh) rotate(430deg);opacity:0}
}

/* 星空海边：呼吸小星星（光点） */
.sea-star{
  position:fixed;z-index:1;pointer-events:none;border-radius:50%;
  background:#fff;box-shadow:0 0 6px rgba(255,255,255,.85);
  animation:seaStarBreath var(--s-dur,4s) ease-in-out var(--s-delay,0s) infinite;
  display:none;opacity:.2;
}
[data-theme="dark"] .sea-star{display:block}
@keyframes seaStarBreath{
  0%,100%{opacity:.15;transform:scale(.7)}
  50%{opacity:.95;transform:scale(1.15)}
}
/* 星空海边：零星掉落的光点 */
.star-fall{
  position:fixed;top:-16px;z-index:1;pointer-events:none;width:6px;height:6px;border-radius:50%;
  background:radial-gradient(circle,#fff,rgba(190,220,255,.4));
  box-shadow:0 0 10px rgba(200,225,255,.9);
  animation:starFallDown var(--f-dur,12s) linear var(--f-delay,0s) infinite;
  display:none;opacity:0;
}
[data-theme="dark"] .star-fall{display:block}
@keyframes starFallDown{
  0%{transform:translate(0,0);opacity:0}
  8%{opacity:.9}
  85%{opacity:.7}
  100%{transform:translate(var(--f-dx,20px),104vh);opacity:0}
}
/* 星空海边：⭐🌟 小星星图标飘落 */
.star-emoji{
  position:fixed;top:-24px;z-index:1;pointer-events:none;
  filter:drop-shadow(0 0 4px rgba(255,240,190,.7));
  animation:starFallDown var(--f-dur,13s) linear var(--f-delay,0s) infinite;
  display:none;opacity:0;
}
[data-theme="dark"] .star-emoji{display:block}

/* 星空海边：少量水中冒泡（点缀） */
.sea-bubble{
  position:fixed;bottom:-30px;z-index:1;pointer-events:none;
  border-radius:50%;border:1.5px solid rgba(190,225,255,.45);
  background:radial-gradient(circle at 32% 30%, rgba(255,255,255,.45), rgba(190,225,255,.07) 60%);
  animation:bubbleRise var(--b-dur,10s) linear var(--b-delay,0s) infinite;
  opacity:0;display:none;
}
[data-theme="dark"] .sea-bubble{display:block}
@keyframes bubbleRise{
  0%{transform:translate(0,0) scale(.7);opacity:0}
  8%{opacity:.7}
  50%{transform:translate(var(--b-dx,20px),-55vh) scale(1)}
  92%{opacity:.55}
  100%{transform:translate(calc(var(--b-dx,20px) * 1.6),-104vh) scale(1.1);opacity:0}
}

/* ☀️ 白天：小动物零星散落（柔和出现-停留-消失） */
.day-animal{
  position:fixed;z-index:1;pointer-events:none;opacity:0;
  filter:saturate(.85);
  animation:animalWander var(--a-dur,26s) ease-in-out var(--a-delay,0s) infinite;
  display:none;
}
:root:not([data-theme]) .day-animal, [data-theme="light"] .day-animal{display:block}
@keyframes animalWander{
  0%{opacity:0;transform:translateY(6px) scale(.85)}
  6%{opacity:.55;transform:translateY(0) scale(1)}
  40%{opacity:.55}
  46%{opacity:0;transform:translateY(-6px) scale(.9)}
  100%{opacity:0}
}

/* 🌳 古纸风：金钱/元宝/铜钱零星散落 */
.wood-coin{
  position:fixed;top:-28px;z-index:1;pointer-events:none;opacity:0;
  filter:sepia(.35) saturate(1.05);
  animation:coinFall var(--c-dur,14s) linear var(--c-delay,0s) infinite;
  display:none;
}
[data-theme="wood"] .wood-coin{display:block}
@keyframes coinFall{
  0%{transform:translate(0,0) rotate(0deg);opacity:0}
  6%{opacity:.75}
  25%{transform:translate(calc(var(--c-dx,40px) * .6),24vh) rotate(100deg)}
  50%{transform:translate(calc(var(--c-dx,40px) * .1),50vh) rotate(210deg)}
  75%{transform:translate(calc(var(--c-dx,40px) * .8),76vh) rotate(320deg)}
  92%{opacity:.6}
  100%{transform:translate(calc(var(--c-dx,40px) * .4),104vh) rotate(400deg);opacity:0}
}

[data-theme="wood"] .status-banner.done{background:rgba(125,143,87,.12);border-color:rgba(125,143,87,.35)}
[data-theme="wood"] .status-banner.todo{background:rgba(208,138,75,.12);border-color:rgba(208,138,75,.35)}
[data-theme="wood"] .btn-outline{border-color:rgba(176,110,53,.4);color:var(--text)}

/* logo 图标主题配色（小树自动匹配四主题） */
.brand .logo img, .login-box .logo-big img{filter:drop-shadow(0 3px 10px rgba(76,140,90,.45))}
[data-theme="dark"] .brand .logo img, [data-theme="dark"] .login-box .logo-big img{filter:brightness(1.2) saturate(1.15) drop-shadow(0 0 12px rgba(120,220,160,.55))}
[data-theme="pink"] .brand .logo img, [data-theme="pink"] .login-box .logo-big img{filter:hue-rotate(-25deg) brightness(1.05) drop-shadow(0 3px 10px rgba(224,135,168,.45))}
[data-theme="wood"] .brand .logo img, [data-theme="wood"] .login-box .logo-big img{filter:sepia(.3) saturate(1.05) brightness(.97) drop-shadow(0 3px 10px rgba(190,140,70,.5))}

/* ========== 输入栏字数统计（参考问答输入栏 x/N） ========== */
.char-count{
  text-align:right;font-size:11px;color:var(--muted);margin-top:4px;line-height:1.4;
  font-variant-numeric:tabular-nums;letter-spacing:.5px;
}
.char-count.near{color:var(--danger);font-weight:600}
[data-theme="dark"] .char-count{color:#8a90b8}

/* ---------- VIP 级别徽章（黄字微发光） ---------- */
.vip-badge{
  display:inline-flex;align-items:center;gap:2px;font-size:11px;font-weight:700;
  color:#fbbf24;text-shadow:0 0 6px rgba(251,191,36,.55),0 0 14px rgba(251,191,36,.25);
  letter-spacing:.5px;vertical-align:middle;
}
.vip-badge .vip-ico{font-size:12px}

/* 导师标识：🦄 图标（金光微闪） */
.mentor-mark {
  display: inline-block;
  margin-left: 2px;
  text-shadow: 0 0 6px rgba(251,191,36,.85), 0 0 14px rgba(251,191,36,.45);
}

/* 导师/管理员 打卡总览：紧凑统计卡（高度约为常规卡 2/3） */
.stats-row-compact .stat-card{padding:13px 12px;border-radius:14px}
.stats-row-compact .stat-card .num{font-size:22px}
.stats-row-compact .stat-card .lbl{font-size:11px;margin-top:2px}

/* ========== 🇨🇳 国庆红主题（默认）：喜庆红金 + 小红旗飘舞 + 烟花绽放 ========== */
[data-theme="red"]{
  --green:#d94f43;--green-dark:#c03a2e;--orange:#f0a45c;--orange-dark:#e08a3a;
  --bg:#fbe4dc;--card:#fff6f2;--card2:#fbe0d4;--text:#5a2320;--muted:#a8705f;
  --accent:#d93425;--accent2:#e8a04a;--danger:#c0392b;--gold:#e0a92e;
  --purple:#c26a8a;--purple-dark:#a85270;
  --radius:20px;--shadow:0 8px 26px rgba(217,52,37,.16);
  --grad:linear-gradient(135deg,#d93425,#e8604c);
  --grad2:linear-gradient(135deg,#e8a04a,#f2c078);
  --grad3:linear-gradient(135deg,#c26a8a,#d98aa4);
}
[data-theme="red"] body{
  background:
    radial-gradient(1100px 560px at 80% -8%, rgba(255,196,160,.55), transparent 60%),
    radial-gradient(900px 500px at 10% 30%, rgba(255,214,180,.5), transparent 60%),
    radial-gradient(760px 520px at 90% 72%, rgba(242,190,160,.45), transparent 60%),
    radial-gradient(720px 620px at 50% 108%, rgba(255,200,170,.5), transparent 60%),
    var(--bg);
  background-attachment:fixed;
}
[data-theme="red"] body::before{
  background:
    linear-gradient(115deg, transparent 40%, rgba(255,236,214,.4) 48%, transparent 56%),
    linear-gradient(115deg, transparent 60%, rgba(255,214,190,.35) 68%, transparent 76%);
  background-size:280% 280%;
  animation:breeze 18s ease-in-out infinite;
}
[data-theme="red"] .breathe-glow{
  background:radial-gradient(860px 460px at 50% -6%, rgba(255,190,150,.5), transparent 65%);
}
/* 小红旗飘舞 */
.red-flag{
  position:fixed;top:-30px;z-index:1;pointer-events:none;opacity:0;
  animation:redFlagFall var(--rf-dur,13s) linear var(--rf-delay,0s) infinite;
  display:none;
  filter:drop-shadow(0 1px 2px rgba(180,40,20,.3));
}
[data-theme="red"] .red-flag{display:block}
@keyframes redFlagFall{
  0%{transform:translate(0,0) rotate(-8deg);opacity:0}
  6%{opacity:.85}
  25%{transform:translate(calc(var(--rf-dx,50px) * .6),24vh) rotate(10deg)}
  50%{transform:translate(calc(var(--rf-dx,50px) * .15),50vh) rotate(-12deg)}
  75%{transform:translate(calc(var(--rf-dx,50px) * .8),75vh) rotate(8deg);opacity:.8}
  100%{transform:translate(calc(var(--rf-dx,50px) * .3),108vh) rotate(-6deg);opacity:0}
}
/* 烟花绽放：随机位置周期性绽开的光点 */
.red-firework{
  position:fixed;z-index:1;pointer-events:none;border-radius:50%;
  width:6px;height:6px;opacity:0;display:none;
  box-shadow:0 0 6px 2px currentColor;
  animation:fwPop var(--fw-dur,2.6s) ease-out var(--fw-delay,0s) infinite;
}
[data-theme="red"] .red-firework{display:block}
@keyframes fwPop{
  0%{transform:scale(0);opacity:0}
  8%{opacity:1}
  55%{transform:scale(1);opacity:.9}
  100%{transform:scale(1) translate(var(--fw-x,0px), var(--fw-y,0px));opacity:0}
}

/* ========== 🔮 魔法世界主题（神秘紫）：极光 + 星尘粒子 + 云朵 ========== */
[data-theme="magic"]{
  --green:#8f7fd4;--green-dark:#7463b8;--orange:#c9a0e8;--orange-dark:#b07fd8;
  --bg:#140e26;--card:#272046;--card2:#332a58;--text:#f7f1de;--muted:#ddd2b8;
  --accent:#d9c9ff;--accent2:#8fe8da;--danger:#f0a5b5;--gold:#f0d07e;
  --purple:#c9b8ec;--purple-dark:#a98fd6;
  --radius:20px;--shadow:0 8px 28px rgba(8,4,28,.55);
  --grad:linear-gradient(135deg,#8b6fc7,#a78bfa);
  --grad2:linear-gradient(135deg,#5ec4b8,#7dd3c8);
  --grad3:linear-gradient(135deg,#a78bfa,#c4b5fd);
}
[data-theme="magic"] body{
  background:
    radial-gradient(1000px 600px at 75% -10%, rgba(124,93,220,.16), transparent 62%),
    radial-gradient(860px 520px at 12% 28%, rgba(94,196,184,.09), transparent 60%),
    radial-gradient(800px 560px at 88% 70%, rgba(167,139,250,.09), transparent 60%),
    radial-gradient(720px 640px at 50% 112%, rgba(76,55,140,.20), transparent 62%),
    var(--bg);
  background-attachment:fixed;
}
/* 极光帷幕：缓慢流动变色的极光带 */
[data-theme="magic"] body::before{
  background:
    linear-gradient(165deg, transparent 25%, rgba(94,234,212,.09) 38%, rgba(167,139,250,.11) 52%, rgba(240,171,252,.08) 66%, transparent 80%),
    linear-gradient(150deg, transparent 45%, rgba(129,140,248,.08) 58%, rgba(94,234,212,.07) 70%, transparent 84%);
  background-size:300% 300%;
  animation:auroraFlow 26s ease-in-out infinite;
  opacity:.65;
}
@keyframes auroraFlow{
  0%{background-position:0% 20%}
  50%{background-position:100% 70%}
  100%{background-position:0% 20%}
}
[data-theme="magic"] .breathe-glow{
  background:radial-gradient(880px 480px at 50% -6%, rgba(167,139,250,.3), transparent 65%);
}
/* 星尘粒子：缓慢漂浮、明暗呼吸的发光点 */
.magic-mote{
  position:fixed;z-index:1;pointer-events:none;border-radius:50%;
  background:#c4b5fd;opacity:0;display:none;
  box-shadow:0 0 8px 2px rgba(196,181,253,.6);
  animation:magicFloat var(--mm-dur,11s) ease-in-out var(--mm-delay,0s) infinite;
}
.magic-mote.gold{background:#e3c15e;box-shadow:0 0 8px 2px rgba(227,193,94,.6)}
[data-theme="magic"] .magic-mote{display:block}
@keyframes magicFloat{
  0%{transform:translate(0,0);opacity:0}
  15%{opacity:.9}
  50%{transform:translate(calc(var(--mm-dx,60px) * .6), calc(var(--mm-dy,50px) * .6));opacity:.6}
  85%{opacity:.85}
  100%{transform:translate(var(--mm-dx,60px), var(--mm-dy,50px));opacity:0}
}
/* 魔法云朵：半透明柔和云团缓慢漂移 */
.magic-cloud{
  position:fixed;z-index:1;pointer-events:none;opacity:0;display:none;
  background:radial-gradient(ellipse at 40% 55%, rgba(196,181,253,.22), transparent 70%);
  border-radius:50%;
  animation:magicCloud var(--mc-dur,36s) ease-in-out var(--mc-delay,0s) infinite;
}
[data-theme="magic"] .magic-cloud{display:block}

/* 魔法世界：白底组件改深紫暖调（带一点黄），文字暖白防刺眼 */
[data-theme="magic"] .navbar{background:rgba(29,22,56,.9);border-color:rgba(240,208,126,.18)}
[data-theme="magic"] .site-footer,
[data-theme="magic"] .ticker-bar{background:#1d1638;border-color:rgba(240,208,126,.16)}
[data-theme="magic"] .card,
[data-theme="magic"] .stat-card,
[data-theme="magic"] .login-box,
[data-theme="magic"] .device-panel,
[data-theme="magic"] .qrtable table{background:#272046;border-color:rgba(240,208,126,.16)}
[data-theme="magic"] .input,
[data-theme="magic"] .textarea,
[data-theme="magic"] .select{background:#1e1840;border-color:rgba(240,208,126,.24);color:var(--text)}
[data-theme="magic"] .card .field .input,
[data-theme="magic"] .card .field .textarea,
[data-theme="magic"] .card .field .select{background:#1e1840;border-color:rgba(240,208,126,.3)}
[data-theme="magic"] .input:focus,
[data-theme="magic"] .textarea:focus,
[data-theme="magic"] .select:focus{background:#241d48;border-color:var(--accent);box-shadow:0 0 0 4px rgba(167,139,250,.18)}
[data-theme="magic"] .input::placeholder,
[data-theme="magic"] .textarea::placeholder{color:#8f86b8}
[data-theme="magic"] .notice-bar-top{background:#33294f}
[data-theme="magic"] .comment-room{background:var(--bg)}
[data-theme="magic"] .comment-room-topbar{background:#1d1638;border-color:rgba(240,208,126,.16)}
[data-theme="magic"] .btn-outline{border-color:rgba(240,208,126,.3);color:var(--text)}
[data-theme="magic"] .comment-item{background:rgba(30,24,64,.6);border-left-color:var(--accent)}
[data-theme="magic"] .comment-item .c-text{color:var(--text)}
[data-theme="magic"] .comment-item .c-reply{background:rgba(19,16,44,.6);border-left-color:rgba(240,208,126,.4);color:#f0e8d2}
[data-theme="magic"] .comment-box{background:rgba(30,24,64,.65);border-color:rgba(240,208,126,.22)}
[data-theme="magic"] .device-item{background:#2b2450;border-color:rgba(240,208,126,.14)}
@keyframes magicCloud{
  0%{transform:translateX(0);opacity:0}
  12%{opacity:.8}
  50%{transform:translateX(calc(var(--mc-dx,60px) * .7))}
  88%{opacity:.7}
  100%{transform:translateX(var(--mc-dx,60px));opacity:0}
}

/* ========== 🌙 宇宙之夜：极慢旋转的星河盘 ========== */
.galaxy-ring{
  position:fixed;left:50%;top:38%;z-index:0;pointer-events:none;display:none;
  width:150vmax;height:150vmax;margin:-75vmax 0 0 -75vmax;border-radius:50%;
  background:
    radial-gradient(circle at 50% 50%, transparent 30%, rgba(120,140,220,.05) 42%, transparent 46%),
    conic-gradient(from 0deg,
      transparent 0deg, rgba(167,139,250,.10) 30deg, transparent 70deg,
      rgba(126,184,224,.10) 120deg, transparent 170deg,
      rgba(240,180,220,.09) 230deg, transparent 280deg,
      rgba(167,139,250,.10) 320deg, transparent 360deg);
  filter:blur(2px);
  animation:galaxySpin 240s linear infinite;
}
[data-theme="dark"] .galaxy-ring{display:block}
@keyframes galaxySpin{
  from{transform:rotate(0deg)}
  to{transform:rotate(360deg)}
}
