/* =========================================================
   工分系统 · 全局样式
   设计风格：渐变玻璃拟态 + 圆角卡片 + 柔和阴影（2024-2025 流行）
   主色：indigo → violet → fuchsia 渐变
   ========================================================= */
:root{
  --indigo:#6366f1;
  --violet:#8b5cf6;
  --fuchsia:#ec4899;
  --cyan:#06b6d4;
  --amber:#f59e0b;
  --green:#10b981;
  --red:#f43f5e;
  --grad:linear-gradient(135deg,#6366f1 0%,#8b5cf6 45%,#ec4899 100%);
  --grad-soft:linear-gradient(135deg,rgba(99,102,241,.12),rgba(236,72,153,.12));

  --bg:#f5f6fb;
  --bg-2:#eef0f8;
  --card:#ffffff;
  --border:#e8eaf2;
  --text:#1f2233;
  --text-soft:#6b7185;
  --shadow:0 10px 30px rgba(31,34,51,.06);
  --shadow-lg:0 22px 60px rgba(99,102,241,.18);
  --radius:18px;
  --radius-sm:12px;
  --font:"PingFang SC","Microsoft YaHei","Segoe UI",system-ui,-apple-system,Roboto,Helvetica,Arial,sans-serif;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:var(--font);
  color:var(--text);
  background:var(--bg);
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
.icon{display:inline-block;vertical-align:-3px;flex:none}

/* ---------- 通用按钮 ---------- */
.btn{
  display:inline-flex;align-items:center;gap:7px;justify-content:center;
  border:none;cursor:pointer;font-size:14px;font-weight:600;
  padding:11px 18px;border-radius:12px;transition:.18s ease;font-family:inherit;
}
.btn-primary{background:var(--grad);color:#fff;box-shadow:0 8px 20px rgba(139,92,246,.35)}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 12px 26px rgba(139,92,246,.45)}
.btn-ghost{background:var(--bg-2);color:var(--text);border:1px solid var(--border)}
.btn-ghost:hover{background:#e6e9f5;color:var(--indigo)}
.btn-sm{padding:8px 13px;font-size:13px;border-radius:10px}
.btn-block{width:100%}

/* ---------- 卡片 ---------- */
.card{
  background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
  padding:22px;box-shadow:var(--shadow);margin-bottom:20px;
}
.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:10px;flex-wrap:wrap}
.card-head h2{font-size:16px;display:flex;align-items:center;gap:8px;font-weight:700}
.card-head h2 .icon{color:var(--indigo)}

/* ---------- 表单 ---------- */
.form{display:flex;flex-direction:column;gap:14px}
.field{display:flex;flex-direction:column;gap:6px}
.field-label{font-size:13px;font-weight:600;color:var(--text-soft);display:flex;align-items:center;gap:6px}
.field-label .icon{color:var(--indigo)}
.field input,.field select,.field textarea{
  width:100%;padding:11px 13px;border:1px solid var(--border);border-radius:12px;
  font-size:14px;font-family:inherit;background:#fbfbfe;color:var(--text);transition:.15s;
}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--indigo);box-shadow:0 0 0 4px rgba(99,102,241,.14);background:#fff;
}
.field-row{display:flex;gap:14px}
.field-row .field{flex:1}
.field.inline{flex-direction:row;align-items:center;gap:8px}
.field.inline .field-label{white-space:nowrap}
.checkbox{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--text-soft)}
.checkbox input{width:18px;height:18px;accent-color:var(--indigo)}

/* ---------- 时长录入（小时 + 分钟） ---------- */
.qty-field{position:relative}
.qty-time .dur-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.qty-time .dur-row input{
  flex:1;min-width:0;padding:12px 14px;border:1px solid transparent;border-radius:14px;
  font-size:14px;font-family:inherit;background:#f3f4f8;color:var(--text);transition:.15s;
}
.qty-time .dur-row input:focus{outline:none;background:#fff;border-color:var(--indigo);box-shadow:0 0 0 3px rgba(99,102,241,.12)}
.unit-suffix{font-size:13px;font-weight:600;color:var(--text-soft);white-space:nowrap}
.qty-time .dur-row input::-webkit-outer-spin-button,
.qty-time .dur-row input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.qty-time .dur-row input[type=number]{-moz-appearance:textfield}

/* ---------- 提示 ---------- */
.alert{padding:11px 14px;border-radius:12px;font-size:14px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.alert-success{background:rgba(16,185,129,.12);color:#0f9d6b;border:1px solid rgba(16,185,129,.25)}
.alert-error{background:rgba(244,63,94,.1);color:#e11d48;border:1px solid rgba(244,63,94,.25)}
.hint{font-size:13px;color:var(--text-soft);margin-bottom:14px}
.empty{display:flex;flex-direction:column;align-items:center;gap:10px;color:var(--text-soft);padding:34px 0;text-align:center}
.empty .icon{color:#c7cbe0}
.empty p{font-size:14px}

/* ---------- 徽标 ---------- */
.brand-badge{width:38px;height:38px;border-radius:11px;background:var(--grad);display:grid;place-items:center;color:#fff;box-shadow:0 8px 18px rgba(139,92,246,.35)}

/* ---------- 头像 ---------- */
.avatar{
  width:36px;height:36px;border-radius:50%;color:#fff;display:inline-grid;place-items:center;
  font-weight:700;font-size:15px;flex:none;box-shadow:0 4px 10px rgba(0,0,0,.08)
}
.avatar.sm{width:28px;height:28px;font-size:12px}

/* =========================================================
   前台
   ========================================================= */
.front-body{
  background:
    radial-gradient(1200px 500px at 10% -10%, rgba(99,102,241,.14), transparent 60%),
    radial-gradient(1000px 500px at 100% 0%, rgba(236,72,153,.12), transparent 55%),
    var(--bg);
  min-height:100%;
}
.front-header{position:sticky;top:0;z-index:20;backdrop-filter:blur(10px);background:rgba(255,255,255,.7);border-bottom:1px solid var(--border)}
.front-header-inner{max-width:1080px;margin:0 auto;padding:14px 20px;display:flex;align-items:center;justify-content:space-between}
.logo{display:flex;align-items:center;gap:10px;font-weight:800;font-size:18px}
.logo-badge{width:34px;height:34px;border-radius:10px;background:var(--grad);display:grid;place-items:center;color:#fff}
.ghost-link{display:inline-flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:var(--indigo);background:#fff;border:1px solid var(--border);padding:8px 14px;border-radius:10px}
.ghost-link:hover{background:var(--bg-2)}
.front-main{max-width:1080px;margin:0 auto;padding:26px 20px 40px}
.hero{text-align:center;padding:18px 0 26px}
.hero h1{font-size:28px;font-weight:800;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;letter-spacing:.5px}
.hero p{color:var(--text-soft);margin-top:8px;font-size:15px}
.front-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.form-card .preview{
  display:flex;align-items:center;justify-content:space-between;
  background:var(--grad-soft);border:1px dashed rgba(139,92,246,.4);border-radius:14px;padding:14px 18px
}
.preview-label{font-size:13px;color:var(--text-soft);font-weight:600}
.preview-val{font-size:30px;font-weight:800;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.preview-sub{font-size:13px;color:var(--text-soft);font-weight:600;margin-left:10px}

.rank-head{margin-bottom:8px}
.month-pick input[type=month]{border:1px solid var(--border);border-radius:10px;padding:7px 10px;font-family:inherit;background:#fbfbfe;color:var(--text)}
.rank-list{list-style:none;display:flex;flex-direction:column;gap:14px;counter-reset:r}
.rank-list.compact{gap:11px}
.rank-item{display:flex;align-items:center;gap:12px}
.rank-no{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;font-weight:800;font-size:13px;color:#fff;flex:none;background:#c7cbe0}
.rank-list.compact .rank-no{width:22px;height:22px;font-size:12px}
.rank-body{flex:1;min-width:0}
.rank-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px}
.rank-name{font-weight:700;font-size:14px}
.rank-score{font-weight:800;font-size:15px;color:var(--indigo)}
.rank-score small{font-size:11px;color:var(--text-soft);font-weight:600}
.bar{height:9px;background:var(--bg-2);border-radius:99px;overflow:hidden}
.bar span{display:block;height:100%;border-radius:99px;background:var(--grad);transition:width .6s cubic-bezier(.2,.8,.2,1)}
.rank-meta{font-size:12px;color:var(--text-soft);margin-top:3px}

.recent-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.recent-item{display:flex;align-items:center;gap:11px;background:var(--bg);border:1px solid var(--border);border-radius:14px;padding:12px 14px}
.recent-body{min-width:0;flex:1}
.recent-line{display:flex;align-items:center;gap:8px;font-size:14px}
.recent-rule{font-size:12px;background:#fff;border:1px solid var(--border);color:var(--text-soft);padding:2px 8px;border-radius:99px}
.recent-sub{font-size:12px;color:var(--text-soft);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.recent-pts{font-weight:800;color:var(--green);font-size:15px;flex:none}
.front-footer{text-align:center;color:var(--text-soft);font-size:13px;padding:24px}

/* =========================================================
   登录 / 安装（暗色背景）
   ========================================================= */
.auth-body{
  min-height:100vh;display:grid;place-items:center;padding:20px;
  background:
    radial-gradient(900px 500px at 15% 10%, rgba(99,102,241,.4), transparent 60%),
    radial-gradient(800px 500px at 90% 90%, rgba(236,72,153,.4), transparent 55%),
    linear-gradient(135deg,#1e1b4b,#312e81 55%,#4c1d95);
}
.login-wrap,.install-card{width:100%}
.login-card{background:rgba(255,255,255,.96);border-radius:22px;padding:34px;max-width:400px;margin:0 auto;box-shadow:var(--shadow-lg)}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:22px}
.login-brand h1{font-size:20px}
.login-brand p{font-size:13px;color:var(--text-soft)}
.back-home{display:inline-flex;align-items:center;gap:6px;margin-top:16px;font-size:13px;color:var(--text-soft)}

/* =========================================================
   后台布局
   ========================================================= */
.admin-body{background:var(--bg)}
.admin-layout{display:flex;min-height:100vh}
.sidebar{
  width:236px;flex:none;background:linear-gradient(180deg,#1e1b4b,#312e81 60%,#4c1d95);
  color:#cfd2f5;display:flex;flex-direction:column;padding:20px 14px;position:sticky;top:0;height:100vh
}
.side-brand{display:flex;align-items:center;gap:11px;padding:6px 8px 18px;color:#fff;font-weight:800}
.side-title{font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.side-nav{display:flex;flex-direction:column;gap:4px;flex:1}
.side-link{display:flex;align-items:center;gap:11px;padding:11px 13px;border-radius:12px;color:#c3c6f0;font-size:14px;font-weight:600;transition:.15s}
.side-link:hover{background:rgba(255,255,255,.08);color:#fff}
.side-link.active{background:rgba(255,255,255,.16);color:#fff;box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
.side-foot{display:flex;flex-direction:column;gap:4px;border-top:1px solid rgba(255,255,255,.12);padding-top:12px}
.admin-main{flex:1;min-width:0;display:flex;flex-direction:column}
.admin-top{display:flex;align-items:center;justify-content:space-between;padding:18px 26px;border-bottom:1px solid var(--border);background:#fff}
.admin-top h1{font-size:20px;font-weight:800}
.admin-user{display:flex;align-items:center;gap:9px;font-size:14px;font-weight:600}
.admin-content{padding:24px 26px;flex:1}

.admin-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:20px}
.admin-grid .card{margin-bottom:0}
.admin-grid{margin-bottom:20px}

/* 统计卡 */
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
.stat-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px;display:flex;align-items:center;gap:14px;box-shadow:var(--shadow)}
.stat-ico{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;flex:none}
.stat-num{font-size:24px;font-weight:800;line-height:1.1}
.stat-lbl{font-size:13px;color:var(--text-soft)}

/* 表格 */
.table-scroll{overflow-x:auto}
.table{width:100%;border-collapse:collapse;font-size:14px}
.table th{text-align:left;font-size:12px;color:var(--text-soft);font-weight:700;padding:10px 12px;border-bottom:2px solid var(--border);white-space:nowrap}
.table td{padding:11px 12px;border-bottom:1px solid var(--border);vertical-align:middle}
.table tbody tr:hover{background:var(--bg)}
.table .pts{color:var(--green);font-weight:800}
.table .soft{color:var(--text-soft);max-width:220px}
.row-actions{display:flex;gap:8px}
.row-edit,.row-del{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:8px;border:1px solid var(--border);color:var(--text-soft)}
.row-edit:hover{color:var(--indigo);border-color:var(--indigo);background:rgba(99,102,241,.08)}
.row-del:hover{color:var(--red);border-color:var(--red);background:rgba(244,63,94,.08)}

/* 徽章 */
.badge{display:inline-block;font-size:12px;font-weight:700;padding:3px 10px;border-radius:99px;background:var(--bg-2);color:var(--text-soft)}
.badge.ok{background:rgba(16,185,129,.14);color:#0f9d6b}
.badge.off{background:rgba(107,113,133,.14);color:#6b7185}

/* 筛选条 */
.filter-bar{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:20px;box-shadow:var(--shadow)}

/* 环形图 */
.donut-wrap{display:flex;align-items:center;gap:22px;flex-wrap:wrap}
.donut{width:140px;height:140px;border-radius:50%;display:grid;place-items:center;flex:none;position:relative}
.donut-hole{width:92px;height:92px;border-radius:50%;background:#fff;display:grid;place-items:center;text-align:center}
.donut-hole span{font-size:22px;font-weight:800;color:var(--indigo);line-height:1}
.donut-hole small{font-size:12px;color:var(--text-soft)}
.legend{list-style:none;display:flex;flex-direction:column;gap:9px;font-size:13px;flex:1;min-width:160px}
.legend li{display:flex;align-items:center;gap:8px}
.legend .dot{width:11px;height:11px;border-radius:3px;flex:none}
.legend b{margin-left:auto;color:var(--text)}

/* 弹窗 */
.modal{border:none;border-radius:18px;padding:0;max-width:440px;width:92%;box-shadow:var(--shadow-lg);color:var(--text)}
.modal::backdrop{background:rgba(20,20,40,.45);backdrop-filter:blur(3px)}
.modal .form{padding:6px 22px 22px}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px 4px}
.modal-head h3{font-size:17px}
.modal-x{display:grid;place-items:center;width:32px;height:32px;border-radius:9px;color:var(--text-soft)}
.modal-x:hover{background:var(--bg-2);color:var(--text)}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:6px}

.meta-block{margin-top:18px;border-top:1px solid var(--border);padding-top:14px;display:flex;flex-direction:column;gap:8px}
.meta-block div{display:flex;justify-content:space-between;font-size:13px;color:var(--text-soft)}
.meta-block b{color:var(--text)}

/* ---------- 成员门户专用 ---------- */
.member-bar{display:flex;align-items:center;gap:10px}
.member-name{font-weight:700;font-size:14px}
.member-bar .avatar{width:30px;height:30px;font-size:13px}
.member-bar .ghost-link{padding:6px 12px;font-size:13px}

/* 顶部月份选择器 */
.top-pick{display:flex;align-items:center;gap:12px;background:#fff;border:1px solid var(--border);
  border-radius:14px;padding:10px 16px;margin:0 auto 20px;max-width:420px;box-shadow:var(--shadow)}
.top-pick .field-label{margin:0}
.top-pick input[type=month]{border:1px solid var(--border);border-radius:10px;padding:7px 10px;font-family:inherit;background:#fbfbfe}

/* 登录/注册 Tabs */
.tabs{display:flex;gap:8px;margin-bottom:18px;background:var(--bg-2);padding:5px;border-radius:13px}
.tab{flex:1;border:none;background:transparent;cursor:pointer;font-family:inherit;font-size:14px;font-weight:700;
  padding:10px;border-radius:9px;color:var(--text-soft);display:flex;align-items:center;justify-content:center;gap:6px;transition:.15s}
.tab.active{background:#fff;color:var(--indigo);box-shadow:0 2px 8px rgba(31,34,51,.08)}
.tab-pane{margin-top:2px}

/* 当月构成（成员） */
.break-list{list-style:none;display:flex;flex-direction:column;gap:14px}
.break-item .break-top{display:flex;justify-content:space-between;font-size:14px;font-weight:600;margin-bottom:5px}
.break-item .break-top b{color:var(--indigo)}
.break-sub{font-size:12px;color:var(--text-soft);margin-top:3px}

/* 每日明细：小卡片 + 同项目合并 */
.day-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}
.day-card{background:var(--bg);border:1px solid var(--border);border-radius:16px;overflow:hidden;display:flex;flex-direction:column}
.day-row{display:flex;align-items:center;gap:10px;padding:10px 14px}
.day-row-head{background:linear-gradient(135deg,#eef0fe,#f6eefe);border-bottom:1px solid var(--border)}
.day-row-head .day-date{font-weight:800;font-size:14px;color:var(--indigo)}
.day-row-head .day-sum{font-weight:800;color:var(--green);font-size:14px;margin-left:auto}
.day-row-item{border-top:1px dashed var(--border)}
.day-row-item:first-of-type{border-top:none}
.day-item-left{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.day-rule{font-weight:700;font-size:14px;color:var(--text)}
.day-qty{font-size:12px;color:var(--text-soft);background:#fff;border:1px solid var(--border);padding:1px 9px;border-radius:99px;align-self:flex-start}
.day-note{font-size:12px;color:var(--text-soft);padding-left:2px;word-break:break-all}
.day-item-right{display:flex;align-items:center;gap:8px;margin-left:auto}
.day-pts{font-weight:800;color:var(--green);font-size:15px;white-space:nowrap}
.day-del{width:26px;height:26px;border-radius:7px;border:1px solid var(--border);color:var(--text-soft);display:grid;place-items:center;flex-shrink:0}
.day-del:hover{color:var(--red);border-color:var(--red);background:rgba(244,63,94,.08)}

.member-stats{margin-bottom:20px}

/* ---------- 记分规则一览 ---------- */
.hint-chip{font-size:12px;color:var(--text-soft);background:#f1f0fb;border:1px solid var(--border);padding:3px 10px;border-radius:999px}
.rule-board{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px}
.rule-card{border:1px solid var(--border);border-radius:14px;padding:14px 16px;background:linear-gradient(180deg,#fff,#faf9ff)}
.rule-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.rule-name{font-weight:700;font-size:15px;color:var(--text)}
.rule-score{font-size:22px;font-weight:800;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;line-height:1.1}
.rule-score-unit{font-size:12px;font-weight:600;color:var(--text-soft);-webkit-text-fill-color:var(--text-soft)}
.rule-desc{margin-top:6px;font-size:12px;color:var(--text-soft);line-height:1.5}
.badge{font-size:11px;padding:2px 9px;border-radius:999px;font-weight:600;white-space:nowrap}
.badge-time{background:rgba(99,102,241,.12);color:#5b5bd6}
.badge-count{background:rgba(217,70,239,.12);color:#c026d3}

/* ---------- 多项目录入条目 ---------- */
.front-stack{display:flex;flex-direction:column;gap:20px}
.entries{display:flex;flex-direction:column;gap:14px;margin-bottom:10px}
.score-entry{border:1px solid var(--border);border-radius:14px;padding:14px;background:#fbfbfe;position:relative}
.score-entry + .score-entry{margin-top:2px}
.entry-row{display:flex;gap:12px;align-items:flex-start}
.entry-rule{flex:1.4}
.entry-qty{flex:1}
.entry-del{position:absolute;top:12px;right:12px;width:28px;height:28px;border-radius:8px;border:1px solid var(--border);background:#fff;color:var(--text-soft);display:grid;place-items:center;cursor:pointer}
.entry-del:hover{color:var(--red);border-color:var(--red);background:rgba(244,63,94,.08)}
.entry-note{margin-top:10px}
#addEntry{margin-bottom:16px}
@media (max-width:560px){
  .entry-row{flex-direction:column;gap:12px;padding-right:34px}
}

/* ---------- 视图切换（每日明细 / 月历） ---------- */
.card-head-split{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.view-tabs{display:inline-flex;background:rgba(99,102,241,.1);border-radius:11px;padding:4px}
.view-tab{padding:6px 14px;border-radius:8px;font-size:13px;font-weight:600;color:var(--text-soft);text-decoration:none;transition:.15s}
.view-tab.active{background:#fff;color:var(--indigo);box-shadow:0 1px 4px rgba(99,102,241,.2)}

/* ---------- 月历 ---------- */
.calendar{max-width:100%}
.cal-weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-bottom:8px}
.cal-weekdays span{text-align:center;font-size:12px;font-weight:700;color:var(--text-soft)}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
.cal-cell{border:1px solid var(--border);border-radius:12px;min-height:70px;padding:8px;background:#fff;display:flex;flex-direction:column;gap:4px;transition:.15s}
.cal-cell.cal-empty{background:transparent;border:none}
.cal-day{font-size:13px;font-weight:700;color:var(--text-soft)}
.cal-cell.cal-has{background:var(--grad-soft);border-color:rgba(139,92,246,.35)}
.cal-cell.cal-has .cal-day{color:var(--indigo)}
.cal-pts{align-self:flex-start;font-size:14px;font-weight:800;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.cal-cell.cal-today{border:2px solid var(--indigo);box-shadow:0 0 0 3px rgba(99,102,241,.12)}
.cal-hint{margin-top:12px}
@media (max-width:560px){
  .cal-cell{min-height:56px;padding:6px}
  .cal-day{font-size:12px}
  .cal-pts{font-size:13px}
}

/* ---------- 后台：移动端抽屉侧栏（桌面隐藏按钮与遮罩） ---------- */
.menu-btn{display:none}
.side-mask{display:none}
.admin-top-left{display:flex;align-items:center;gap:10px;min-width:0}
.admin-top-left h1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ---------- 响应式 ---------- */
@media (max-width:900px){
  .front-grid,.admin-grid{grid-template-columns:1fr}
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .admin-top{padding:13px 16px}
  .admin-top h1{font-size:17px}
  .admin-content{padding:16px}
  .menu-btn{
    display:inline-grid;place-items:center;width:38px;height:38px;flex:none;
    border-radius:11px;border:1px solid var(--border);background:#fff;
    color:var(--text);cursor:pointer;transition:.15s;
  }
  .menu-btn:active{transform:scale(.94)}
  .menu-btn:hover{color:var(--indigo);border-color:var(--indigo)}
  .side-mask{
    display:block;position:fixed;inset:0;background:rgba(15,18,40,.45);
    z-index:55;opacity:0;visibility:hidden;transition:.22s ease;
  }
  .side-mask.show{opacity:1;visibility:visible}
  .sidebar{
    position:fixed;left:0;top:0;bottom:0;height:100vh;z-index:60;width:250px;
    transform:translateX(-106%);transition:transform .26s ease;
    box-shadow:0 12px 44px rgba(0,0,0,.3);overflow-y:auto;
  }
  .sidebar.open{transform:translateX(0)}
}
@media (max-width:560px){
  .stat-grid{grid-template-columns:1fr 1fr}
  .field-row{flex-direction:column;gap:14px}
  .hero h1{font-size:23px}
}

/* ---------- 项目规则：卡片网格 ---------- */
.rule-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:16px;margin-bottom:20px}
.rule-item{
  position:relative;overflow:hidden;background:var(--card);border:1px solid var(--border);
  border-radius:16px;padding:18px 18px 16px;box-shadow:var(--shadow);transition:.2s ease;
}
.rule-item:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg)}
.rule-item-bar{position:absolute;top:0;left:0;right:0;height:4px}
.rule-item.is-off{opacity:.62}
.rule-item-top{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px}
.rule-item-ico{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;flex:none}
.rule-item-title{flex:1;min-width:0}
.rule-item-name{font-size:15px;font-weight:700;color:var(--text);margin-bottom:5px;word-break:break-all}
.rule-item-score{display:flex;align-items:baseline;gap:6px;margin-bottom:10px}
.rule-item-score b{font-size:26px;font-weight:800;color:var(--text);line-height:1}
.rule-item-score span{font-size:13px;font-weight:600;color:var(--text-soft)}
.rule-item-chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.chip{font-size:12px;font-weight:600;color:var(--text-soft);background:var(--bg-2);border:1px solid var(--border);padding:2px 9px;border-radius:99px}
.rule-item-desc{font-size:12.5px;color:var(--text-soft);line-height:1.5;margin-bottom:12px;min-height:20px}
.rule-item-actions{display:flex;gap:8px;border-top:1px solid var(--border);padding-top:12px}
.rule-item-actions .btn{flex:1}
.btn-ghost.danger{color:var(--red)}
.btn-ghost.danger:hover{background:rgba(244,63,94,.09);border-color:var(--red);color:var(--red)}
.chip.shift{color:#6366f1;background:rgba(99,102,241,.1);border-color:rgba(99,102,241,.3)}
.backup-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.backup-actions .btn{flex:1 1 auto;justify-content:center}
.row-actions{display:flex;gap:8px;align-items:center;white-space:nowrap}
.chip.tier{color:#f59e0b;background:rgba(245,158,11,.12);border-color:rgba(245,158,11,.32)}

/* ---------- 班次记工：条目样式一比一对齐「自定义加分」条目 ---------- */
.shift-grid{display:flex;flex-direction:column;gap:14px;margin:14px 0 10px}
.shift-item{
  border:1px solid var(--border);border-radius:14px;padding:14px;background:#fbfbfe;
  display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;transition:.18s ease;
}
.shift-item:hover{border-color:#c7d2fe;box-shadow:var(--shadow-sm)}
.shift-item:focus-within{border-color:var(--indigo);box-shadow:0 0 0 3px rgba(99,102,241,.12);background:#fff}
.shift-item.filled{background:#fff;border-color:#c7d2fe}
.shift-head{display:flex;align-items:center;gap:10px;flex:1 1 auto;min-width:0}
.shift-ico{width:34px;height:34px;border-radius:10px;flex:none;display:grid;place-items:center}
.shift-name{font-size:15px;font-weight:700;color:var(--text);white-space:nowrap}
.shift-rate{font-size:12px;font-weight:600;color:var(--text-soft)}
.shift-body{display:flex;align-items:center;gap:9px;margin-left:auto}
.shift-body .dur-row{display:flex;align-items:center;gap:8px}
.shift-body .dur-row input{
  width:96px;padding:12px 14px;border:1px solid transparent;border-radius:14px;
  font-size:14px;font-family:inherit;background:#f3f4f8;color:var(--text);text-align:center;transition:.15s;
}
.shift-body .dur-row input:focus{outline:none;background:#fff;border-color:var(--indigo);box-shadow:0 0 0 3px rgba(99,102,241,.12)}
.shift-body .dur-row input::-webkit-outer-spin-button,
.shift-body .dur-row input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.shift-body .dur-row input[type=number]{-moz-appearance:textfield}
.shift-count{
  width:120px;padding:12px 14px;border:1px solid transparent;border-radius:14px;
  font-size:14px;font-family:inherit;background:#f3f4f8;color:var(--text);transition:.15s;
}
.shift-count:focus{outline:none;background:#fff;border-color:var(--indigo);box-shadow:0 0 0 3px rgba(99,102,241,.12)}
.shift-pts{
  flex:none;font-size:15px;font-weight:800;color:var(--indigo);
  font-variant-numeric:tabular-nums;
}
.shift-pts:empty{display:none}
.shift-hint{margin:0 0 12px}
@media (max-width:560px){
  .shift-head{flex:1 1 100%}
  .shift-body{width:100%;margin-left:0}
  .shift-body .dur-row{flex:1;min-width:0}
  .shift-body .dur-row input{flex:1;min-width:0;width:auto}
  .shift-count{flex:1 1 0;min-width:0;width:auto}
  .shift-pts{min-width:40px;text-align:right}
}

/* ---------- 记分明细：管理开关（控制删除按钮显隐） ---------- */
.head-right{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}
.manage-switch{
  display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;
  color:var(--text-soft);text-decoration:none;padding:6px 11px;border-radius:11px;
  border:1px solid var(--border);background:#fff;cursor:pointer;transition:.18s ease;
}
.manage-switch:hover{border-color:var(--indigo);color:var(--indigo)}
.manage-switch.on{color:var(--red);border-color:rgba(244,63,94,.45);background:rgba(244,63,94,.07)}
.ms-label{display:inline-flex;align-items:center;gap:5px}
.ms-track{position:relative;width:34px;height:18px;border-radius:99px;background:#cfd3e0;flex:none;transition:.18s ease}
.manage-switch.on .ms-track{background:var(--red)}
.ms-knob{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.22);transition:.18s ease}
.manage-switch.on .ms-knob{left:18px}
