/* cfa-level1 · 金融深蓝报表风 · 作用域前缀 .cfl- */
.cfl-wrap{
  --cfl-bg:#f2f6fc; --cfl-card:#ffffff; --cfl-ink:#0f2c4d; --cfl-blue:#123c69;
  --cfl-mut:#5a7290; --cfl-line:#ccd9e9; --cfl-up:#d8473c; --cfl-down:#1f9d6a;
  --cfl-gold:#b8871f; --cfl-grid:rgba(18,60,105,.06); --cfl-shadow:0 6px 20px rgba(15,44,77,.09);
  max-width:1120px; margin:0 auto; padding:26px 18px 64px;
  color:var(--cfl-ink); font-family:"PingFang SC","Microsoft YaHei",sans-serif;
  font-size:16px; line-height:1.75; box-sizing:border-box;
  background-color:var(--cfl-bg);
  background-image:
    repeating-linear-gradient(0deg, var(--cfl-grid) 0 1px, transparent 1px 28px),
    repeating-linear-gradient(90deg, var(--cfl-grid) 0 1px, transparent 1px 28px);
}
html[data-theme="dark"] .cfl-wrap{
  --cfl-bg:#08192e; --cfl-card:#0e2743; --cfl-ink:#e6eef8; --cfl-blue:#7fb0ee;
  --cfl-mut:#9db3cf; --cfl-line:#24405f; --cfl-up:#f4796c; --cfl-down:#5cd39b;
  --cfl-gold:#e0b04a; --cfl-grid:rgba(127,176,238,.05); --cfl-shadow:0 6px 20px rgba(0,0,0,.4);
  background-color:var(--cfl-bg);
  background-image:
    repeating-linear-gradient(0deg, var(--cfl-grid) 0 1px, transparent 1px 28px),
    repeating-linear-gradient(90deg, var(--cfl-grid) 0 1px, transparent 1px 28px);
}
.cfl-wrap *{box-sizing:border-box;}
.cfl-wrap b{font-weight:700;color:var(--cfl-blue);}
.cfl-wrap h1,.cfl-wrap h2,.cfl-wrap h3{font-weight:800;line-height:1.35;}
.cfl-wrap a{color:inherit;}
.cfl-mono,.cfl-wrap input,.cfl-wrap output,.cfl-wrap code{font-family:ui-monospace,"Courier New",Consolas,monospace;}

/* ---------- 首屏 ---------- */
.cfl-hero{border:1px solid var(--cfl-line);background:var(--cfl-card);box-shadow:var(--cfl-shadow);}
.cfl-ticker{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--cfl-blue);color:#e9f2fd;padding:9px 22px;font-size:12px;letter-spacing:.16em;}
.cfl-ticker-live{color:#8fe3b6;letter-spacing:.08em;}
.cfl-ticker-code{margin-left:auto;font-family:ui-monospace,"Courier New",monospace;opacity:.85;letter-spacing:.06em;}
.cfl-hero-in{display:grid;grid-template-columns:minmax(0,1fr) 210px;gap:18px;padding:28px 26px 22px;}
.cfl-hero h1{margin:0 0 12px;font-size:clamp(26px,3.9vw,38px);}
.cfl-hero h1 em{display:block;font-style:normal;font-size:clamp(14px,1.7vw,18px);font-weight:500;color:var(--cfl-mut);letter-spacing:.05em;margin-top:7px;}
.cfl-sub{margin:0 0 18px;max-width:62ch;}
.cfl-hero-actions{display:flex;flex-wrap:wrap;gap:9px;margin-bottom:20px;}
.cfl-btn{display:inline-flex;align-items:center;justify-content:center;padding:9px 16px;border:1px solid var(--cfl-blue);background:var(--cfl-blue);color:#e9f2fd;font-family:inherit;font-size:14.5px;font-weight:600;cursor:pointer;text-decoration:none;transition:.14s;}
.cfl-btn:hover{filter:brightness(1.14);}
.cfl-btn.ghost{background:var(--cfl-card);color:var(--cfl-blue);}
.cfl-btn.ghost:hover{background:var(--cfl-bg);}
.cfl-btn:disabled{opacity:.55;cursor:not-allowed;}
.cfl-metrics{display:flex;flex-wrap:wrap;border-top:1px solid var(--cfl-line);padding-top:14px;}
.cfl-metrics>div{padding-right:26px;margin-right:26px;border-right:1px solid var(--cfl-line);}
.cfl-metrics>div:last-child{border-right:0;}
.cfl-metrics b{display:block;font-family:ui-monospace,"Courier New",monospace;font-size:25px;line-height:1.2;}
.cfl-metrics span{font-size:12px;color:var(--cfl-mut);}
.cfl-klines{display:flex;align-items:flex-end;justify-content:center;gap:5px;border-left:1px solid var(--cfl-line);padding-left:14px;min-height:180px;}
.cfl-kline{width:9px;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;}
.cfl-kline i{display:block;width:2px;background:var(--cfl-line);}
.cfl-kline u{display:block;width:9px;text-decoration:none;}
.cfl-kline.up u{background:var(--cfl-up);}
.cfl-kline.down u{background:var(--cfl-down);}

/* ---------- 区块 ---------- */
.cfl-sec{margin-top:30px;border:1px solid var(--cfl-line);background:var(--cfl-card);padding:22px 24px 26px;box-shadow:var(--cfl-shadow);}
.cfl-sec-head{display:flex;align-items:baseline;gap:13px;flex-wrap:wrap;border-bottom:2px solid var(--cfl-blue);padding-bottom:11px;margin-bottom:16px;}
.cfl-sec-head h2{margin:0;font-size:21px;}
.cfl-sec-head p{margin:0;font-size:12.5px;color:var(--cfl-mut);letter-spacing:.06em;}
.cfl-no{font-family:ui-monospace,"Courier New",monospace;font-size:13px;color:#e9f2fd;background:var(--cfl-blue);padding:3px 9px;}
.cfl-lead{margin:0 0 16px;font-size:15px;}
.cfl-hint{font-size:13px;color:var(--cfl-mut);line-height:1.7;margin:13px 0 0;}
.cfl-err{margin:12px 0 0;color:var(--cfl-up);font-size:14px;font-weight:700;}
.cfl-btn-row{display:flex;flex-wrap:wrap;gap:9px;margin-top:15px;}
.cfl-label{display:block;font-size:13.5px;font-weight:700;margin:12px 0 6px;}
.cfl-label:first-child{margin-top:0;}
.cfl-label small{font-weight:400;color:var(--cfl-mut);font-size:12px;margin-left:6px;}
.cfl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}
.cfl-disclaimer{margin-top:24px;font-size:13px;color:var(--cfl-mut);border-left:4px solid var(--cfl-blue);padding:8px 14px;line-height:1.7;}

/* ---------- 表格 / 权重条 ---------- */
.cfl-table{width:100%;border-collapse:collapse;font-size:14px;min-width:600px;}
.cfl-table th,.cfl-table td{border:1px solid var(--cfl-line);padding:9px 11px;text-align:left;vertical-align:middle;}
.cfl-table thead th{background:var(--cfl-bg);font-size:13px;letter-spacing:.03em;}
.cfl-table tbody tr:nth-child(even){background:rgba(18,60,105,.03);}
.cfl-table td:first-child{font-weight:700;white-space:nowrap;}
.cfl-wrange{font-family:ui-monospace,"Courier New",monospace;color:var(--cfl-gold);font-weight:700;}
.cfl-bar{height:11px;background:var(--cfl-line);border-radius:2px;overflow:hidden;min-width:120px;}
.cfl-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--cfl-blue),#4a90d9);}
.cfl-week{min-width:720px;}
.cfl-week input{width:100%;font-family:inherit;font-size:13.5px;padding:6px 8px;border:1px solid var(--cfl-line);background:var(--cfl-bg);color:var(--cfl-ink);}
.cfl-week td:nth-child(1),.cfl-week td:nth-child(2){font-family:ui-monospace,"Courier New",monospace;white-space:nowrap;}
.cfl-phase{padding:2px 8px;border-radius:3px;font-size:12px;font-weight:700;background:var(--cfl-bg);color:var(--cfl-blue);}
.cfl-phase.p2{background:rgba(184,135,31,.15);color:var(--cfl-gold);}
.cfl-phase.p3{background:rgba(216,71,60,.12);color:var(--cfl-up);}
.cfl-plan-form{border:1px solid var(--cfl-line);background:var(--cfl-bg);padding:16px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 18px;margin-bottom:16px;}
.cfl-plan-form input{width:100%;font-size:16px;padding:9px 10px;border:1px solid var(--cfl-line);background:var(--cfl-card);color:var(--cfl-ink);}
.cfl-plan-form .cfl-btn-row{grid-column:1 / -1;margin-top:6px;}
.cfl-plan-form .cfl-err{grid-column:1 / -1;}
.cfl-plan-sum{font-size:14px;color:var(--cfl-mut);border-left:3px solid var(--cfl-gold);padding:6px 12px;margin-bottom:14px;}

/* ---------- AI ---------- */
.cfl-ai-card{margin-top:20px;border:1px dashed var(--cfl-blue);background:var(--cfl-bg);padding:16px;}
.cfl-ai-head{display:flex;justify-content:space-between;align-items:center;gap:10px;border-bottom:1px solid var(--cfl-line);padding-bottom:10px;margin-bottom:12px;font-weight:800;color:var(--cfl-blue);}
.cfl-ai-head small{font-weight:400;font-size:12px;color:var(--cfl-mut);}
.cfl-ai-lead{font-size:14px;margin:0 0 14px;}
.cfl-ai-result{margin-top:14px;border-top:1px dashed var(--cfl-line);padding-top:12px;font-size:14px;line-height:1.75;}
.cfl-ai-result p{margin:0 0 8px;}
.cfl-ai-tip{font-size:12.5px;color:var(--cfl-mut);}
.cfl-ai-err{color:var(--cfl-up);font-weight:700;}

/* ---------- 打卡 ---------- */
.cfl-checkin-head{display:flex;justify-content:space-between;font-size:14px;font-weight:700;}
.cfl-checkin-head span{font-family:ui-monospace,"Courier New",monospace;color:var(--cfl-gold);font-size:18px;}
.cfl-progress{height:12px;background:var(--cfl-line);border-radius:2px;overflow:hidden;margin:8px 0 16px;}
.cfl-progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--cfl-down),#57c98f);transition:width .25s;}
.cfl-checkin-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(22px,1fr));gap:5px;}
.cfl-day{aspect-ratio:1/1;border:1px solid var(--cfl-line);background:var(--cfl-bg);cursor:pointer;font-family:ui-monospace,"Courier New",monospace;font-size:10px;color:var(--cfl-mut);display:grid;place-items:center;padding:0;}
.cfl-day.on{background:var(--cfl-down);border-color:var(--cfl-down);color:#fff;}
.cfl-day.today{outline:2px solid var(--cfl-gold);}

/* ---------- 雷达 / 公式 ---------- */
.cfl-radar-grid{display:grid;grid-template-columns:minmax(0,340px) minmax(0,1fr);gap:22px;align-items:start;}
.cfl-radar-box{border:1px solid var(--cfl-line);background:var(--cfl-bg);padding:8px;}
.cfl-radar{width:100%;height:auto;display:block;}
.cfl-radar-ctl{display:grid;gap:7px;}
.cfl-radio-row{display:grid;grid-template-columns:minmax(0,1fr) 118px;gap:10px;align-items:center;font-size:13.5px;}
.cfl-radio-row select{width:100%;font-family:inherit;font-size:13px;padding:5px 7px;border:1px solid var(--cfl-line);background:var(--cfl-card);color:var(--cfl-ink);}
.cfl-formula-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;}
.cfl-fcard{border:1px solid var(--cfl-line);background:var(--cfl-bg);padding:11px 13px;border-top:3px solid var(--cfl-blue);}
.cfl-fcard b{display:block;font-size:13.5px;}
.cfl-fcard code{display:block;font-size:13px;color:var(--cfl-gold);margin:6px 0;word-break:break-word;}
.cfl-fcard small{font-size:12.5px;color:var(--cfl-mut);line-height:1.6;}

.cfl-toast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%);background:var(--cfl-blue);color:#e9f2fd;padding:10px 20px;font-size:14px;z-index:60;box-shadow:var(--cfl-shadow);}

@media (max-width:760px){
  .cfl-hero-in{grid-template-columns:1fr;padding:22px 18px;}
  .cfl-klines{display:none;}
  .cfl-sec{padding:18px 15px 22px;}
  .cfl-plan-form{grid-template-columns:1fr;}
  .cfl-plan-form .cfl-btn-row,.cfl-plan-form .cfl-err{grid-column:1;}
  .cfl-radar-grid{grid-template-columns:1fr;}
  .cfl-radar-box{max-width:340px;margin:0 auto;width:100%;}
  .cfl-metrics>div{padding-right:16px;margin-right:16px;}
}
