/* ============================================================
   顶脉职通车 · AI 求职助手  —— 学生端 / 后台通用样式
   Light theme
   ============================================================ */
:root{
  --brand:#1B4FD8; --brand-600:#1640B4; --brand-50:#EEF3FF; --brand-100:#DCE6FF;
  --cta:#E9541F; --cta-600:#CE4313; --cta-50:#FFF1EA;
  --ink:#151D2C; --ink-2:#46536B; --ink-3:#7A8698; --ink-4:#A3ACBD;
  --line:#E5E9F2; --line-2:#EFF2F8;
  --bg:#F4F6FB; --card:#FFFFFF;
  --ok:#0E9F6E; --ok-50:#E7F7F0;
  --warn:#D98A0B; --warn-50:#FFF6E5;
  --danger:#D92D20; --danger-50:#FEECEA;
  --info:#0B84C4; --info-50:#E7F3FB;
  --radius:14px; --radius-sm:10px; --radius-lg:20px;
  --shadow:0 1px 2px rgba(21,29,44,.04), 0 6px 18px rgba(21,29,44,.05);
  --shadow-lg:0 12px 40px rgba(21,29,44,.12);
  --appw:1020px;
}
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font:14px/1.6 -apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  color:var(--ink); background:var(--bg); -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;cursor:pointer;border:0;background:none}
input,select,textarea{font:inherit;color:inherit}
ul,ol{margin:0;padding:0;list-style:none}
h1,h2,h3,h4,p{margin:0}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#CFD6E4;border-radius:8px}
::-webkit-scrollbar-track{background:transparent}

/* ---------------- utilities ---------------- */
.wrap{max-width:var(--appw);margin:0 auto;padding:0 20px}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt24{margin-top:24px}.mt32{margin-top:32px}
.row{display:flex;align-items:center;gap:10px}
.row.wrap{flex-wrap:wrap}
.between{display:flex;align-items:center;justify-content:space-between;gap:12px}
.col{display:flex;flex-direction:column}
.grow{flex:1;min-width:0}
.center{text-align:center}
.muted{color:var(--ink-3)}
.small{font-size:12px}
.hide{display:none!important}

/* ---------------- card / btn ---------------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.card.pad{padding:18px}
.sec-title{font-size:16px;font-weight:700;display:flex;align-items:center;gap:8px}
.sec-title::before{content:"";width:3px;height:14px;border-radius:2px;background:var(--brand)}
.sec-sub{color:var(--ink-3);font-size:12.5px;margin-top:4px}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:38px;padding:0 16px;
  border-radius:10px;font-size:14px;font-weight:600;transition:.15s;white-space:nowrap}
.btn-pri{background:var(--brand);color:#fff}
.btn-pri:hover{background:var(--brand-600)}
.btn-cta{background:var(--cta);color:#fff}
.btn-cta:hover{background:var(--cta-600)}
.btn-line{background:#fff;border:1px solid var(--line);color:var(--ink-2)}
.btn-line:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-50)}
.btn-ghost{background:rgba(255,255,255,.16);color:#fff;border:1px solid rgba(255,255,255,.3)}
.btn-sm{height:32px;padding:0 12px;font-size:13px;border-radius:8px}
.btn-lg{height:46px;padding:0 24px;font-size:15px;border-radius:12px}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.block{width:100%}

.chip{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border-radius:8px;
  background:#fff;border:1px solid var(--line);color:var(--ink-2);font-size:13px;transition:.15s}
.chip:hover{border-color:var(--brand);color:var(--brand)}
.chip.on{background:var(--brand-50);border-color:var(--brand);color:var(--brand);font-weight:600}
.chip.sm{height:27px;padding:0 10px;font-size:12px;border-radius:7px}

.tag{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:6px;font-size:11.5px;font-weight:600}
.tag.gray{background:#F1F4F9;color:var(--ink-3)}
.tag.blue{background:var(--brand-50);color:var(--brand)}
.tag.green{background:var(--ok-50);color:var(--ok)}
.tag.orange{background:var(--cta-50);color:var(--cta)}
.tag.yellow{background:var(--warn-50);color:var(--warn)}
.tag.red{background:var(--danger-50);color:var(--danger)}

/* ---------------- topbar ---------------- */
.topbar{position:sticky;top:0;z-index:60;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line)}
.topbar-in{max-width:var(--appw);margin:0 auto;padding:0 20px;height:60px;display:flex;align-items:center;gap:18px}
.logo{display:flex;align-items:center;gap:9px;font-weight:800;font-size:16px;letter-spacing:.2px}
.logo-mark{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;color:#fff;font-size:15px;font-weight:800;
  background:linear-gradient(135deg,#2E6BF0,#1741C0)}
.logo small{display:block;font-size:10.5px;font-weight:600;color:var(--ink-3);letter-spacing:0}
.nav-links{display:flex;gap:2px;margin-left:6px}
.nav-links a{height:34px;padding:0 12px;display:flex;align-items:center;border-radius:8px;font-size:14px;color:var(--ink-2)}
.nav-links a:hover{background:var(--line-2);color:var(--ink)}
.nav-links a.on{background:var(--brand-50);color:var(--brand);font-weight:600}
.demo-badge{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 9px;border-radius:7px;
  background:var(--warn-50);color:var(--warn);font-size:11.5px;font-weight:700;border:1px dashed #F0CE94}

/* ---------------- layout ---------------- */
#view{min-height:calc(100vh - 60px);padding:24px 0 60px}
.stack{display:flex;flex-direction:column;gap:16px}

/* ---------------- home ---------------- */
.hero{position:relative;overflow:hidden;border-radius:var(--radius-lg);padding:38px 40px;color:#fff;
  background:linear-gradient(120deg,#12339B 0%,#2E6BF0 55%,#4E8BFF 100%)}
.hero::after{content:"";position:absolute;right:-70px;top:-70px;width:300px;height:300px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.22),transparent 70%)}
.hero h1{font-size:30px;line-height:1.3;font-weight:800;letter-spacing:.3px}
.hero p{opacity:.9;margin-top:10px;font-size:15px;max-width:640px}
.hero .hero-btns{margin-top:22px;display:flex;gap:12px;flex-wrap:wrap}

.funnel{display:flex;align-items:stretch;gap:8px;flex-wrap:wrap}
.fstep{flex:1;min-width:150px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px;position:relative}
.fstep .num{width:22px;height:22px;border-radius:7px;background:var(--brand-50);color:var(--brand);font-size:12px;
  font-weight:800;display:grid;place-items:center}
.fstep .t{font-weight:700;margin-top:8px}
.fstep .d{color:var(--ink-3);font-size:12px;margin-top:2px}

.grid2{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
@media(max-width:900px){.grid3,.grid4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){.grid2,.grid3,.grid4{grid-template-columns:1fr}.hero{padding:26px 22px}.hero h1{font-size:23px}}

.feat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px;transition:.18s;position:relative;overflow:hidden}
.feat:hover{transform:translateY(-3px);box-shadow:var(--shadow-lg);border-color:var(--brand-100)}
.feat .ico{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;font-size:19px}
.feat h4{font-size:15.5px;font-weight:700;margin-top:12px}
.feat p{color:var(--ink-3);font-size:12.8px;margin-top:6px;min-height:52px}
.feat .go{color:var(--brand);font-weight:600;font-size:13px;margin-top:8px;display:inline-flex;gap:4px;align-items:center}

.kpi{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px}
.kpi .v{font-size:26px;font-weight:800;letter-spacing:-.5px}
.kpi .l{color:var(--ink-3);font-size:12.5px;margin-top:2px}

/* ---------------- form ---------------- */
.field{margin-bottom:18px}
.label{font-size:13.5px;font-weight:600;margin-bottom:8px;display:flex;gap:6px;align-items:center}
.label .req{color:var(--danger)}
.hint{font-size:12px;color:var(--ink-3);margin-top:6px}
.input,.select{width:100%;height:42px;padding:0 12px;border:1px solid var(--line);border-radius:10px;background:#fff;outline:none;transition:.15s}
.input:focus,.select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-50)}
.textarea{width:100%;min-height:110px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;resize:vertical;outline:none;font:inherit}
.textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-50)}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.optgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
@media(max-width:700px){.optgrid{grid-template-columns:repeat(2,1fr)}}
.opt{border:1px solid var(--line);border-radius:11px;padding:12px;text-align:center;background:#fff;transition:.15s}
.opt:hover{border-color:var(--brand)}
.opt.on{border-color:var(--brand);background:var(--brand-50);box-shadow:0 0 0 2px var(--brand-50)}
.opt .t{font-weight:600;font-size:13.5px}
.opt .d{font-size:11.5px;color:var(--ink-3);margin-top:2px}

.wizard-bar{height:4px;background:var(--line-2);border-radius:4px;overflow:hidden}
.wizard-bar i{display:block;height:100%;background:linear-gradient(90deg,#2E6BF0,#4E8BFF);transition:width .35s}

/* ---------------- chat ---------------- */
.chat-wrap{max-width:760px;margin:0 auto;display:flex;flex-direction:column;height:calc(100vh - 160px);min-height:520px}
.chat-body{flex:1;overflow-y:auto;padding:18px 4px;display:flex;flex-direction:column;gap:14px}
.msg{display:flex;gap:10px;max-width:88%}
.msg.ai{align-self:flex-start}
.msg.me{align-self:flex-end;flex-direction:row-reverse}
.avatar{width:32px;height:32px;border-radius:9px;flex:none;display:grid;place-items:center;font-size:13px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,#2E6BF0,#1741C0)}
.msg.me .avatar{background:linear-gradient(135deg,#F0864B,#D9480F)}
.bubble{background:#fff;border:1px solid var(--line);border-radius:12px;padding:11px 14px;font-size:14px;line-height:1.72;box-shadow:var(--shadow)}
.msg.me .bubble{background:var(--brand);border-color:var(--brand);color:#fff}
.msg.ai .bubble{border-top-left-radius:3px}
.msg.me .bubble{border-top-right-radius:3px}
.bubble .quote{background:var(--brand-50);border-radius:6px;padding:6px 8px;margin:6px 0;font-size:13px;color:var(--brand)}
.typing{display:inline-flex;gap:4px;align-items:center;height:14px}
.typing i{width:6px;height:6px;border-radius:50%;background:var(--ink-4);animation:bl 1.2s infinite}
.typing i:nth-child(2){animation-delay:.2s}.typing i:nth-child(3){animation-delay:.4s}
@keyframes bl{0%,60%,100%{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}
.quick{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.chat-foot{border-top:1px solid var(--line);padding:12px 0;background:transparent}
.composer{display:flex;gap:8px;align-items:flex-end}
.composer .textarea{min-height:44px;height:44px;border-radius:12px}

.round-info{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-3)}
.round-info b{color:var(--brand)}

/* ---------------- report ---------------- */
.report{max-width:860px;margin:0 auto}
.rep-head{border-radius:var(--radius-lg);padding:26px 28px;color:#fff;position:relative;overflow:hidden;
  background:linear-gradient(120deg,#12339B,#2E6BF0 60%,#5B93FF)}
.rep-head h2{font-size:22px;font-weight:800}
.score-ring{width:86px;height:86px;flex:none;position:relative}
.score-ring svg{transform:rotate(-90deg)}
.score-ring .num{position:absolute;inset:0;display:grid;place-items:center;font-size:24px;font-weight:800}
.dir-card{border:1px solid var(--line);border-radius:var(--radius);background:#fff;padding:18px;box-shadow:var(--shadow)}
.dir-card.top{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-50),var(--shadow)}
.dir-top{display:flex;align-items:flex-start;gap:12px}
.dir-rank{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-weight:800;font-size:15px;
  background:var(--brand-50);color:var(--brand);flex:none}
.dir-rank.s1{background:linear-gradient(135deg,#E9541F,#F0864B);color:#fff}
.reason{background:#F8FAFE;border:1px dashed var(--line);border-left:3px solid var(--brand);border-radius:8px;padding:9px 12px;
  font-size:13px;color:var(--ink-2);margin-top:8px}
.reason::before{content:"你的原话：";color:var(--brand);font-weight:700}
.gap-item{display:flex;gap:8px;font-size:13px;color:var(--ink-2);margin-top:6px}
.gap-item::before{content:"△";color:var(--warn);font-weight:800;flex:none}
.hit-item{display:flex;gap:8px;font-size:13px;color:var(--ink-2);margin-top:6px}
.hit-item::before{content:"✓";color:var(--ok);font-weight:800;flex:none}
.src{font-size:11.5px;color:var(--ink-4);margin-top:8px}

.timeline{position:relative;padding-left:22px}
.timeline::before{content:"";position:absolute;left:6px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tl-item{position:relative;padding-bottom:18px}
.tl-item::before{content:"";position:absolute;left:-20px;top:5px;width:10px;height:10px;border-radius:50%;background:var(--brand);
  box-shadow:0 0 0 3px var(--brand-50)}
.tl-item .t{font-weight:700;font-size:13.5px}
.tl-item .d{color:var(--ink-2);font-size:13px;margin-top:4px}

.gen-box{border:1px solid var(--line);border-radius:var(--radius);background:#fff;padding:28px;text-align:center}
.gen-steps{display:flex;flex-direction:column;gap:10px;max-width:420px;margin:18px auto 0;text-align:left}
.gen-step{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--ink-4);transition:.2s}
.gen-step.on{color:var(--ink)}
.gen-step.done{color:var(--ok)}
.gen-step .dot{width:18px;height:18px;border-radius:50%;border:2px solid currentColor;display:grid;place-items:center;font-size:10px;flex:none}
.gen-step.done .dot{background:var(--ok);color:#fff;border-color:var(--ok)}

/* ---------------- job list ---------------- */
.filters{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.job{border:1px solid var(--line);border-radius:var(--radius);background:#fff;padding:16px;transition:.16s}
.job:hover{border-color:var(--brand-100);box-shadow:var(--shadow)}
.job h4{font-size:15.5px;font-weight:700}
.job .meta{color:var(--ink-3);font-size:12.5px;margin-top:4px;display:flex;gap:10px;flex-wrap:wrap}
.salary{color:var(--cta);font-weight:800;font-size:15px}

.empty{text-align:center;padding:60px 20px;color:var(--ink-3)}
.empty .ico{font-size:40px;opacity:.5}

/* ---------------- resume report ---------------- */
.dims{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
@media(max-width:700px){.dims{grid-template-columns:repeat(2,1fr)}}
.dim{background:#fff;border:1px solid var(--line);border-radius:11px;padding:12px;text-align:center}
.dim .n{font-size:11.5px;color:var(--ink-3)}
.dim .v{font-size:19px;font-weight:800;margin-top:2px}
.dim .v.good{color:var(--ok)}.dim .v.mid{color:var(--warn)}.dim .v.bad{color:var(--danger)}
.bar{height:5px;border-radius:5px;background:var(--line-2);overflow:hidden;margin-top:7px}
.bar i{display:block;height:100%;border-radius:5px}

.issue{border:1px solid var(--line);border-radius:12px;background:#fff;padding:14px;box-shadow:var(--shadow)}
.issue .ori{background:#FBF6F4;border:1px solid #F3E0D7;border-radius:8px;padding:8px 10px;font-size:13px;color:#8C5140}
.issue .why{font-size:13px;color:var(--ink-2);margin-top:8px}
.issue .fix{background:var(--ok-50);border-radius:8px;padding:8px 10px;font-size:13px;color:#0B6B4C;margin-top:8px}
.issue.accepted{border-color:var(--ok);background:var(--ok-50)}
.diff{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(max-width:640px){.diff{grid-template-columns:1fr}}
.diff .box{border-radius:10px;padding:12px;font-size:13px;line-height:1.75}
.diff .old{background:#FBF6F4;border:1px solid #F3E0D7;color:#7C4A38}
.diff .new{background:var(--ok-50);border:1px solid #CDEBDD;color:#0B5F45}
.diff .cap{font-size:11.5px;font-weight:700;margin-bottom:6px;letter-spacing:.5px}
.extracted{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
@media(max-width:700px){.extracted{grid-template-columns:1fr}}
.ex-item{border:1px solid var(--line);border-radius:11px;padding:12px;background:#fff}
.ex-item.miss{border-color:#F0CE94;background:var(--warn-50)}
.ex-item .t{font-size:12px;font-weight:700;color:var(--ink-3);display:flex;justify-content:space-between}
.ex-item .c{font-size:12.8px;color:var(--ink-2);margin-top:6px;line-height:1.7}

.upload{border:2px dashed var(--line);border-radius:var(--radius);padding:26px;text-align:center;background:#fff;transition:.15s}
.upload:hover,.upload.over{border-color:var(--brand);background:var(--brand-50)}

/* ---------------- modal / toast ---------------- */
.mask{position:fixed;inset:0;background:rgba(15,23,42,.5);backdrop-filter:blur(2px);z-index:200;display:flex;
  align-items:center;justify-content:center;padding:24px;animation:fade .18s}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{background:#fff;border-radius:var(--radius-lg);width:100%;max-width:460px;box-shadow:var(--shadow-lg);overflow:hidden;
  animation:pop .22s cubic-bezier(.2,.9,.3,1.2)}
@keyframes pop{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
.modal.wide{max-width:720px}
.modal-head{padding:18px 20px;border-bottom:1px solid var(--line)}
.modal-body{padding:20px;max-height:64vh;overflow:auto}
.modal-foot{padding:14px 20px;border-top:1px solid var(--line);display:flex;gap:10px;justify-content:flex-end}
#toast-root{position:fixed;top:80px;left:0;right:0;z-index:400;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}
.toast{background:rgba(21,29,44,.94);color:#fff;padding:10px 18px;border-radius:10px;font-size:13.5px;box-shadow:var(--shadow-lg);
  animation:tin .25s}
@keyframes tin{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}

/* ---------------- misc ---------------- */
.breadcrumb{font-size:12.5px;color:var(--ink-3);margin-bottom:10px}
.breadcrumb b{color:var(--ink-2);font-weight:600}
.stat-line{display:flex;gap:18px;flex-wrap:wrap;font-size:12.5px;color:var(--ink-3)}
.stat-line b{color:var(--ink);font-weight:700}
.divider{height:1px;background:var(--line-2);margin:16px 0}
.note{background:var(--info-50);border:1px solid #CFE6F6;border-radius:10px;padding:10px 12px;font-size:12.5px;color:#0A5B87}
.note.warn{background:var(--warn-50);border-color:#F0DCAE;color:#8A5B08}
.pill-row{display:flex;gap:8px;flex-wrap:wrap}
.opt-card{border:1px solid var(--line);border-radius:12px;padding:14px;background:#fff;text-align:left;transition:.15s}
.opt-card:hover{border-color:var(--brand)}
.opt-card.on{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-50);background:var(--brand-50)}
.opt-card .t{font-weight:700;font-size:14px}
.opt-card .d{font-size:12px;color:var(--ink-3);margin-top:3px;line-height:1.6}
.qa-block{border:1px solid var(--line);border-radius:12px;background:#fff;padding:14px}
.transition{transition:.2s}
