:root{
  --bg:#f4f6fb; --card:#fff; --ink:#1e2433; --ink-2:#6b7488; --ink-3:#a3abbb;
  --line:#e6eaf2; --grid-line:#eef1f7; --brand:#1e2433;
  --tw:48px;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB","Helvetica Neue",Arial,sans-serif;
  background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;
  padding:16px 12px 48px;
}
.wrap{max-width:1180px;margin:0 auto}

/* ---------- 顶部工具条 ---------- */
.top{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  flex-wrap:wrap;margin-bottom:14px;
}
.brand{font-size:17px;font-weight:800;letter-spacing:.5px}
.brand small{display:block;font-size:11px;font-weight:400;color:var(--ink-3);margin-top:2px}
.acts{display:flex;gap:6px;flex-wrap:wrap}
.btn{
  display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);
  background:#fff;color:var(--ink);padding:7px 12px;border-radius:9px;
  font-size:13px;cursor:pointer;font-family:inherit;transition:.15s;
}
.btn:hover{border-color:#c9d2e3}
.btn-primary{background:var(--brand);color:#fff;border-color:var(--brand)}
.btn-primary:hover{background:#343c4d;border-color:#343c4d}
.btn-danger{color:#dc2626}
.btn svg{width:14px;height:14px}

/* ---------- 录入区 ---------- */
.panel{
  background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:14px;margin-bottom:14px;box-shadow:0 1px 3px rgba(20,30,60,.05);
}
.panel h3{font-size:14px;font-weight:700;margin-bottom:10px;display:flex;align-items:center;gap:8px}
.panel h3 .tag{font-size:11px;font-weight:500;color:var(--ink-3)}

/* ---------- Sheet 页签 ---------- */
.tabbar{display:flex;align-items:center;gap:6px;border-bottom:1px solid var(--line);margin:-2px -4px 12px;padding:0 4px}
.tabbar .sp{flex:1}
.tab{
  border:none;background:none;padding:9px 14px;font-size:14px;font-weight:600;color:var(--ink-3);
  cursor:pointer;font-family:inherit;position:relative;transition:color .15s;
}
.tab:hover{color:var(--ink-2)}
.tab.on{color:var(--brand)}
.tab.on::after{content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:2.5px;border-radius:2px;background:var(--brand)}
.tabpane{min-height:80px}
.pane-tip{font-size:12.5px;color:var(--ink-2);line-height:1.7;margin:0 0 10px}
.pane-tip code{background:#f1f5f9;padding:1px 6px;border-radius:5px;font-size:11px;color:#475569}

/* +孩子按钮：醒目色，页签最左 */
.btn.btn-addkid{
  background:#ec4899;border-color:#ec4899;color:#fff;font-weight:700;
  padding:7px 14px;border-radius:10px;box-shadow:0 2px 8px rgba(236,72,153,.35);
}
.btn.btn-addkid:hover{background:#db2777;border-color:#db2777}

/* 开始识别按钮：请求中状态 */
#smart-go:disabled{
  opacity:.6;cursor:not-allowed;background:#6b7488;border-color:#6b7488;
}

/* 冲突课程强提醒：持续闪烁 */
@keyframes conflictBlink{
  0%,100%{outline:3px solid #dc2626;box-shadow:0 0 0 0 rgba(220,38,38,.7)}
  50%{outline:3px solid rgba(220,38,38,.15);box-shadow:0 0 0 6px rgba(220,38,38,0)}
}
.cls.conflict{animation:conflictBlink 1s ease-in-out infinite}

/* ---------- 课程卡片：点击弹出删除叉 ---------- */
.cls{cursor:pointer}
.cls .del{
  position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;
  border:none;background:rgba(255,255,255,.92);color:#dc2626;font-size:13px;line-height:1;
  cursor:pointer;font-family:inherit;display:none;place-items:center;padding:0;
  box-shadow:0 1px 4px rgba(15,23,42,.3);
}
.cls .del:hover{background:#fff;color:#991b1b}
.cls.sel{outline:2.5px solid #1e2433;outline-offset:1px;z-index:5}
.cls.sel .del{display:grid}
.cls.sel .del:hover{transform:scale(1.08)}

/* ---------- 模态二次确认框 ---------- */
.modal{position:fixed;inset:0;background:rgba(15,23,42,.5);z-index:300;display:flex;align-items:center;justify-content:center;padding:16px}
.modal-box{background:#fff;border-radius:16px;width:100%;max-width:340px;box-shadow:0 20px 60px rgba(15,23,42,.28);padding:20px 18px 16px;animation:modalIn .18s ease-out}
@keyframes modalIn{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
.modal-box p{font-size:14.5px;line-height:1.7;color:var(--ink);margin-bottom:16px;text-align:center}
.modal-btns{display:flex;gap:8px}
.modal-btns .btn{flex:1;justify-content:center;padding:10px 0;border-radius:11px;font-size:14.5px}
.btn-del{background:#dc2626;border-color:#dc2626;color:#fff;font-weight:700}
.btn-del:hover{background:#b91c1c;border-color:#b91c1c}

/* ---------- 课表预览区孩子名双击可改 ---------- */
.who h2{cursor:default;user-select:none;border-radius:6px;padding:1px 6px;margin-left:-6px}
.who h2[contenteditable]{cursor:text;outline:2px dashed var(--kc);background:rgba(0,0,0,.04)}

/* ---------- 孩子昵称双击编辑 ---------- */
.kc-head .kidname{cursor:default;user-select:none}
.kc-head .kidname[contenteditable]{cursor:text;background:#334155;outline:none;box-shadow:0 0 0 3px rgba(255,255,255,.35)}
.kc-head .kidname small{font-weight:400;font-size:10px;opacity:.75;margin-left:4px}

.kidcard{border:1px solid var(--line);border-radius:12px;padding:12px;margin-bottom:10px;background:#fcfdff}
.kidcard:last-child{margin-bottom:0}
.kc-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.kc-head .kidname{
  border-radius:8px;padding:5px 12px;font-size:14px;font-weight:700;
  color:#fff;background:var(--kc);font-family:inherit;letter-spacing:.5px;
}
.kc-head .kidname::after{content:"";}
.themes{display:flex;gap:5px}
.themes button{
  width:20px;height:20px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0;
}
.themes button.on{border-color:var(--ink)}
.kc-head .sp{flex:1}

.kc-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.days{display:flex;gap:4px}
.days button{
  width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:#fff;
  font-size:12.5px;cursor:pointer;color:var(--ink-2);font-family:inherit;padding:0;
}
.days button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.kc-form input[type=time]{
  border:1px solid var(--line);border-radius:8px;padding:6px 6px;font-size:13px;font-family:inherit;
  background:#fff;color:var(--ink);height:30px;
}
/* 科目搜索框 */
.subjbox{position:relative;display:flex;align-items:center}
.subjbox .sdot{
  position:absolute;left:9px;width:8px;height:8px;border-radius:50%;background:#cbd5e1;
  transition:background .15s;pointer-events:none;
}
.kc-form input.subj{
  border:1px solid var(--line);border-radius:8px;padding:6px 10px 6px 24px;font-size:13px;font-family:inherit;
  height:30px;width:172px;background:#fff;color:var(--ink);
}
.kc-form input.subj:focus{outline:none;border-color:#8ea3c8;box-shadow:0 0 0 3px rgba(63,94,170,.1)}
.subj-pop{
  display:none;position:absolute;left:0;top:34px;width:260px;max-height:298px;overflow:auto;
  background:#fff;border:1px solid var(--line);border-radius:10px;z-index:50;
  box-shadow:0 10px 26px rgba(15,23,42,.14);padding:4px;
}
.subj-pop .pp-t{
  font-size:11px;color:var(--ink-3);padding:5px 8px 4px;letter-spacing:.3px;
}
.subj-pop .pp-item{
  display:flex;align-items:center;gap:7px;padding:6px 8px;border-radius:7px;cursor:pointer;font-size:13px;
}
.subj-pop .pp-item i{width:9px;height:9px;border-radius:3px;flex:none}
.subj-pop .pp-item b{font-weight:600;color:var(--ink);flex:none}
.subj-pop .pp-item span{color:var(--ink-3);font-size:11px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.subj-pop .pp-item em{
  font-style:normal;font-size:10px;color:var(--ink-3);background:#f3f6fb;
  padding:1px 5px;border-radius:5px;flex:none;
}
.subj-pop .pp-item.on,.subj-pop .pp-item:hover{background:#eef3fc}
.subj-pop .pp-empty{padding:14px 10px;font-size:12.5px;color:var(--ink-2);text-align:center;line-height:1.6}
.subj-pop .pp-empty span{color:var(--ink-3);font-size:11px}
.sep{color:var(--ink-3);font-size:12px}
/* 敏感词即时提示：输入框下方红字 */
.subj-warn{
  display:none;width:100%;margin-top:5px;padding:6px 10px;border-radius:8px;
  background:#fef2f2;border:1px solid #fecaca;color:#dc2626;font-size:12.5px;line-height:1.5;
}
.kc-form input.subj.bad{border-color:#dc2626;box-shadow:0 0 0 3px rgba(220,38,38,.12)}
.quick{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:10px}
.quick button{
  border:1px dashed var(--line);background:#fff;border-radius:20px;padding:3px 10px;
  font-size:11.5px;color:var(--ink-2);cursor:pointer;font-family:inherit;
}
.quick button:hover{border-style:solid;border-color:#c9d2e3}
.quick button.more{border-style:solid;border-color:#dbe3f0;color:#4f6ea8;font-weight:600}

.kc-list{list-style:none;border-top:1px dashed var(--line);padding-top:8px}
.kc-list li{
  display:flex;align-items:center;gap:8px;padding:5px 2px;font-size:13px;border-bottom:1px solid #f5f7fb;
}
.kc-list li:last-child{border-bottom:none}
.kc-list .d{width:34px;color:var(--ink-2);font-size:12px;flex:none}
.kc-list .t{width:96px;color:var(--ink-2);font-size:12px;flex:none;font-variant-numeric:tabular-nums}
.kc-list .n{flex:1;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kc-list .sw{width:9px;height:9px;border-radius:3px;flex:none}
.kc-list .x{
  border:none;background:none;color:var(--ink-3);cursor:pointer;font-size:16px;line-height:1;
  padding:2px 5px;font-family:inherit;
}
.kc-list .x:hover{color:#dc2626}
.kc-list .warn{color:#dc2626;font-size:11px}
.empty{color:var(--ink-3);font-size:12.5px;padding:8px 2px}

.hint{font-size:11.5px;color:var(--ink-3);line-height:1.7;margin-top:8px}

/* ---------- 课表卡片 ---------- */
.kid{
  background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:14px 14px 12px;margin-bottom:14px;position:relative;overflow:hidden;
  box-shadow:0 1px 3px rgba(20,30,60,.05);
}
.kid::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--kc)}
.kid-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.who{display:flex;align-items:center;gap:10px}
.avatar{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-size:16px;font-weight:700;color:#fff;flex:none;background:var(--kc)}
.who h2{font-size:18px;font-weight:700;letter-spacing:1px}
.who .sub{font-size:11.5px;color:var(--ink-3);margin-top:2px}
.stats{display:flex;gap:6px;flex-wrap:wrap}
.stat{border:1px solid var(--line);border-radius:8px;padding:5px 10px;text-align:center;min-width:66px;background:#fbfcfe}
.stat b{display:block;font-size:14.5px;font-weight:700;line-height:1.2;color:var(--kc)}
.stat span{font-size:10.5px;color:var(--ink-3)}

.sched{display:grid;grid-template-columns:var(--tw) repeat(7,minmax(0,1fr));border:1px solid var(--line);border-radius:10px;overflow:hidden}
.sched .h{padding:6px 2px;font-size:12px;font-weight:600;text-align:center;border-bottom:1px solid var(--line);border-left:1px solid var(--line);letter-spacing:.5px}
.sched .h.corner{border-left:none}
.sched .h{background:var(--ks);color:var(--kc)}
.sched-b{position:relative;grid-column:1/-1;display:grid;grid-template-columns:var(--tw) repeat(7,minmax(0,1fr));min-height:460px}
.glines{position:absolute;inset:0;pointer-events:none}
.glines i{position:absolute;left:0;right:0;height:1px;background:var(--grid-line)}
.tcol{border-right:1px solid var(--line);display:grid;grid-template-rows:1fr 1fr 1fr 1fr}
.tslot{border-bottom:1px dashed var(--grid-line);display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.15}
.tslot:last-child{border-bottom:none}
.tslot b{font-size:11.5px;font-weight:600;color:var(--ink-2)}
.tslot span{font-size:9px;color:var(--ink-3)}
.dcol{position:relative;border-left:1px solid var(--line)}
.dcol.we{background:#fafbfd}
.cls{
  position:absolute;left:3px;right:3px;border-radius:9px;padding:0 7px;color:#fff;min-height:36px;
  display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:8px;
  overflow:hidden;line-height:1.15;box-shadow:0 1px 3px rgba(15,23,42,.14);
}
.cls.conflict{outline:2px solid #dc2626;outline-offset:-2px}
.cls.pending{opacity:.75}
.cls .t{flex:none;font-size:11.5px;font-weight:500;opacity:.88;white-space:nowrap;letter-spacing:-.2px}
.cls .n{flex:1;text-align:right;font-size:15px;font-weight:700;letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.legend{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;padding-top:9px;border-top:1px dashed var(--line)}
.lg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-2);background:#fafbfd;border:1px solid var(--line);padding:3px 9px;border-radius:20px}
.dot{width:8px;height:8px;border-radius:50%;flex:none}

.notice{
  background:#fffbeb;border:1px solid #fde68a;color:#92400e;border-radius:10px;
  padding:9px 12px;font-size:12.5px;margin-bottom:12px;line-height:1.6;
}
.notice b{font-weight:700}

@media (max-width:820px){
  :root{--tw:40px}
  body{padding:12px 8px 32px}
  .kid{padding:11px 9px 10px}
  .sched .h{font-size:10.5px;padding:5px 1px;letter-spacing:0}
  .tslot b{font-size:10px}
  .tslot span{font-size:8px}
  .cls{padding:0 4px;border-radius:7px;min-height:28px;gap:4px}
  .cls .t{font-size:10px}
  .cls .n{font-size:12.5px;letter-spacing:0}
  .who h2{font-size:16px}
  .stat{min-width:56px;padding:4px 7px}
  .lg{font-size:10px;padding:2px 7px}
  .brand{font-size:15px}
}
/* ---------- 手机端：卡片两行式、字号加大 ---------- */
@media (max-width:560px){
  :root{--tw:36px}
  .kid{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .sched{min-width:600px}
  .kc-form input.subj{width:150px}
  .subj-pop{width:100%;min-width:200px}
  /* 课程卡片：上下两行，上时间下科目，字大 */
  .cls{flex-direction:column;justify-content:center;align-items:stretch;gap:2px;padding:3px 6px;min-height:44px}
  .cls .t{font-size:12px;line-height:1.2}
  .cls .n{font-size:16px;font-weight:700;text-align:center;line-height:1.25}
  .who h2{font-size:18px}
}

/* ---------- 打印：A4 横向 ---------- */
@media print{
  @page{size:A4 landscape;margin:5mm}
  *{-webkit-print-color-adjust:exact !important;print-color-adjust:exact !important;color-adjust:exact !important}
  html,body{background:#fff !important;padding:0;margin:0}
  .no-print{display:none !important}
  .wrap{max-width:none}
  :root{--tw:9mm}
  .kid{
    break-inside:avoid;page-break-inside:avoid;box-shadow:none;
    margin-bottom:1.5mm;padding:1.8mm 2.5mm 1.6mm;border:1px solid #d9dfe9;border-radius:2.5mm;
    height:var(--kidh,95mm);display:flex;flex-direction:column;
  }
  .kid.pb{break-after:page;page-break-after:always}
  .kid:last-child{margin-bottom:0}
  .tcol{min-height:0;overflow:hidden}
  .tslot{align-items:center;justify-content:center;overflow:hidden}
  .glines i{background:#eef1f7}
  .sched-b{position:relative;min-height:0}
  .sched{flex:1;min-height:0;display:grid;grid-template-columns:var(--tw) repeat(7,minmax(0,1fr));grid-template-rows:auto 1fr;border-radius:1.8mm}
  .sched-b{grid-column:1/-1;grid-row:2;min-height:0}
  .kid-head{margin-bottom:1.8mm;gap:3mm;flex-wrap:nowrap}
  .avatar{width:14px;height:14px;border-radius:3px;font-size:8px}
  .who{gap:2mm}
  .who h2{font-size:11pt;letter-spacing:0}
  .who .sub{font-size:6pt;margin-top:0}
  .stats{gap:2mm}
  .stat{padding:0.4mm 2mm;min-width:0;border-radius:1.5mm}
  .stat b{font-size:8pt;line-height:1.15}
  .stat span{font-size:5.8pt}
  .sched .h{padding:0.7mm 0.5mm;font-size:7.8pt;letter-spacing:0}
  .tslot{flex-direction:column;gap:0;border-bottom:1px dashed #eef1f7}
  .tslot b{font-size:7pt;line-height:1.25}
  .tslot span{font-size:5.6pt;line-height:1.25}
  .cls{left:0.6mm;right:0.6mm;border-radius:1.4mm;padding:0 1.4mm;gap:1mm;box-shadow:none;line-height:1;min-height:8.5mm;cursor:auto}
  .cls .del{display:none !important}
  .cls.sel{outline:none}
  .cls .t{font-size:6.4pt;letter-spacing:-.1pt}
  .cls .n{font-size:9.5pt;letter-spacing:0}
  .legend{margin-top:1.2mm;padding-top:1mm;gap:0.8mm}
  .lg{font-size:5.8pt;padding:0.2mm 1.8mm;gap:0.8mm;border-radius:3mm}
  .dot{width:5px;height:5px}
}

/* ============ 智能导入（sheet 内嵌） ============ */
#smart-text{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font:13px/1.6 inherit;color:var(--ink);resize:vertical;min-height:110px}
#smart-text:focus{outline:none;border-color:#8ea3c8;box-shadow:0 0 0 3px rgba(63,94,170,.1)}
.smart-bar{display:flex;gap:8px;margin-top:10px;align-items:center}
.smart-bar select{border:1px solid var(--line);border-radius:8px;padding:6px 10px;font:13px inherit;color:var(--ink);background:#fff}
.smart-bar .btn{margin-left:auto}
.smart-result{margin-top:12px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;max-height:240px;overflow:auto}
.smart-result .sr-title{font-size:12px;color:var(--ink-3);margin-bottom:6px}
.sr-row{display:flex;align-items:center;gap:8px;padding:5px 4px;border-bottom:1px dashed #eef2f7;font-size:13.5px}
.sr-row:last-child{border-bottom:none}
.sr-row input[type=checkbox]{accent-color:#3f5eaa;width:15px;height:15px}
.sr-row b{font-weight:600;min-width:56px}
.sr-row span{color:var(--ink-2)}
.sr-row .sr-warn{color:#dc2626;font-size:11px}
.smart-apply{display:flex;gap:8px;margin-top:12px;justify-content:flex-end}
.smart-loading{font-size:13px;color:var(--ink-2);padding:14px 0;text-align:center}

/* ============ 账号 / 登录注册弹层 ============ */
.btn-user{background:linear-gradient(135deg,#0ea5e9,#2563eb);color:#fff;border:none;font-weight:600}
.btn-user.logged{background:linear-gradient(135deg,#10b981,#059669)}
.login-box{max-width:360px;padding:22px 22px 18px}
.lg-tabs{display:flex;gap:6px;margin-bottom:14px}
.lg-tab{flex:1;border:none;background:#f1f5f9;color:var(--ink-2);padding:8px 0;border-radius:8px;font:600 14px inherit;cursor:pointer}
.lg-tab.on{background:#eef4ff;color:#3f5eaa;box-shadow:inset 0 -2px 0 #3f5eaa}
.lg-form{display:flex;flex-direction:column;gap:10px}
.lg-form input{border:1px solid var(--line);border-radius:8px;padding:10px 12px;font:14px inherit;color:var(--ink)}
.lg-form input:focus{outline:none;border-color:#8ea3c8;box-shadow:0 0 0 3px rgba(63,94,170,.1)}
.btn-block{width:100%;margin-top:2px}
.lg-tip{font-size:12px;color:var(--ink-3);margin:2px 0 0;line-height:1.6}
.lg-close{position:absolute;top:10px;right:12px;border:none;background:none;font:16px inherit;color:var(--ink-3);cursor:pointer;padding:4px}
.lg-err{font-size:12.5px;color:#dc2626;background:#fef2f2;border-radius:6px;padding:6px 10px;display:none}

/* ============ 电话提醒面板 ============ */
.call-box{max-width:420px;padding:20px 22px 16px;max-height:86vh;overflow:auto}
.call-box h3{margin:0 0 12px;font-size:16px}
.cl-form{display:flex;gap:8px;margin-bottom:8px}
.cl-form select,.cl-form input{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:8px 10px;font:13.5px inherit;color:var(--ink);background:#fff}
.cl-form input:focus,.cl-form select:focus{outline:none;border-color:#8ea3c8}
.cl-tip{font-size:12px;color:var(--ink-3);line-height:1.6;margin:4px 0 10px}
.cl-list{margin-top:14px;border-top:1px solid var(--line);padding-top:10px;max-height:200px;overflow:auto}
.cl-row{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:6px 2px;border-bottom:1px dashed #eef2f7}
.cl-row:last-child{border-bottom:none}
.cl-row .st{font-size:11px;padding:1px 8px;border-radius:99px;flex-shrink:0}
.st.pending{background:#fff7e8;color:#b45309}
.st.locked,.st.dialing{background:#eef4ff;color:#3f5eaa}
.st.done{background:#eafaf4;color:#047857}
.st.failed{background:#fef2f2;color:#b91c1c}
.st.canceled{background:#f1f5f9;color:#64748b}
.cl-row .cl-btn-cancel{margin-left:auto;border:none;background:none;color:#dc2626;font-size:12px;cursor:pointer;padding:2px 4px}
.cl-row .cl-btn-cancel:disabled{color:#cbd5e1;cursor:default}
.cl-empty{font-size:12.5px;color:var(--ink-3);text-align:center;padding:10px 0}
