/* ===== Web 后台管理端 布局样式 ===== */
.admin-body{background:var(--bg);}
.admin-layout{display:flex;min-height:100vh;}

/* 左侧菜单 */
/* 左侧菜单：默认约占 15% 宽（140~240px）；拖拽调整后由 --sidebar-w /
   --sidebar-w-max 两个变量覆盖，变量由 admin_base.html 写入 <html> */
.admin-sidebar{position:relative;width:var(--sidebar-w,15%);min-width:140px;max-width:var(--sidebar-w-max,240px);background:#1B5E20;color:#fff;flex-shrink:0;display:flex;flex-direction:column;}
.sidebar-brand{padding:18px 16px;border-bottom:1px solid rgba(255,255,255,.12);display:flex;align-items:center;gap:10px;}
.brand-logo{font-size:28px;}
.brand-text{font-size:15px;font-weight:600;line-height:1.3;}
.brand-text small{font-size:11px;font-weight:400;opacity:.75;display:block;}
.sidebar-menu{flex:1;overflow-y:auto;padding:8px 0;}
.menu-group{padding:12px 16px 6px;font-size:11px;color:rgba(255,255,255,.5);letter-spacing:1px;}
.menu-item{display:flex;align-items:center;gap:8px;padding:10px 16px;color:rgba(255,255,255,.85);font-size:14px;cursor:pointer;transition:.15s;white-space:nowrap;}
.menu-item:hover{background:rgba(255,255,255,.08);color:#fff;}
.menu-item span{font-size:16px;}
.menu-item.active{background:var(--accent);color:#fff;font-weight:600;}
/* 侧边栏底部出口：与菜单区隔开，固定吸底 */
.sidebar-back{border-top:1px solid rgba(255,255,255,.12);}
/* 侧边栏左下角版本号 */
.sidebar-version{padding:6px 16px 14px;font-size:10px;line-height:1.4;color:rgba(255,255,255,.45);text-align:left;}
/* 侧栏宽度拖拽条：贴右边缘，按住可左右拖动 */
.sidebar-resizer{position:absolute;top:0;right:-3px;width:6px;height:100%;cursor:col-resize;z-index:5;}
.sidebar-resizer:hover,.sidebar-resizer.dragging{background:rgba(255,255,255,.28);}
/* 拖拽过程中锁定光标与文本选择，避免拖动时选中文字 */
body.resizing{cursor:col-resize;user-select:none;}

/* 主区域 */
.admin-main{flex:1;display:flex;flex-direction:column;min-width:0;}
.admin-header{height:56px;background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 20px;}
.breadcrumb{font-size:14px;color:var(--text-2);}
.header-right{display:flex;align-items:center;gap:16px;}
.header-tip{font-size:13px;color:var(--primary);font-weight:600;}
.header-user{display:flex;align-items:center;gap:8px;font-size:14px;}
.avatar{width:30px;height:30px;background:var(--primary);color:#fff;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:15px;}
.logout{color:var(--danger);font-size:13px;margin-left:6px;}

.admin-content{padding:20px;flex:1;overflow-y:auto;}
.admin-footer{padding:10px 20px;font-size:12px;color:var(--text-2,#888);
  text-align:center;border-top:1px solid var(--border,#eee);
  display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;}
.admin-footer .footer-icp{color:var(--text-2,#888);}

/* 列表页通用：筛选条 + 工具条 */
.page-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px;}
.page-toolbar .input,.page-toolbar .select{width:auto;}
.filter-group{display:flex;align-items:center;gap:8px;}
.page-title{font-size:18px;font-weight:600;margin-bottom:16px;}

/* 统计卡片（仪表盘） */
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:16px;}
.stat-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;}
.stat-label{font-size:13px;color:var(--text-3);margin-bottom:8px;}
.stat-value{font-size:26px;font-weight:700;color:var(--text);}
.stat-value small{font-size:13px;color:var(--text-3);font-weight:400;margin-left:4px;}
.stat-sub{font-size:12px;color:var(--text-3);margin-top:6px;}

/* 仪表盘两栏 */
.dash-grid{display:grid;grid-template-columns:2fr 1fr;gap:16px;margin-bottom:16px;}
.dash-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px;}

/* 简单条形图占位 */
.bar-row{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:13px;}
.bar-track{flex:1;background:#F0F2F5;border-radius:4px;height:14px;overflow:hidden;}
.bar-fill{height:100%;background:linear-gradient(90deg,var(--primary),var(--accent));}
.bar-val{width:40px;text-align:right;color:var(--text-2);}

/* 排期日历 */
.cal-body{display:flex;border:1px solid var(--border);border-radius:6px;overflow:hidden;background:#fff;}
.cal-time-axis{width:70px;flex-shrink:0;border-right:1px solid var(--border);}
.cal-time{height:48px;line-height:48px;text-align:right;padding-right:8px;font-size:12px;color:var(--text-3);border-bottom:1px dashed var(--border);}
.cal-field{flex:1;position:relative;min-height:716px;}
.cal-field + .cal-field{border-left:1px solid var(--border);}
.cal-field-title{height:44px;display:flex;align-items:center;justify-content:center;font-weight:600;background:#FAFAFA;border-bottom:1px solid var(--border);}
.cal-hour-line{position:absolute;left:0;right:0;height:48px;border-bottom:1px dashed var(--border);pointer-events:none;}
.cal-block{position:absolute;left:6px;right:6px;border-radius:4px;padding:3px 8px;font-size:12px;color:#fff;cursor:pointer;overflow:hidden;z-index:3;}
.cal-block.order{background:var(--success);}
.cal-block.lock{background:var(--warning);}
.cal-block.maintain{background:var(--danger);}
.cal-slot{position:absolute;left:0;right:0;height:48px;z-index:1;cursor:pointer;background:transparent;transition:background .12s;}
.cal-slot:hover{background:rgba(22,119,255,.12);}
.cal-slot.picked{background:rgba(22,119,255,.22);box-shadow:inset 0 0 0 2px var(--accent);}
.book-bar{position:fixed;left:calc(15% + 16px);right:16px;bottom:16px;min-width:0;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 6px 24px rgba(0,0,0,.12);z-index:50;padding:12px 16px;display:none;}
.book-bar.show{display:block;}
.book-inner{display:flex;gap:16px;align-items:stretch;}
.book-items{flex:1;max-height:150px;overflow-y:auto;border:1px solid var(--border);border-radius:6px;padding:8px 12px;font-size:13px;}
.book-item{display:flex;gap:10px;align-items:center;padding:3px 0;white-space:nowrap;}
.book-item .x{margin-left:auto;color:var(--danger);cursor:pointer;}
.book-side{width:250px;display:flex;flex-direction:column;gap:8px;justify-content:space-between;}
.book-total{font-size:15px;font-weight:700;color:var(--accent);}
.book-actions{display:flex;gap:8px;justify-content:flex-end;}
.cal-legend{display:flex;gap:16px;font-size:12px;color:var(--text-2);margin-top:12px;}
.cal-legend .dot{width:10px;height:10px;border-radius:2px;display:inline-block;margin-right:4px;vertical-align:middle;}

/* ===== 日 / 周 / 月 视图切换 ===== */
.view-switch{display:inline-flex;border:1px solid var(--border);border-radius:6px;overflow:hidden;margin-right:8px;}
.view-switch .vbtn{padding:6px 14px;font-size:13px;color:var(--text-2);background:#fff;border-right:1px solid var(--border);cursor:pointer;}
.view-switch .vbtn:last-child{border-right:none;}
.view-switch .vbtn:hover{background:#F2F3F5;}
.view-switch .vbtn.active{background:var(--primary);color:#fff;font-weight:600;}

/* 单元格空白处整格跳转（覆盖在内容下方，铺满格子） */
.cell-link{position:absolute;inset:0;z-index:0;}

/* 概览事件条目（周/月通用）：左侧色条 + 深色文字，非白底细字 */
.ev{position:relative;z-index:1;margin:2px 0;padding:2px 6px;font-size:12px;line-height:1.4;
  border-radius:3px;background:#F2F3F5;color:var(--text);border-left:3px solid var(--text-3);cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ev.order{background:#F0FBE6;border-left-color:var(--success);}
.ev.lock{background:#FFF7E6;border-left-color:var(--warning);}
.ev.maintain{background:#FFF1F0;border-left-color:var(--danger);}
.ev:hover{filter:brightness(.96);}

/* ===== 周视图 ===== */
.week-grid{display:grid;grid-template-columns:120px repeat(7,1fr);border:1px solid var(--border);border-radius:6px;overflow:hidden;}
.wk-corner{display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--text-3);
  background:#FAFAFA;border-right:1px solid var(--border);border-bottom:1px solid var(--border);padding:8px;}
.wk-head{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 4px;background:#FAFAFA;
  border-right:1px solid var(--border);border-bottom:1px solid var(--border);}
.wk-head:last-child{border-right:none;}
.wk-head .wk-wd{font-size:12px;color:var(--text-3);}
.wk-head .wk-d{font-size:13px;font-weight:600;}
.wk-row-label{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  font-size:14px;font-weight:700;background:#FCFCFC;border-right:1px solid var(--border);border-bottom:1px solid var(--border);padding:8px 4px;}
.wk-row-label small{font-size:11px;font-weight:400;color:var(--text-3);text-align:center;}
.wk-cell{position:relative;min-height:72px;padding:4px;border-right:1px solid var(--border);border-bottom:1px solid var(--border);}
.wk-cell:nth-child(8n){border-right:none;}
.wk-cell:hover{background:#FAFBFF;}
.wk-head.weekend,.wk-cell.weekend{background:#FAFAFA;}
.wk-cell.weekend:hover{background:#F5F5F5;}
.wk-head.today .wk-d,.wk-head.today .wk-wd{color:var(--primary);}
.wk-cell.today{box-shadow:inset 0 0 0 2px var(--primary);}

/* ===== 月视图 ===== */
.month-grid{display:grid;grid-template-columns:repeat(7,1fr);border:1px solid var(--border);border-radius:6px;overflow:hidden;}
.month-cell{position:relative;min-height:108px;border-right:1px solid var(--border);border-bottom:1px solid var(--border);padding:4px;}
.month-cell:nth-child(7n){border-right:none;}
.month-cell:hover{background:#FAFBFF;}
.month-cell .mc-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:2px;}
.month-cell .mc-date{font-size:14px;font-weight:600;}
.month-cell .mc-wd{font-size:11px;color:var(--text-3);}
.month-cell .mc-body{position:relative;z-index:1;display:flex;flex-direction:column;}
.month-cell.weekend{background:#FAFAFA;}
.month-cell.weekend:hover{background:#F5F5F5;}
.month-cell.today .mc-date{color:var(--primary);}
.month-cell.today{box-shadow:inset 0 0 0 2px var(--primary);}
.month-cell.outside{background:#F7F8FA;}
.month-cell.outside .mc-date,.month-cell.outside .mc-wd{color:#B8BCC4;}

/* 弹窗/抽屉 */
.dialog-mask{position:fixed;inset:0;background:rgba(0,0,0,.4);display:none;align-items:center;justify-content:center;z-index:100;}
.dialog-mask.show{display:flex;}
.dialog{background:#fff;border-radius:10px;width:440px;max-width:94vw;padding:20px;box-shadow:0 12px 40px rgba(0,0,0,.2);}
.dialog-title{font-size:16px;font-weight:600;margin-bottom:16px;}
.dialog-footer{display:flex;justify-content:flex-end;gap:10px;margin-top:20px;}

/* 详情描述 */
.detail-list{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:4px 0;}
.detail-row{display:flex;padding:12px 18px;border-bottom:1px solid var(--border);font-size:14px;}
.detail-row:last-child{border-bottom:none;}
.detail-row .k{width:120px;color:var(--text-3);flex-shrink:0;}
.detail-row .v{flex:1;color:var(--text);}

/* ===== 响应式：随浏览器宽度自适应 ===== */
/* 中屏：统计卡片 2 列 */
@media (max-width:1200px){
  .stat-grid{grid-template-columns:repeat(2,1fr);}
}

/* 窄屏 / 小窗口：两栏改单栏（侧栏保持 15% 宽，不收成图标栏） */
@media (max-width:900px){
  .dash-grid,.dash-grid-2{grid-template-columns:1fr;}
  .book-inner{flex-direction:column;}
  .book-side{width:100%;}
}

/* 更窄：日历改为纵向堆叠场地，避免列被挤没 */
@media (max-width:760px){
  .stat-grid{grid-template-columns:1fr;}
  .cal-body{flex-direction:column;}
  .cal-time-axis{display:none;}
  .cal-field + .cal-field{border-left:none;border-top:1px solid var(--border);}
  .book-bar{left:12px;right:12px;}
  .book-actions{flex-wrap:wrap;}
}
