/* ====== 32 甘特图生成器 · 项目控制台 · 墨绿 + 琥珀 ====== */
.tsk.gan{
  --tsk-bg:#f3f6f8;
  --tsk-card:#ffffff;
  --tsk-card-2:#f6f9fa;
  --tsk-ink:#101c26;
  --tsk-sub:#4c5e6b;
  --tsk-faint:#8a9aa6;
  --tsk-line:#dbe5e9;
  --tsk-line-2:#ecf2f4;
  --tsk-brand:#0d7a68;
  --tsk-brand-2:#0a5a4e;
  --tsk-brand-soft:#e6f4f1;
  --tsk-brand-ink:#0a6456;
  --tsk-accent:#e28413;
  --tsk-accent-soft:#fdf1de;
  --tsk-console:#101c26;
  --tsk-console-2:#17262f;
  --tsk-shadow-sm:0 1px 2px rgba(16,28,38,.06),0 8px 20px rgba(16,28,38,.05);
  --tsk-shadow:0 2px 6px rgba(16,28,38,.08),0 20px 46px rgba(16,28,38,.08);
  background:
    radial-gradient(720px 320px at 100% -14%, rgba(13,122,104,.12), transparent 64%),
    linear-gradient(180deg,#f3f6f8 0%,#eef4f5 100%);
}
:root[data-theme="dark"] .tsk.gan{
  --tsk-bg:#0a1214;
  --tsk-card:#111c1f;
  --tsk-card-2:#162326;
  --tsk-ink:#e7f1ef;
  --tsk-sub:#a1b4b2;
  --tsk-faint:#6f8482;
  --tsk-line:#243537;
  --tsk-line-2:#1b2a2c;
  --tsk-brand:#3fb9a2;
  --tsk-brand-2:#5ed0ba;
  --tsk-brand-soft:rgba(63,185,162,.13);
  --tsk-brand-ink:#6fdbc5;
  --tsk-accent:#f8b74d;
  --tsk-accent-soft:rgba(248,183,77,.13);
  --tsk-console:#0d1618;
  --tsk-console-2:#142125;
  --tsk-shadow-sm:0 1px 2px rgba(0,0,0,.5),0 8px 20px rgba(0,0,0,.3);
  --tsk-shadow:0 2px 6px rgba(0,0,0,.55),0 20px 46px rgba(0,0,0,.4);
  background:
    radial-gradient(720px 320px at 100% -14%, rgba(63,185,162,.12), transparent 64%),
    linear-gradient(180deg,#0a1214 0%,#0c1518 100%);
}

/* ---------- 首屏 ---------- */
.gan-hero{display:grid;grid-template-columns:minmax(0,1fr) 394px;gap:30px;padding:30px 0 24px;align-items:stretch;}
.gan-hero-l{display:flex;flex-direction:column;}
.gan-hero-l>.tsk-hs{flex:1 1 auto;}
.gan-hero-l .tsk-h1 b{color:var(--tsk-brand-ink);}
.gan-hero-r{align-self:start;}

.gan-console{
  border-radius:14px;overflow:hidden;
  background:var(--tsk-console);
  border:1px solid rgba(255,255,255,.08);
  box-shadow:0 18px 40px rgba(16,28,38,.24);
  color:#e9f3f1;
}
.gan-console-hd{
  display:flex;align-items:center;gap:6px;
  padding:12px 15px;
  background:var(--tsk-console-2);
  border-bottom:1px solid rgba(255,255,255,.07);
}
.gan-console-hd .gan-dot{width:8px;height:8px;border-radius:50%;background:#3fb9a2;opacity:.7;}
.gan-console-hd .gan-dot:nth-child(2){background:#f8b74d;}
.gan-console-hd .gan-dot:nth-child(3){background:#ff7a7a;}
.gan-console-hd b{margin-left:8px;font:700 9.5px/1 var(--tsk-num);letter-spacing:.2em;color:#8fb3ad;}
.gan-console-body{padding:15px 16px 17px;}
.gan-field{display:block;margin-bottom:11px;}
.gan-field>span{display:block;margin-bottom:6px;font-size:11px;font-weight:800;color:#8fb3ad;letter-spacing:.04em;}
.gan-field input,.gan-field select{
  width:100%;height:38px;padding:0 11px;border-radius:7px;
  border:1px solid rgba(255,255,255,.14);
  background:rgba(255,255,255,.06);color:#f0f8f6;
  font:700 13px/38px var(--tsk-font);outline:none;
  transition:.15s;
}
.gan-field select{cursor:pointer;}
.gan-field input:focus,.gan-field select:focus{border-color:#3fb9a2;background:rgba(63,185,162,.12);}
.gan-err{display:none;margin-top:5px;font-size:10.5px;font-style:normal;font-weight:700;color:#ff9b9b;}
.gan-field.bad input{border-color:#ff7a7a;}
.gan-field.bad .gan-err{display:block;}
.gan-frow{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.gan-btn{
  width:100%;height:40px;margin-top:2px;border-radius:8px;cursor:pointer;
  border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.06);
  color:#cfe2df;font:800 13px/1 var(--tsk-font);transition:.15s;
}
.gan-btn:hover{border-color:#3fb9a2;color:#fff;}
.gan-btn-main{
  margin-bottom:8px;
  background:linear-gradient(135deg,#0d7a68,#0a5a4e);
  border-color:transparent;color:#fff;
  box-shadow:0 10px 24px rgba(13,122,104,.3);
}
.gan-btn-main:hover{filter:brightness(1.1);}
.gan-note{margin:10px 0 0;font-size:10px;line-height:1.7;color:#7e9a95;}

/* ---------- 任务表 ---------- */
.gan-editor{margin-top:8px;overflow:hidden;}
.gan-editor-hd{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;
  padding:17px 20px;border-bottom:1px solid var(--tsk-line);
  background:linear-gradient(180deg,var(--tsk-card),var(--tsk-card-2));
}
.gan-editor-sub{margin-top:3px;font-size:12px;color:var(--tsk-faint);}
.gan-editor-acts{display:flex;gap:8px;flex-wrap:wrap;}
.gan-mini{
  height:32px;padding:0 13px;border-radius:7px;cursor:pointer;
  border:1px solid var(--tsk-line);background:var(--tsk-card);
  color:var(--tsk-sub);font:700 12px/1 var(--tsk-font);transition:.14s;
}
.gan-mini:hover{border-color:var(--tsk-brand);color:var(--tsk-brand-ink);}
.gan-mini.is-key{background:var(--tsk-brand-soft);border-color:rgba(13,122,104,.3);color:var(--tsk-brand-ink);}
.gan-mini.is-danger:hover{border-color:var(--tsk-bad);color:var(--tsk-bad);background:var(--tsk-bad-soft);}
.gan-errbar{
  display:none;margin:12px 20px 0;padding:9px 13px;border-radius:7px;
  background:var(--tsk-bad-soft);color:var(--tsk-bad);
  font-size:12px;font-weight:700;line-height:1.7;
}
.gan-errbar.show{display:block;}
.gan-table-wrap{overflow-x:auto;padding:0 0 2px;}
.gan-table{width:100%;min-width:860px;border-collapse:collapse;}
.gan-table th,.gan-table td{padding:7px 9px;text-align:left;border-bottom:1px solid var(--tsk-line-2);}
.gan-table thead th{
  background:var(--tsk-card-2);
  font-size:10.5px;font-weight:800;color:var(--tsk-faint);letter-spacing:.06em;
  white-space:nowrap;
}
.gan-table tbody tr.is-drag{opacity:.4;}
.gan-table tbody tr.is-over td{border-top:2px solid var(--tsk-brand);}
.gan-table td input,.gan-table td select{
  width:100%;height:30px;padding:0 8px;border-radius:5px;
  border:1px solid transparent;background:transparent;
  color:var(--tsk-ink);font:600 12.5px/30px var(--tsk-font);outline:none;transition:.14s;
}
.gan-table td input[type="date"]{font-family:var(--tsk-num);font-size:12px;}
.gan-table td input[type="number"]{font-family:var(--tsk-num);font-weight:800;}
.gan-table td input:focus,.gan-table td select:focus{background:var(--tsk-card);border-color:var(--tsk-brand);box-shadow:0 0 0 2px var(--tsk-brand-soft);}
.gan-table td.bad input{border-color:var(--tsk-bad);background:var(--tsk-bad-soft);}
.gan-th-drag{width:28px;}
.gan-drag{
  width:22px;height:22px;border:0;background:transparent;cursor:grab;
  color:var(--tsk-faint);font-size:12px;line-height:1;padding:0;
}
.gan-drag:active{cursor:grabbing;}
.gan-rowacts{display:flex;gap:5px;}
.gan-rowbtn{
  height:24px;min-width:26px;padding:0 6px;border-radius:5px;cursor:pointer;
  border:1px solid var(--tsk-line);background:var(--tsk-card);
  color:var(--tsk-sub);font:800 10.5px/1 var(--tsk-font);transition:.14s;
}
.gan-rowbtn:hover{border-color:var(--tsk-brand);color:var(--tsk-brand-ink);}
.gan-rowbtn.is-ms.on{background:var(--tsk-accent-soft);border-color:var(--tsk-accent);color:var(--tsk-accent);}
.gan-rowbtn.is-del:hover{border-color:var(--tsk-bad);color:var(--tsk-bad);background:var(--tsk-bad-soft);}
.gan-table-foot{margin:0;padding:11px 20px 14px;font-size:11.5px;color:var(--tsk-faint);}
.gan-table-foot b{color:var(--tsk-brand-ink);font-family:var(--tsk-num);}

/* ---------- 图表面板 ---------- */
.gan-chart{margin-top:16px;overflow:hidden;}
.gan-chart-hd{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;
  padding:17px 20px 14px;border-bottom:1px solid var(--tsk-line);
}
.gan-chart-sub{margin-top:3px;font-size:12px;color:var(--tsk-faint);}
.gan-chart-acts{display:flex;gap:8px;flex-wrap:wrap;}
.gan-scroll{
  overflow-x:auto;overflow-y:hidden;
  padding:10px 0 6px;
  background:
    repeating-linear-gradient(90deg,transparent 0 39px,rgba(13,122,104,.05) 39px 40px);
}
.gan-scroll svg{display:block;}
.gan-stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-top:1px solid var(--tsk-line);}
.gan-stat{padding:13px 16px;border-right:1px solid var(--tsk-line-2);}
.gan-stat:last-child{border-right:0;}
.gan-stat b{display:block;font:800 20px/1.2 var(--tsk-num);color:var(--tsk-ink);font-variant-numeric:tabular-nums;}
.gan-stat span{display:block;margin-top:3px;font-size:10.5px;font-weight:700;color:var(--tsk-faint);}
.gan-stat.is-prog b{color:var(--tsk-brand-ink);}

/* ---------- 提示卡 ---------- */
.gan-tips{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;}
.gan-tip{
  padding:19px 20px;border:1px solid var(--tsk-line);border-radius:12px;
  background:var(--tsk-card);box-shadow:var(--tsk-shadow-sm);
  position:relative;overflow:hidden;
}
.gan-tip::before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:linear-gradient(180deg,var(--tsk-brand),var(--tsk-brand-2));}
.gan-tip span{font:800 11px/1 var(--tsk-num);letter-spacing:.12em;color:var(--tsk-brand-ink);}
.gan-tip h3{margin:9px 0 6px;font-size:16px;font-weight:800;color:var(--tsk-ink);}
.gan-tip p{margin:0;font-size:12.5px;line-height:1.85;color:var(--tsk-sub);}

/* ---------- 刻度说明 ---------- */
.gan-scales{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;}
.gan-scale{padding:15px 17px;border:1px solid var(--tsk-line);border-radius:9px;background:var(--tsk-card-2);}
.gan-scale b{font-size:13.5px;font-weight:800;color:var(--tsk-brand-ink);}
.gan-scale p{margin:5px 0 0;font-size:12px;line-height:1.8;color:var(--tsk-sub);}

/* ---------- Toast ---------- */
.gan-toast{
  position:fixed;left:50%;bottom:32px;transform:translate(-50%,16px);
  z-index:9999;max-width:86vw;padding:10px 20px;border-radius:99px;
  background:var(--tsk-ink);color:var(--tsk-bg);
  font-size:13px;font-weight:700;text-align:center;
  opacity:0;pointer-events:none;transition:.24s;box-shadow:var(--tsk-shadow);
}
.gan-toast.show{opacity:1;transform:translate(-50%,0);}

/* ---------- 响应式 ---------- */
@media (max-width:1080px){
  .gan-stats{grid-template-columns:repeat(3,minmax(0,1fr));}
  .gan-tips{grid-template-columns:1fr;}
}
@media (max-width:900px){
  .gan-hero{grid-template-columns:1fr;gap:22px;}
  .gan-frow{grid-template-columns:1fr;}
  .gan-scales{grid-template-columns:1fr;}
  .gan-editor-hd,.gan-chart-hd{padding:14px 15px;}
}
@media (max-width:560px){
  .gan-stats{grid-template-columns:1fr 1fr;}
  .gan-table{min-width:760px;}
}

/* ---------- 交互细节 ---------- */
.tsk.gan button:focus-visible,
.tsk.gan input:focus-visible,
.tsk.gan select:focus-visible,
.tsk.gan textarea:focus-visible{
  outline:2px solid var(--tsk-brand);
  outline-offset:2px;
}
.gan-table tbody tr:hover td{background:var(--tsk-brand-soft);}
.gan-table tbody tr.is-drag td{opacity:.55;}
.gan-table tbody tr.is-over td{box-shadow:inset 0 -2px 0 var(--tsk-brand);}
.gan-tip{transition:transform .16s ease,box-shadow .16s ease;}
.gan-tip:hover{transform:translateY(-2px);box-shadow:var(--tsk-shadow);}
.gan-scale{border-left:3px solid var(--tsk-brand);}
.gan-scale b::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--tsk-accent);margin-right:7px;vertical-align:1px;}

/* ---------- 打印 ---------- */
@media print{
  .tsk.gan .gan-hero,
  .tsk.gan .gan-editor,
  .tsk.gan .gan-stats,
  .tsk.gan .gan-tips,
  .tsk.gan .gan-toast,
  .tsk.gan .tskb,
  .tsk.gan .tsk-crumb,
  .tsk.gan .tsk-foot{display:none!important;}
  .tsk.gan{background:#fff!important;}
  .tsk.gan .gan-chart{border:0;box-shadow:none;margin:0;}
  .tsk.gan .gan-chart-hd{border-bottom:0;padding:0 0 10px;}
  .tsk.gan .gan-chart-acts{display:none;}
}
