/* ============================================================
   请假看板样式 — 深林绿 + 青柠点缀版（2026-10-11）
   风格基准：深绿主卡(白大字) / 白卡大圆角20px / 青柠只做点缀 / 胶囊控件
   注意：design-tokens.css 旧 ldash 覆盖段已随本版移除，本文件是唯一来源
   ============================================================ */

.ldash {
  padding: 16px;
  max-width: 900px;
  margin: 0 auto;
  background: #EAF2E3;
  border-radius: 24px;
}
html[data-theme="dark"] .ldash { background: #1E2620; }

.ldash-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
}

.ldash-title {
  font-size: 1.35rem;
  font-weight: 700;
  color: var(--text);
}

.ldash-date {
  font-size: 0.8rem;
  color: var(--text-tertiary);
}

/* ---------- 统计卡 ---------- */
.ldash-cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
  margin-bottom: 20px;
}

/* 四指标：此刻在请假 / 今日短期 / 长期在册 / 长假累计 */
.ldash-cards-4 {
  grid-template-columns: repeat(4, 1fr);
}

.ldash-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 18px 14px;
  border-radius: 20px;
  background: var(--card-bg);
  border: 1px solid var(--border-light);
  box-shadow: var(--shadow);
  cursor: pointer;
  transition: transform var(--dur-normal) var(--ease-out-quart), box-shadow var(--dur-normal) var(--ease-out-quart);
  text-align: center;
}

.ldash-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lg);
}

.ldash-card:active {
  transform: translateY(0);
}

/* 主卡（此刻在请假）：深林绿，白大字 + 青柠点缀 */
.ldash-card-warn {
  background: var(--skin-primary, #17402F);
  border-color: var(--skin-primary, #17402F);
}
.ldash-card-warn:hover { box-shadow: 0 8px 24px rgba(23, 64, 47, 0.28); }

.ldash-card-warn .ldash-card-num { color: #FFFFFF; }
.ldash-card-warn .ldash-card-label { color: #9DC3AE; }
.ldash-card-warn .ldash-card-sub { color: #C4D9CD; }
.ldash-card-warn .ldash-card-hint { color: #7FA791; border-top-color: rgba(255,255,255,0.14); }

/* 其余三张：白卡（暗色走卡片底色），数字用主绿 */
.ldash-card-num {
  font-size: 2.1rem;
  font-weight: 700;
  line-height: 1.2;
  color: var(--skin-primary, #14523F);
  font-variant-numeric: tabular-nums;
}
html[data-theme="dark"] .ldash-card-num { color: #8FD9BD; }

.ldash-card-label {
  font-size: 0.82rem;
  color: var(--text-secondary);
  margin-top: 2px;
}

.ldash-card-sub {
  font-size: 0.56rem;
  color: var(--text-tertiary);
  margin-top: 4px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

/* 口径说明（三个指标的分母/含义，避免只看数字产生歧义） */
.ldash-card-hint {
  display: block;
  font-size: 0.54rem;
  color: var(--text-tertiary);
  opacity: 0.8;
  margin-top: 4px;
  padding-top: 4px;
  border-top: 1px dashed var(--border);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

/* ---------- 图表区 ---------- */
.ldash-charts {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.ldash-chart-card {
  background: var(--card-bg);
  border: 1px solid var(--border-light);
  border-radius: 20px;
  padding: 14px;
  box-shadow: var(--shadow);
  min-width: 0; /* LDMOBFIX: grid 轨道最小宽度默认跟内容走，1050px 折线图会把手机屏幕撑破 */
  max-width: 100%;
}

.ldash-chart-title {
  font-size: 0.9rem;
  font-weight: 600;
  margin: 0 0 12px;
  color: var(--text);
}

.ldash-chart-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 12px;
  flex-wrap: nowrap;
  gap: 6px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.ldash-chart-header::-webkit-scrollbar { display: none; }

.ldash-chart-header .ldash-chart-title {
  margin: 0;
}

.ldash-term-select {
  display: flex;
  align-items: center;
  gap: 3px;
  font-size: 0.56rem;
  color: var(--text-secondary);
  flex-wrap: nowrap;
  white-space: nowrap;
  flex-shrink: 1;
  min-width: 0;
}

/* 日期输入：底色与卡片差一档 + 独立边框（可区分） */
.ldash-date-input {
  padding: 4px 8px;
  font-size: 0.58rem;
  border: 1px solid var(--input-border);
  border-radius: 8px;
  background: var(--bg-secondary);
  color: var(--text);
  font-family: inherit;
  min-width: 0;
  width: auto;
  max-width: none;
}
html[data-theme="dark"] .ldash-date-input { background: var(--bg); }
/* iOS Safari日期文字缩小 */
.ldash-date-input::-webkit-date-and-time-value {
  font-size: 0.58rem;
  text-align: left;
}
.ldash-date-input::-webkit-inner-spin-button,
.ldash-date-input::-webkit-calendar-picker-indicator {
  font-size: 0.58rem;
}

.ldash-term-sep {
  color: var(--text-tertiary);
}

/* 新建学期按钮 - 桌面端紧凑，移动端换行全宽 */
.ldash-new-term-btn {
  margin-left: 4px;
  font-size: 0.72rem;
  padding: 4px 10px;
  white-space: nowrap;
  flex-shrink: 0;
  border-radius: 999px;
}

/* 柱状图：收编为统一色板（去渐变，纯色扁平） */
.ldash .bar-fill { box-shadow: none; border-radius: 6px 6px 2px 2px; }
.ldash .bar-fill.bar-leave   { background: var(--skin-primary, #17402F); }
.ldash .bar-fill.bar-success { background: #4CA487; }
.ldash .bar-fill.bar-warn    { background: #D97706; }
.ldash .bar-fill.bar-danger  { background: #DC2626; }
html[data-theme="dark"] .ldash .bar-fill.bar-leave { background: #5FBF9E; }
.ldash .bar-val { font-weight: 600; color: var(--text-secondary); }

/* ---------- 弹窗详情 ---------- */
.ldash-detail {
  padding: 4px 0;
}

.ldash-detail-title {
  font-size: 1.05rem;
  font-weight: 700;
  color: var(--text);
  margin-bottom: 4px;
}

.ldash-detail-time {
  font-size: 0.78rem;
  color: var(--text-tertiary);
  margin-bottom: 14px;
}

.ldash-empty {
  text-align: center;
  padding: 30px;
  color: var(--text-tertiary);
  font-size: 0.88rem;
}

.ldash-student-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border-radius: 14px;
  background: var(--card-bg);
  border: 1px solid var(--border-light);
  box-shadow: var(--shadow-sm);
  margin-bottom: 8px;
  cursor: pointer;
  transition: transform var(--dur-fast) var(--ease-out-quart), box-shadow var(--dur-fast) var(--ease-out-quart);
}

.ldash-student-row:hover {
  transform: translateY(-1px);
  box-shadow: var(--shadow);
}

.ldash-student-name {
  font-weight: 600;
  font-size: 0.92rem;
  color: var(--text);
  flex-shrink: 0;
}

.ldash-student-tag {
  font-size: 0.72rem;
  padding: 3px 9px;
  border-radius: 999px;
  font-weight: 500;
  flex-shrink: 0;
  white-space: nowrap;
}

/* 标签色板（浅/深成对；青柠仅用于长假） */
.ldash-tag-time {
  background: #FBF0DC; color: #8A4A04;
}
html[data-theme="dark"] .ldash-tag-time {
  background: rgba(245, 192, 106, 0.16); color: #F5C06A;
}
.ldash-tag-long {
  background: var(--skin-cta, #D4F269); color: var(--skin-primary, #17402F);
}
.ldash-tag-short {
  background: var(--skin-primary-pale, #E7F1EC); color: var(--skin-primary, #14523F);
}
html[data-theme="dark"] .ldash-tag-short {
  background: rgba(95, 191, 158, 0.18); color: #8FD9BD;
}
.ldash-tag-active {
  background: var(--skin-primary-pale, #E7F1EC); color: var(--skin-primary, #14523F);
}
html[data-theme="dark"] .ldash-tag-active {
  background: rgba(95, 191, 158, 0.18); color: #8FD9BD;
}
.ldash-tag-upcoming {
  background: #FBF0DC; color: #8A4A04;
}
html[data-theme="dark"] .ldash-tag-upcoming {
  background: rgba(245, 192, 106, 0.16); color: #F5C06A;
}
.ldash-tag-ended {
  background: #FDECEC; color: #B91C1C;
}
html[data-theme="dark"] .ldash-tag-ended {
  background: rgba(220, 38, 38, 0.18); color: #F8A5A5;
}

.ldash-student-reason {
  font-size: 0.78rem;
  color: var(--text-tertiary);
  margin-left: auto;
}

.ldash-student-card {
  padding: 12px 14px;
  border-radius: 14px;
  background: var(--card-bg);
  border: 1px solid var(--border-light);
  box-shadow: var(--shadow-sm);
  margin-bottom: 10px;
  cursor: pointer;
  transition: transform var(--dur-fast) var(--ease-out-quart), box-shadow var(--dur-fast) var(--ease-out-quart);
}

.ldash-student-card:hover {
  transform: translateY(-1px);
  box-shadow: var(--shadow);
}

.ldash-student-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 6px;
}

.ldash-student-info {
  display: flex;
  gap: 16px;
  font-size: 0.78rem;
  color: var(--text-secondary);
  margin-bottom: 2px;
}

/* 长假天数徽标：青柠底 + 深绿字（两模式通用） */
.ldash-days {
  font-weight: 700;
  font-size: 0.88rem;
  font-variant-numeric: tabular-nums;
  color: var(--skin-primary, #17402F);
  background: var(--skin-cta, #D4F269);
  padding: 1px 9px;
  border-radius: 999px;
  margin-left: auto;
}

/* 平板：四指标压成两行 */
@media (max-width: 1024px) and (min-width: 641px) {
  .ldash-cards-4 {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* 移动端适配 */
@media (max-width: 640px) {
  .ldash {
    padding: 12px;
    padding-bottom: 80px;
    border-radius: 20px;
  }

  .ldash-title {
    font-size: 1.2rem;
  }

  .ldash-cards,
  .ldash-cards-4 {
    grid-template-columns: 1fr;
    gap: 10px;
  }

  .ldash-card {
    flex-direction: row;
    align-items: center;
    gap: 12px;
    text-align: left;
    padding: 14px 16px;
    flex-wrap: wrap;
  }

  .ldash-card-num {
    font-size: 1.6rem;
  }

  /* 主卡在手机上保持左对齐横排 */
  .ldash-card-warn { border-radius: 16px; }

  /* 手机上说明文字跟随数字同行，避免撑高卡片 */
  .ldash-card-hint {
    border-top: none;
    padding-top: 0;
    margin-top: 0;
    flex-basis: 100%;
  }

  .ldash-charts {
    grid-template-columns: 1fr;
  }
}

/* UICraft: leave dashboard touch optimization */
.leave-card, .leave-stat-card, .leave-month-item {
  -webkit-tap-highlight-color: transparent;
}
.leave-card:active, .leave-stat-card:active {
  transform: scale(0.98);
}


/* ---------- 同步按钮：胶囊形，深林绿（暗色反转为亮绿） ---------- */
.ldash-header-right {
  display: flex;
  align-items: center;
  gap: 12px;
}

.ldash-btn-sync {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 16px;
  border: none;
  border-radius: 999px;
  background: var(--skin-primary, #17402F);
  color: #FFFFFF;
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  transition: transform 0.15s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.15s cubic-bezier(0.16, 1, 0.3, 1), background 0.15s cubic-bezier(0.16, 1, 0.3, 1);
  -webkit-tap-highlight-color: transparent;
  white-space: nowrap;
}
.ldash-btn-sync:hover { background: #1F5138; }
.ldash-btn-sync:active {
  transform: scale(0.96);
}
.ldash-btn-sync:disabled {
  opacity: 0.6;
  cursor: wait;
}
html[data-theme="dark"] .ldash-btn-sync {
  background: #5FBF9E;
  color: #0E2B23;
}
.ldash-spinner {
  display: inline-block;
  width: 14px;
  height: 14px;
  border: 2px solid rgba(255,255,255,0.3);
  border-top-color: #fff;
  border-radius: 50%;
  animation: ldash-spin 0.8s linear infinite;
}
html[data-theme="dark"] .ldash-spinner {
  border-color: rgba(14, 43, 35, 0.25);
  border-top-color: #0E2B23;
}
@keyframes ldash-spin { to { transform: rotate(360deg); } }

@media (max-width: 600px) {
  .ldash-header {
    flex-direction: column;
    align-items: flex-start;
    gap: 8px;
  }
  .ldash-btn-sync {
    font-size: 12px;
    padding: 5px 12px;
  }
}

/* 窄屏：日期区间+新建学期按钮换行，按钮不被截断 */
@media (max-width: 540px) {
  .ldash-chart-header { flex-wrap: wrap; }
  .ldash-term-select { flex-wrap: wrap; width: 100%; row-gap: 6px; }
  .ldash-new-term-btn { margin-left: 0; width: 100%; text-align: center; padding: 8px 12px; font-size: 0.82rem; }
}

/* ---------- 深绿主卡（在校人数 hero） ---------- */
.ldash-hero {
  background: var(--skin-primary, #17402F);
  border-radius: 20px;
  padding: 16px 16px 14px;
  margin-bottom: 12px;
}
.ldash-hero-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 6px;
}
.ldash-hero-label { font-size: 11px; color: color-mix(in srgb, var(--skin-primary, #17402F) 45%, #fff); }
.ldash-hero-pill {
  background: var(--skin-cta, #D4F269);
  border-radius: 999px;
  padding: 2px 9px;
  font-size: 10px;
  color: var(--skin-primary, #17402F);
  font-weight: 500;
}
.ldash-hero-num {
  font-size: 30px;
  font-weight: 700;
  color: #FFFFFF;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}
.ldash-hero-unit { font-size: 13px; font-weight: 500; color: color-mix(in srgb, var(--skin-primary, #17402F) 45%, #fff); margin-left: 3px; }
.ldash-hero-cap { font-size: 12px; font-weight: 400; color: color-mix(in srgb, var(--skin-primary, #17402F) 45%, #fff); margin-left: 8px; }
.ldash-hero-meta {
  display: flex;
  gap: 14px;
  margin-top: 6px;
  font-size: 11px;
  color: #C4D9CD;
}
.ldash-hero-tiles {
  display: flex;
  gap: 8px;
  margin-top: 12px;
}
.ldash-tile {
  flex: 1;
  min-width: 0;
  background: color-mix(in srgb, var(--skin-primary, #17402F) 82%, #fff);
  border-radius: 12px;
  padding: 8px 0;
  text-align: center;
  cursor: pointer;
  transition: transform 0.15s cubic-bezier(0.16, 1, 0.3, 1);
}
.ldash-tile:active { transform: scale(0.96); }
.ldash-tile-num {
  display: block;
  font-size: 15px;
  font-weight: 700;
  color: #FFFFFF;
  font-variant-numeric: tabular-nums;
}
.ldash-tile-num-lime { color: var(--skin-cta, #D4F269); }
.ldash-tile-label {
  display: block;
  margin-top: 1px;
  font-size: 10px;
  color: color-mix(in srgb, var(--skin-primary, #17402F) 45%, #fff);
}

/* ---------- 双卡行（长期在册 / 长假累计） ---------- */
.ldash-cards-2 { grid-template-columns: repeat(2, 1fr); }
.ldash-wide { grid-column: 1 / -1; }
.ldash-chart-note { font-size: 11px; color: var(--text-tertiary); white-space: nowrap; }

/* 青柠高亮柱（近7日峰值日） */
.ldash .bar-fill.bar-lime { background: #D4F269; }
.ldash .bar-fill.bar-lime { border-radius: 6px 6px 2px 2px; }

/* ---------- 今日请假名单卡 ---------- */
.ldash-list-card {
  background: var(--card-bg);
  border: 1px solid var(--border-light);
  border-radius: 20px;
  padding: 14px 16px;
  margin-top: 12px;
  box-shadow: var(--shadow);
}
.ldash-list-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}
.ldash-list-head .ldash-chart-title { margin: 0; }
.ldash-list-more {
  font-size: 12px;
  color: var(--text-tertiary);
  cursor: pointer;
}
.ldash-list-more:hover { color: var(--primary); }
.ldash-list-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 0;
  border-bottom: 1px solid var(--border-light);
  cursor: pointer;
}
.ldash-list-row:last-child { border-bottom: none; }
.ldash-avatar {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: var(--skin-primary-pale, #EAF2E3);
  color: var(--skin-primary, #17402F);
  font-size: 13px;
  font-weight: 500;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
html[data-theme="dark"] .ldash-avatar {
  background: rgba(95, 191, 158, 0.16);
  color: #8FD9BD;
}
.ldash-list-main { flex: 1; min-width: 0; }
.ldash-list-name {
  margin: 0;
  font-size: 13px;
  font-weight: 600;
  color: var(--text);
}
.ldash-list-sub {
  margin: 1px 0 0;
  font-size: 11px;
  color: var(--text-tertiary);
}
.ldash-empty-sm { padding: 16px; font-size: 0.82rem; }

/* 移动端：双卡变单卡，hero 数字略缩 */
@media (max-width: 640px) {
  .ldash-cards-2 { grid-template-columns: 1fr; }
  .ldash-hero { border-radius: 16px; }
  .ldash-hero-num { font-size: 27px; }
}

/* ============================================================
   LINE_V2（2026-10-11 晚）：近30日请假人数折线图
   横向滚动容器 + SVG 折线；颜色走换肤色板，深色自动切亮绿
   ============================================================ */
.ldash .ldash-line-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: thin; }
.ldash .ldash-line-scroll::-webkit-scrollbar { height: 6px; }
.ldash .ldash-line-scroll::-webkit-scrollbar-thumb { background: #C5D9C0; border-radius: 3px; }
.ldash .ldash-line-svg { display: block; }
.ldash .ldash-line-axis { stroke: var(--skin-border, #DCE5D6); stroke-width: 1; }
.ldash .ldash-line-area { fill: url(#ldash-area); }
.ldash .ldash-area-s1 { stop-color: var(--skin-primary, #1E5A40); stop-opacity: 0.22; }
.ldash .ldash-area-s2 { stop-color: var(--skin-primary, #1E5A40); stop-opacity: 0.02; }
.ldash .ldash-line-main { stroke: var(--skin-primary, #1E5A40); fill: none; stroke-width: 2.4; stroke-linejoin: round; stroke-linecap: round; }
.ldash .ldash-line-dot { fill: var(--skin-primary, #17402F); }
.ldash .ldash-line-dot-today { fill: var(--skin-cta, #D4F269); stroke: var(--skin-primary, #17402F); stroke-width: 1.6; }
.ldash .ldash-line-val { font-size: 10px; font-weight: 600; fill: var(--skin-primary, #17402F); }
.ldash .ldash-line-date { font-size: 10px; fill: var(--skin-text-2, #6B655C); }
.ldash .ldash-line-today { margin-top: 6px; font-size: 12px; color: var(--skin-text-2, #6B655C); text-align: right; }
html[data-theme="dark"] .ldash .ldash-line-scroll::-webkit-scrollbar-thumb { background: #3A3833; }
html[data-theme="dark"] .ldash .ldash-line-axis { stroke: #3A3833; }
html[data-theme="dark"] .ldash .ldash-area-s1 { stop-color: #5FBF9E; stop-opacity: 0.25; }
html[data-theme="dark"] .ldash .ldash-area-s2 { stop-color: #5FBF9E; stop-opacity: 0.02; }
html[data-theme="dark"] .ldash .ldash-line-main { stroke: #5FBF9E; }
html[data-theme="dark"] .ldash .ldash-line-dot { fill: #5FBF9E; }
html[data-theme="dark"] .ldash .ldash-line-dot-today { fill: #D4F269; stroke: #5FBF9E; }
html[data-theme="dark"] .ldash .ldash-line-val { fill: #F0EDE7; }
html[data-theme="dark"] .ldash .ldash-line-date { fill: #A8A296; }
html[data-theme="dark"] .ldash .ldash-line-today { color: #A8A296; }

/* TYPE_V2：当月请假类型去红柱说明——色板改由 JS 下发（bar-warn/bar-leave/bar-success/bar-lime），
   bar-danger 样式保留但不再被引用 */

/* ============================================================
   SKIN_ENGINE_V1 深色锁值（2026-10-21）：浅色换肤不影响深色。
   以下把被 var() 化规则在深色下的表现锁回原字面值，深色零变化。
   ============================================================ */
html[data-theme="dark"] .ldash-card-warn { background: #17402F; border-color: #17402F; }
html[data-theme="dark"] .ldash-tag-long { background: #D4F269; color: #17402F; }
html[data-theme="dark"] .ldash-days { color: #17402F; background: #D4F269; }
html[data-theme="dark"] .ldash-btn-sync { background: #17402F; }
html[data-theme="dark"] .ldash-hero { background: #17402F; }
html[data-theme="dark"] .ldash-hero-pill { background: #D4F269; color: #17402F; }
html[data-theme="dark"] .ldash-avatar { background: #EAF2E3; color: #17402F; }
html[data-theme="dark"] .ldash .ldash-line-axis { stroke: #DCE5D6; }
html[data-theme="dark"] .ldash .ldash-area-s1 { stop-color: #1E5A40; }
html[data-theme="dark"] .ldash .ldash-area-s2 { stop-color: #1E5A40; }
html[data-theme="dark"] .ldash .ldash-line-main { stroke: #1E5A40; }
html[data-theme="dark"] .ldash .ldash-line-dot { fill: #17402F; }
html[data-theme="dark"] .ldash .ldash-line-dot-today { fill: #D4F269; stroke: #17402F; }
html[data-theme="dark"] .ldash .ldash-line-val { fill: #17402F; }
html[data-theme="dark"] .ldash .ldash-line-date { fill: #6B655C; }
html[data-theme="dark"] .ldash .ldash-line-today { color: #6B655C; }

/* REC/LDASH 深色锁值（2026-10-21）：看板 hero 三卡/辅助字锁回原深色表现 */
html[data-theme="dark"] .ldash-tile { background: #1F5138; }
html[data-theme="dark"] .ldash-tile-label,
html[data-theme="dark"] .ldash-hero-label,
html[data-theme="dark"] .ldash-hero-unit,
html[data-theme="dark"] .ldash-hero-cap { color: #9DC3AE; }
