:root{
  --bg1:#eef6f1;
  --bg2:#f4fbf8;
  --panel:#ffffff;
  --panel-2:#f5faf7;
  --line:#e2ede8;
  --line-2:#eef4f1;
  --text:#2e4a40;
  --text-2:#5d736b;
  --text-3:#94a89f;
  --brand:#48b39c;
  --brand-2:#5bb8c9;
  --brand-soft:#e3f4ef;
  --brand-soft2:#e6f3f9;
  --ok:#56b083;
  --ok-soft:#e9f6ef;
  --warn:#e5a23c;
  --warn-soft:#fbf2e1;
  --danger:#e68488;
  --danger-soft:#fcecec;
  --purple:#9b8ad4;
  --purple-soft:#f1edfb;
  --pink:#eea3ad;
  --radius:20px;
  --radius-sm:13px;
  --shadow:0 2px 6px rgba(40,90,75,.05),0 8px 22px rgba(40,90,75,.06);
  --shadow-lg:0 16px 44px rgba(40,90,75,.14);
  --sidebar-w:214px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",system-ui,Arial,sans-serif;
  background:
    radial-gradient(900px 520px at 10% -10%, #e6f1ea 0%, transparent 60%),
    radial-gradient(820px 520px at 102% -4%, #e7f1fb 0%, transparent 58%),
    linear-gradient(180deg,#f1f8f4 0%, #f7fbf9 60%, #f4faf7 100%);
  background-attachment:fixed;
  color:var(--text);font-size:14px;line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
a{color:var(--brand);text-decoration:none}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#cfe0d9;border-radius:9px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}

/* ============ Ambient decoration ============ */
.ambient{position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden}
.ambient span{position:absolute;border-radius:50%;filter:blur(48px);opacity:.5}
.ambient .a1{width:430px;height:430px;background:#bfe6d6;top:-130px;left:-90px}
.ambient .a2{width:390px;height:390px;background:#c3e2f4;top:-70px;right:-110px}
.ambient .a3{width:370px;height:370px;background:#f6d4dd;bottom:-150px;left:28%}

/* ============ Layout ============ */
.app{display:flex;min-height:100vh}
.sidebar{
  width:var(--sidebar-w);flex:0 0 var(--sidebar-w);
  background:rgba(255,255,255,.74);backdrop-filter:blur(10px);
  border-right:1px solid var(--line);display:flex;flex-direction:column;
  position:fixed;top:0;bottom:0;left:0;z-index:60;
}
.brand{
  padding:20px 16px 16px;border-bottom:0;
  background:linear-gradient(135deg,var(--brand) 0%, var(--brand-2) 100%);
  border-radius:0 0 24px 0;position:relative;overflow:hidden;
}
.brand:before{content:"";position:absolute;right:-26px;top:-26px;width:90px;height:90px;border-radius:50%;
  background:rgba(255,255,255,.16)}
.brand:after{content:"";position:absolute;right:14px;bottom:-30px;width:60px;height:60px;border-radius:50%;
  background:rgba(255,255,255,.12)}
.brand h1{margin:0;font-size:16px;font-weight:800;letter-spacing:-.2px;display:flex;align-items:center;gap:9px;color:#fff}
.brand .logo{width:28px;height:28px;border-radius:9px;background:rgba(255,255,255,.24);
  display:grid;place-items:center;color:#fff;font-size:14px;font-weight:800;flex:0 0 28px}
.brand p{margin:7px 0 0;font-size:11px;color:rgba(255,255,255,.88)}
.nav{flex:1;padding:14px 10px;overflow-y:auto}
.nav-item{
  display:flex;align-items:center;gap:9px;padding:10px 11px;border-radius:13px;
  color:var(--text-2);cursor:pointer;font-size:13.5px;margin-bottom:3px;position:relative;
  transition:background .14s,color .14s,transform .14s;user-select:none;
}
.nav-item:hover{background:var(--panel-2);color:var(--text);transform:translateX(2px)}
.nav-item.active{background:var(--brand-soft);color:var(--brand);font-weight:700}
.nav-item .ic{width:18px;text-align:center;flex:0 0 18px;font-size:15px}
.nav-item .badge{margin-left:auto;background:var(--danger);color:#fff;font-size:10.5px;
  min-width:18px;height:18px;border-radius:10px;display:grid;place-items:center;padding:0 5px;font-weight:700;
  box-shadow:0 2px 6px rgba(230,132,136,.4)}
.nav-sep{font-size:10.5px;color:var(--text-3);padding:14px 11px 6px;font-weight:700;letter-spacing:.7px}
.side-foot{padding:11px;border-top:1px solid var(--line-2)}
.role-switch{display:flex;background:var(--panel-2);border:1px solid var(--line);border-radius:11px;padding:3px;gap:3px}
.role-switch button{flex:1;border:0;background:transparent;padding:6px 4px;border-radius:8px;
  font-size:12px;cursor:pointer;color:var(--text-2);transition:.14s}
.role-switch button.on{background:var(--panel);color:var(--brand);font-weight:700;box-shadow:var(--shadow)}

.main{flex:1;margin-left:var(--sidebar-w);min-width:0;display:flex;flex-direction:column}
.topbar{
  height:58px;background:rgba(255,255,255,.78);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;
  padding:0 22px;position:sticky;top:0;z-index:50;
}
.topbar h2{margin:0;font-size:16.5px;font-weight:800;letter-spacing:-.2px;display:flex;align-items:center;gap:8px}
.topbar h2:before{content:"🌿";font-size:16px}
.topbar .sub{font-size:12px;color:var(--text-3);margin-left:2px}
.topbar .spacer{flex:1}
.content{padding:22px;max-width:1440px;width:100%}
.menu-btn{display:none;border:1px solid var(--line);background:var(--panel);width:36px;height:36px;
  border-radius:10px;cursor:pointer;font-size:16px;color:var(--text-2)}
.scrim{display:none;position:fixed;inset:0;background:rgba(46,74,64,.32);z-index:55}
.scrim.show{display:block}

/* ============ Atoms ============ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line);
  background:var(--panel);color:var(--text);padding:8px 15px;border-radius:13px;
  cursor:pointer;font-size:13px;font-weight:600;transition:.15s;white-space:nowrap;
}
.btn:hover{background:var(--panel-2);border-color:#d3ddd8;transform:translateY(-1px);box-shadow:var(--shadow)}
.btn:active{transform:translateY(.5px)}
.btn.primary{background:linear-gradient(135deg,var(--brand),var(--brand-2));border-color:transparent;color:#fff;
  box-shadow:0 6px 16px rgba(72,179,156,.28)}
.btn.primary:hover{filter:brightness(1.04);box-shadow:0 8px 20px rgba(72,179,156,.34)}
.btn.ok{background:var(--ok);border-color:var(--ok);color:#fff}
.btn.ok:hover{filter:brightness(1.04)}
.btn.danger{background:var(--panel);border-color:#f3cfd0;color:var(--danger)}
.btn.danger:hover{background:var(--danger-soft)}
.btn.sm{padding:5px 11px;font-size:12px;border-radius:11px}
.btn.xs{padding:3.5px 9px;font-size:11.5px;border-radius:9px}
.btn.block{width:100%}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}

.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);
  transition:box-shadow .18s,transform .18s}
.card:hover{box-shadow:var(--shadow-lg)}
.card-h{padding:14px 18px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;gap:10px}
.card-h h3{margin:0;font-size:14.5px;font-weight:800}
.card-h .spacer{flex:1}
.card-b{padding:18px}

.tag{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:20px;
  font-size:11.5px;font-weight:700;background:var(--panel-2);color:var(--text-2);border:1px solid var(--line)}
.tag.blue{background:var(--brand-soft);color:var(--brand);border-color:#cae9e1}
.tag.green{background:var(--ok-soft);color:var(--ok);border-color:#cdeada}
.tag.orange{background:var(--warn-soft);color:var(--warn);border-color:#f6ddb4}
.tag.red{background:var(--danger-soft);color:var(--danger);border-color:#f4cdd0}
.tag.purple{background:var(--purple-soft);color:var(--purple);border-color:#ddd3f3}
.tag.gray{background:#eef2f0;color:var(--text-2)}

/* ============ Mini Stats (助理概况) ============ */
.mini-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.mini-stat{padding:12px 14px;border-radius:12px;background:var(--bg-2);border:1px solid var(--line-2)}
.mini-stat .ms-lbl{font-size:11.5px;color:var(--text-2);margin-bottom:4px}
.mini-stat .ms-val{font-size:24px;font-weight:800;line-height:1.2}
.mini-stat .ms-sub{font-size:11px;color:var(--text-2);margin-top:2px}
.mini-stat.g{background:#eef8f2;border-color:#bfe6d2}
.mini-stat.g .ms-val{color:var(--ok)}
.mini-stat.p{background:#f3eefb;border-color:#d8c9f0}
.mini-stat.p .ms-val{color:#9b8ad4}
.mini-stat.r{background:#fdeeec;border-color:#f5c9c4}
.mini-stat.r .ms-val{color:var(--danger)}

/* ============ Section Divider ============ */
.sec-div{font-size:13px;font-weight:800;color:var(--text-2);margin:24px 2px 14px;display:flex;align-items:center;gap:12px;letter-spacing:.3px}
.sec-div:first-child{margin-top:0}
.sec-div::after{content:'';flex:1;height:1px;background:linear-gradient(90deg,var(--line-2),transparent)}
.sec-div .sd-ic{font-size:15px}

.field{margin-bottom:14px}
.field label{display:block;font-size:12.5px;color:var(--text-2);margin-bottom:6px;font-weight:700}
.field label .req{color:var(--danger);margin-left:2px}
.field .hint{font-size:11.5px;color:var(--text-3);margin-top:4px}
.input,.select,.textarea{
  width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);
  background:var(--panel);outline:none;transition:.15s;font-size:13.5px;
}
.input:focus,.select:focus,.textarea:focus{border-color:var(--brand);box-shadow:0 0 0 4px rgba(72,179,156,.13)}
.textarea{resize:vertical;min-height:76px;line-height:1.65}
.select{appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M3 4.5L6 8l3-3.5' stroke='%2394a89f' stroke-width='1.5' fill='none' stroke-linecap='round'/></svg>");
  background-repeat:no-repeat;background-position:right 11px center;padding-right:30px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0 14px}
.task-store-picker{position:relative;border:1px solid var(--line);border-radius:8px;background:#fff}
.task-store-picker>summary{min-height:42px;padding:10px 12px;display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer;list-style:none;color:var(--text-1)}
.task-store-picker>summary::-webkit-details-marker{display:none}
.task-store-picker>summary span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.task-store-picker>summary i{font-style:normal;color:var(--text-3)}
.task-store-picker[open]>summary{border-bottom:1px solid var(--line)}
.task-store-picker>div{max-height:210px;overflow:auto;padding:6px}
.task-store-picker>div label{display:flex;align-items:center;gap:9px;margin:0;padding:9px 8px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer}
.task-store-picker>div label:hover{background:var(--bg)}
.task-store-picker>div input{width:16px;height:16px;accent-color:var(--primary)}
.task-store-picker>div p{margin:8px;color:var(--text-3);font-size:12px}

/* ============ Stats ============ */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:14px;margin-bottom:18px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px 17px;
  box-shadow:var(--shadow);position:relative;overflow:hidden;cursor:pointer;transition:.16s}
.stat:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px)}
.stat:before{content:"";position:absolute;right:-18px;top:-18px;width:70px;height:70px;border-radius:50%;
  background:var(--brand-soft);opacity:.6}
.stat .lbl{font-size:12px;color:var(--text-2);display:flex;align-items:center;gap:5px;margin-bottom:8px;font-weight:600}
.stat .val{font-size:26px;font-weight:900;letter-spacing:-.8px;line-height:1;color:var(--text);position:relative}
.stat .dt{font-size:11.5px;color:var(--text-3);margin-top:7px;position:relative}
.stat .bar{position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:0 4px 4px 0;background:var(--brand);z-index:2}
.stat.g .bar{background:var(--ok)} .stat.o .bar{background:var(--warn)}
.stat.r .bar{background:var(--danger)} .stat.p .bar{background:var(--purple)}
.stat.g:before{background:var(--ok-soft)} .stat.o:before{background:var(--warn-soft)}
.stat.r:before{background:var(--danger-soft)} .stat.p:before{background:var(--purple-soft)}

/* ============ Table ============ */
.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:620px}
table.tbl th{
  text-align:left;padding:10px 13px;background:var(--panel-2);border-bottom:1px solid var(--line);
  font-size:11.5px;font-weight:800;color:var(--text-2);white-space:nowrap;letter-spacing:.3px;
  position:sticky;top:0;z-index:2;
}
table.tbl td{padding:11px 13px;border-bottom:1px solid var(--line-2);vertical-align:middle}
table.tbl tr:last-child td{border-bottom:0}
table.tbl tbody tr{transition:background .12s}
table.tbl tbody tr:hover{background:#f3f9f6}
.cell-main{font-weight:700}
.cell-sub{font-size:11.5px;color:var(--text-3);margin-top:2px}
.row-actions{display:flex;gap:6px;justify-content:flex-end;white-space:nowrap}

.empty{text-align:center;padding:48px 20px;color:var(--text-3)}
.empty .ico{font-size:36px;margin-bottom:10px;opacity:.6}
.empty p{margin:0 0 4px;font-size:13.5px}
.empty small{font-size:12px;color:var(--text-3)}

/* ============ Modal ============ */
.modal-mask{position:fixed;inset:0;background:rgba(46,74,64,.4);z-index:200;display:flex;
  align-items:flex-start;justify-content:center;padding:36px 16px;overflow-y:auto;
  animation:fade .15s ease;backdrop-filter:blur(2px)}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes pop{from{opacity:0;transform:translateY(12px) scale(.99)}to{opacity:1;transform:none}}
.modal{background:var(--panel);border-radius:22px;width:100%;max-width:620px;box-shadow:var(--shadow-lg);
  animation:pop .18s ease;margin:auto 0;border:1px solid var(--line)}
.modal.wide{max-width:900px}
.modal-h{padding:17px 20px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;gap:10px}
.modal-h h3{margin:0;font-size:15.5px;font-weight:800}
.modal-h .x{margin-left:auto;border:0;background:transparent;font-size:20px;color:var(--text-3);
  cursor:pointer;width:30px;height:30px;border-radius:8px;line-height:1}
.modal-h .x:hover{background:var(--panel-2);color:var(--text)}
.modal-b{padding:20px;max-height:calc(100vh - 220px);overflow-y:auto}
.modal-f{padding:14px 20px;border-top:1px solid var(--line-2);display:flex;gap:10px;justify-content:flex-end;
  background:var(--panel-2);border-radius:0 0 22px 22px}

/* ============ Pipeline ============ */
.stage-flow{display:flex;align-items:center;gap:0;flex-wrap:wrap;margin-bottom:4px}
.stage-node{display:flex;align-items:center;gap:6px;padding:6px 13px;border-radius:20px;font-size:12px;
  background:#eef3f0;color:var(--text-3);font-weight:700;border:1px solid transparent}
.stage-node.done{background:var(--ok-soft);color:var(--ok);border-color:#cdeada}
.stage-node.cur{background:linear-gradient(135deg,var(--brand),var(--brand-2));color:#fff;
  box-shadow:0 4px 12px rgba(72,179,156,.3)}
.stage-node.fail{background:var(--danger-soft);color:var(--danger);border-color:#f4cdd0}
.stage-arrow{width:16px;height:2px;background:var(--line);margin:0 4px;flex:0 0 16px;border-radius:2px}

.chk-list{display:flex;flex-direction:column;gap:9px}
.chk{display:flex;align-items:flex-start;gap:11px;padding:12px 14px;border:1px solid var(--line);
  border-radius:13px;background:var(--panel);transition:.14s;cursor:pointer}
.chk:hover{border-color:#cfe2da;background:var(--panel-2)}
.chk.on{background:var(--ok-soft);border-color:#bfe6cf}
.chk .box{width:20px;height:20px;border:1.8px solid #c7d2cc;border-radius:7px;flex:0 0 20px;
  display:grid;place-items:center;font-size:12px;color:transparent;transition:.14s;margin-top:1px;background:#fff}
.chk.on .box{background:var(--ok);border-color:var(--ok);color:#fff}
.chk .txt{flex:1;min-width:0}
.chk .t{font-weight:700;font-size:13.2px}
.chk .d{font-size:11.8px;color:var(--text-3);margin-top:2px;line-height:1.55}
.chk .when{font-size:11px;color:var(--ok);margin-top:3px;font-weight:700}

.day-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
.day-cell{border:1px solid var(--line);border-radius:12px;padding:10px 5px;text-align:center;cursor:pointer;
  transition:.14s;background:var(--panel)}
.day-cell:hover{border-color:var(--brand);background:var(--brand-soft)}
.day-cell.done{background:var(--ok-soft);border-color:#bfe6cf}
.day-cell.risk{background:var(--danger-soft);border-color:#f1c9cc}
.day-cell.today{border-color:var(--brand);border-width:2px;box-shadow:0 0 0 4px rgba(72,179,156,.12)}
.day-cell .dn{font-size:11px;color:var(--text-3);font-weight:700}
.day-cell .di{font-size:18px;margin-top:4px;line-height:1.2}
.day-cell.done .di{color:var(--ok)}

.timeline{position:relative;padding-left:22px}
.timeline:before{content:"";position:absolute;left:6px;top:5px;bottom:5px;width:1.5px;background:var(--line)}
.tl-item{position:relative;padding-bottom:15px}
.tl-item:before{content:"";position:absolute;left:-19px;top:5px;width:9px;height:9px;border-radius:50%;
  background:var(--brand);box-shadow:0 0 0 3px #fff}
.tl-item.g:before{background:var(--ok)}
.tl-item.o:before{background:var(--warn)}
.tl-item .tt{font-size:13px;font-weight:700}
.tl-item .td{font-size:11.5px;color:var(--text-3);margin-top:1px}

/* ============ Todo ============ */
.todo{display:flex;gap:12px;padding:13px 15px;border:1px solid var(--line);border-radius:14px;
  background:var(--panel);margin-bottom:10px;transition:.14s}
.todo:hover{box-shadow:var(--shadow);border-color:#d5ddd9;transform:translateY(-1px)}
.todo.urgent{border-left:4px solid var(--danger);background:#fffafb}
.todo.warn{border-left:4px solid var(--warn);background:#fffdf6}
.todo.normal{border-left:4px solid var(--brand)}
.todo .ti{font-size:20px;flex:0 0 auto;line-height:1.3}
.todo .tb{flex:1;min-width:0}
.todo .tt{font-weight:700;font-size:13.4px}
.todo .ts{font-size:12px;color:var(--text-2);margin-top:2px;line-height:1.55}
.todo .ta{display:flex;gap:6px;align-items:center;flex-shrink:0}

/* ============ Screenshots ============ */
.shot-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(128px,1fr));gap:12px}
.shot{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--panel-2);
  position:relative;cursor:pointer;transition:.14s}
.shot:hover{box-shadow:var(--shadow-lg);border-color:var(--brand)}
.shot img{width:100%;height:106px;object-fit:cover;display:block}
.shot .meta{padding:7px 9px;font-size:11px;color:var(--text-2);border-top:1px solid var(--line-2);background:#fff}
.shot .del{position:absolute;top:6px;right:6px;background:rgba(46,74,64,.6);color:#fff;border:0;
  width:22px;height:22px;border-radius:7px;cursor:pointer;font-size:12px;opacity:0;transition:.14s;line-height:1}
.shot:hover .del{opacity:1}
.drop{border:1.8px dashed var(--line);border-radius:14px;padding:24px;text-align:center;color:var(--text-3);
  cursor:pointer;transition:.14s;background:var(--panel-2)}
.drop:hover,.drop.over{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}
.lightbox{position:fixed;inset:0;background:rgba(20,40,34,.9);z-index:300;display:grid;place-items:center;padding:22px}
.lightbox img{max-width:100%;max-height:92vh;border-radius:12px}

/* ============ Scripts KB ============ */
.kb-layout{display:grid;grid-template-columns:196px 1fr;gap:18px;align-items:start}
.kb-cat{padding:9px 12px;border-radius:11px;cursor:pointer;font-size:13px;color:var(--text-2);
  display:flex;align-items:center;gap:8px;margin-bottom:3px;transition:.14s}
.kb-cat:hover{background:var(--panel-2)}
.kb-cat.on{background:var(--brand-soft);color:var(--brand);font-weight:700}
.kb-cat .n{margin-left:auto;font-size:11px;color:var(--text-3)}
.kb-cat.on .n{color:var(--brand)}
.script{border:1px solid var(--line);border-radius:14px;padding:15px 16px;margin-bottom:12px;background:var(--panel);
  transition:.14s}
.script:hover{box-shadow:var(--shadow);border-color:#d3ded9}
.script h4{margin:0 0 8px;font-size:14px;display:flex;align-items:center;gap:7px;font-weight:800}
.script .body{font-size:13px;color:var(--text-2);line-height:1.8;white-space:pre-wrap;
  background:var(--panel-2);padding:12px 14px;border-radius:11px;border:1px solid var(--line-2)}
.script .foot{display:flex;gap:7px;align-items:center;margin-top:10px;flex-wrap:wrap}
.star{cursor:pointer;font-size:16px;color:#d9e2dd;transition:.14s;user-select:none}
.star:hover{transform:scale(1.15)}
.star.on{color:#f4b740}

/* ============ Misc ============ */
.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:16px;flex-wrap:wrap}
.toolbar .grow{flex:1;min-width:130px}
.search{position:relative;flex:1;min-width:150px;max-width:300px}
.search input{width:100%;padding:8.5px 12px 8.5px 33px;border:1px solid var(--line);
  border-radius:var(--radius-sm);outline:none;background:var(--panel);font-size:13px}
.search input:focus{border-color:var(--brand);box-shadow:0 0 0 4px rgba(72,179,156,.13)}
.search .si{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--text-3);font-size:13px}
.seg{display:inline-flex;background:var(--panel-2);border:1px solid var(--line);border-radius:11px;padding:3px;gap:3px}
.seg button{border:0;background:transparent;padding:6px 12px;border-radius:8px;cursor:pointer;
  font-size:12.5px;color:var(--text-2);transition:.14s;white-space:nowrap}
.seg button.on{background:var(--panel);color:var(--brand);font-weight:700;box-shadow:var(--shadow)}

.progress{height:7px;background:var(--line-2);border-radius:6px;overflow:hidden}
.progress span{display:block;height:100%;background:linear-gradient(90deg,var(--brand),var(--brand-2));
  border-radius:6px;transition:width .35s}
.progress.g span{background:linear-gradient(90deg,var(--ok),#7cc9a0)}
.progress.o span{background:linear-gradient(90deg,var(--warn),#f1c070)}

.funnel-row{display:flex;align-items:center;gap:11px;margin-bottom:9px}
.funnel-row .fl{width:68px;font-size:12.5px;color:var(--text-2);flex:0 0 68px;font-weight:600}
.funnel-row .fb{flex:1;height:28px;background:var(--panel-2);border-radius:8px;overflow:hidden;position:relative}
.funnel-row .fb i{display:block;height:100%;border-radius:8px;transition:width .5s ease}
.funnel-row .fv{position:absolute;left:10px;top:50%;transform:translateY(-50%);font-size:12px;
  font-weight:800;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.16)}
.funnel-row .fr{width:52px;text-align:right;font-size:12px;color:var(--text-3);flex:0 0 52px}

.avatar{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;color:#fff;
  font-size:13px;font-weight:800;flex:0 0 34px}
.person{display:flex;align-items:center;gap:10px}

.toast-wrap{position:fixed;top:16px;right:16px;z-index:400;display:flex;flex-direction:column;gap:8px}
.toast{background:#34564b;color:#fff;padding:11px 16px;border-radius:12px;font-size:13px;
  box-shadow:var(--shadow-lg);animation:slideIn .2s ease;max-width:300px}
.toast.ok{background:var(--ok)} .toast.err{background:var(--danger)}
@keyframes slideIn{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}

.hl{background:#fff3c4;padding:0 2px;border-radius:3px}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px}
.muted{color:var(--text-3)}
.nowrap{white-space:nowrap}
.flex{display:flex;align-items:center;gap:8px}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}
.mb8{margin-bottom:8px}.mb12{margin-bottom:12px}.mb16{margin-bottom:16px}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.three-col{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;align-items:start}

/* ============ Hero (healing banner) ============ */
.hero{
  display:flex;align-items:center;gap:18px;margin:-4px 0 20px;padding:18px 20px;
  background:linear-gradient(120deg,#eaf6f1 0%, #e9f3fb 100%);
  border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);
  position:relative;overflow:hidden;flex-wrap:wrap;
}
.hero:before{content:"";position:absolute;right:-40px;bottom:-60px;width:200px;height:200px;border-radius:50%;
  background:radial-gradient(circle, rgba(91,184,201,.22), transparent 70%)}
.hero-ill{flex:0 0 auto;width:118px;height:96px;position:relative}
.hero-txt{flex:1;min-width:200px;position:relative}
.hero-txt h1{margin:0 0 5px;font-size:19px;font-weight:800;color:var(--text)}
.hero-txt p{margin:0;font-size:13px;color:var(--text-2);line-height:1.6}
.hero-txt .hl-row{margin-top:9px;display:flex;gap:8px;flex-wrap:wrap}
.hero-txt .pill{font-size:11.5px;font-weight:700;padding:4px 11px;border-radius:20px;
  background:#fff;color:var(--brand);border:1px solid #cae9e1;box-shadow:0 2px 6px rgba(72,179,156,.1)}
.hero-txt .pill.w{color:var(--warn);border-color:#f6ddb4;background:#fff}
.hero-txt .pill.r{color:var(--danger);border-color:#f4cdd0;background:#fff}

/* ============ 工作任务 ============ */
.task-check{
  flex:0 0 auto;width:26px;height:26px;border-radius:50%;border:2px solid #cfe6df;
  background:#fff;color:transparent;font-size:15px;font-weight:700;line-height:1;
  display:grid;place-items:center;cursor:pointer;transition:.15s;margin-top:2px;user-select:none;
}
.task-check:hover{border-color:var(--brand);background:var(--brand-soft)}
.task-check.done{border-color:var(--brand);background:var(--brand);color:#fff}
.task-wd{display:inline-flex;gap:14px;flex-wrap:wrap}
.task-wd label{display:inline-flex;gap:5px;align-items:center;font-size:13px;cursor:pointer}
.task-list{border:1px solid var(--line);border-radius:8px;background:var(--panel);overflow:hidden}
.task-list-head,.task-list-row{display:grid;grid-template-columns:100px minmax(260px,1fr) 150px 150px 190px;gap:12px;align-items:center}
.task-list-head{padding:10px 14px;background:var(--panel-2);font-size:11.5px;font-weight:700;color:var(--text-3);border-bottom:1px solid var(--line)}
.task-list-row{padding:13px 14px;border-bottom:1px solid var(--line-2);min-height:72px}
.task-list-row:last-child{border-bottom:0}
.task-list-row:hover{background:#f8fbf9}
.task-list-row.is-done{opacity:.72}
.task-main,.task-person,.task-due{display:flex;flex-direction:column;gap:4px;min-width:0}
.task-main b{font-size:13.5px;color:var(--text);overflow-wrap:anywhere}
.task-main span,.task-person span,.task-due span{font-size:11.5px;color:var(--text-3)}
.task-person b,.task-due b{font-size:12.5px;color:var(--text-2)}
.task-actions{display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}
.task-status{display:inline-flex;align-items:center;justify-content:center;min-height:28px;padding:4px 9px;border-radius:6px;font-size:11.5px;font-weight:700;white-space:nowrap}
.task-status.todo{background:var(--warn-soft);color:var(--warn)}
.task-status.overdue{background:var(--danger-soft);color:var(--danger)}
.task-status.done{background:var(--ok-soft);color:var(--ok)}
.task-due .request-pending{color:var(--warn)}
.task-due .request-approved{color:var(--ok)}
.task-due .request-rejected{color:var(--danger)}
.task-period-section{margin-bottom:18px}
.task-period-title{display:flex;align-items:center;gap:7px;margin:8px 2px 9px;color:var(--text-2)}
.task-period-title>b{font-size:14px}.task-period-title>span:last-child{font-size:12px;color:var(--text-3);font-weight:400}
.task-period-empty{padding:18px;border:1px dashed var(--line);border-radius:8px;background:var(--panel);color:var(--text-3);font-size:12.5px;text-align:center}
.task-template-table{border:1px solid var(--line);border-radius:8px;background:var(--panel);overflow:hidden}
.task-template-head,.task-template-row{display:grid;grid-template-columns:minmax(250px,1.5fr) 140px 135px 130px 90px minmax(230px,1fr);gap:12px;align-items:center}
.task-template-head{padding:9px 12px;background:var(--panel-2);border-bottom:1px solid var(--line);color:var(--text-3);font-size:11.5px;font-weight:700}
.task-template-row{min-height:66px;padding:10px 12px;border-bottom:1px solid var(--line-2)}
.task-template-row:last-child{border-bottom:0}.task-template-row:hover{background:#f8fbf9}.task-template-row.is-paused{opacity:.62}
.task-template-main,.task-template-rule,.task-template-owner,.task-template-next,.task-template-rate{display:flex;min-width:0;flex-direction:column;gap:4px}
.task-template-main>b{font-size:13.5px;overflow-wrap:anywhere}.task-template-main>span{display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-3);font-size:11.5px}
.task-template-main i{flex:none;padding:2px 6px;border-radius:4px;color:#fff;font-size:10.5px;font-style:normal}
.task-template-rule>b,.task-template-owner>b,.task-template-next>b,.task-template-rate>b{color:var(--text-2);font-size:12.5px}.task-template-rule>span,.task-template-owner>span,.task-template-rate>span{color:var(--text-3);font-size:11.5px}
.task-template-next .task-status{align-self:flex-start;min-height:22px;padding:2px 6px;font-size:10.5px}
.task-template-actions{display:flex;justify-content:flex-end;gap:5px;flex-wrap:wrap}
.task-inventory-summary{display:flex;gap:10px;margin-bottom:10px}.task-inventory-summary>span{display:flex;align-items:baseline;gap:5px;padding:7px 10px;border:1px solid var(--line);border-radius:7px;background:var(--panel);color:var(--text-3);font-size:11.5px}.task-inventory-summary b{color:var(--text);font-size:16px}
.dashboard-control-grid{margin-bottom:18px}.dashboard-control-grid>.card{margin:0}
.approval-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line-2)}.approval-row:last-child{border-bottom:0}
.approval-row>div:first-child{display:flex;flex-direction:column;gap:3px;min-width:0}.approval-row b{font-size:13px}.approval-row span,.approval-row p{font-size:11.5px;color:var(--text-3)}.approval-row p{margin:2px 0 0;color:var(--text-2)}.approval-row>div:last-child{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}
.summary-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.summary-kpis>span{display:flex;flex-direction:column;gap:2px;padding:10px;border:1px solid var(--line);border-radius:8px;color:var(--text-3);font-size:11.5px}.summary-kpis b{color:var(--text);font-size:20px}.summary-kpis .danger b{color:var(--danger)}
.summary-role{display:flex;gap:18px;margin:12px 0;color:var(--text-2);font-size:12px}.summary-dept{display:grid;grid-template-columns:1fr 1fr;gap:10px}.summary-dept>div{position:relative;display:flex;flex-direction:column;gap:5px;padding-bottom:11px;color:var(--text-2);font-size:11.5px}.summary-dept>div:after{content:"";position:absolute;right:0;bottom:0;left:0;height:6px;border-radius:3px;background:var(--bg-2)}.summary-dept i{position:absolute;z-index:1;bottom:0;left:0;height:6px;border-radius:3px;max-width:100%}
.summary-modal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}.summary-modal-grid>div{display:flex;flex-direction:column;gap:4px;padding:12px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2)}.summary-modal-grid b,.summary-modal-grid span{font-size:11.5px;color:var(--text-3)}.summary-modal-grid strong{font-size:22px;color:var(--text)}
.task-detail-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.task-detail-summary span{display:flex;flex-direction:column;gap:4px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2);font-size:12.5px;color:var(--text-2)}
.task-detail-summary b{font-size:11px;color:var(--text-3)}
.task-note{padding:11px 13px;margin-bottom:14px;border-left:3px solid var(--brand);background:var(--brand-soft);font-size:12.5px;color:var(--text-2)}
.task-note>b{display:block;margin-bottom:7px;color:var(--text);font-size:11px}.task-note-content{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;line-height:1.75}
.task-attachments{display:flex;flex-direction:column;gap:6px}
.task-attachment{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px;align-items:center;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2)}
.task-attachment button{border:0;background:transparent;color:var(--brand);font:inherit;font-size:12px;cursor:pointer}
.task-attachment .remove{color:var(--danger)}
.task-attachment span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--text-2)}
.task-upload-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-height:112px;padding:16px;border:1.5px dashed #b9d9cf;border-radius:8px;background:var(--panel-2);text-align:center;cursor:pointer;outline:none;transition:.15s}
.store-upload-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;min-height:150px;margin:8px 0;padding:20px;border:2px dashed #7c9aaa;border-radius:12px;background:#f7fafc;text-align:center;cursor:pointer;outline:none;transition:.15s}.store-upload-zone:hover,.store-upload-zone:focus,.store-upload-zone.dragging{border-color:#1769aa;background:#eaf4ff;box-shadow:inset 0 0 0 3px rgba(23,105,170,.12)}.store-upload-zone.dragging{transform:scale(1.005)}.store-upload-zone.has-files{border-style:solid;border-color:var(--ok);background:var(--ok-soft)}.store-upload-title{font-size:16px;font-weight:800;color:#203040}.store-upload-zone b{font-size:14px;color:#273746}.store-upload-zone span{font-size:12px;color:#687887}.store-upload-zone strong{font-size:12px;color:#1769aa}.store-upload-zone.has-files strong{color:var(--ok)}
.store-upload-sides{display:grid;grid-template-columns:1fr 1fr;gap:14px;width:100%;max-width:760px}.store-upload-side{display:flex;min-height:112px;align-items:center;justify-content:center;flex-direction:column;gap:8px;border:2px dashed #d7dee8;border-radius:10px;background:#fff;cursor:pointer;transition:.15s}.store-upload-side:hover{border-color:#536ee8;background:#f7f8ff;box-shadow:0 0 0 3px rgba(83,110,232,.08)}.store-upload-side b{font-size:17px;color:#202938}.store-upload-side span{font-size:13px;color:#7b8798}.store-upload-side::before{content:'＋';display:grid;place-items:center;width:30px;height:30px;border:1px solid #b9c3d2;border-radius:50%;color:#536ee8;font-size:22px;line-height:1}.store-upload-zone{min-height:210px;border-color:#d7dee8;background:#fbfcfe}.store-upload-zone.dragging{border-color:#536ee8;background:#f7f8ff}@media(max-width:520px){.store-upload-sides{grid-template-columns:1fr}.store-upload-side{min-height:92px}}
.modal.wide:has(.store-upload-zone){max-width:980px}.modal.wide:has(.store-upload-zone) .modal-b{background:#f6f8fb;padding:24px 28px}.modal.wide:has(.store-upload-zone) .modal-b>hr{margin:22px 0 16px;border:0;border-top:1px solid #e1e6ee}.modal.wide:has(.store-upload-zone) .modal-b>h3{margin:0 0 16px;padding:12px 14px;border-left:4px solid #536ee8;border-radius:6px;background:#eef2ff;color:#25304a;font-size:17px}.modal.wide:has(.store-upload-zone) .modal-b>.field{background:#fff;border:1px solid #e2e7ef;border-radius:10px;padding:14px 16px;margin-bottom:14px;box-shadow:0 2px 8px rgba(36,48,70,.04)}.modal.wide:has(.store-upload-zone) .modal-b>.field>label{font-size:13px;color:#26344a}.modal.wide:has(.store-upload-zone) .modal-b>.grid2{gap:14px}.modal.wide:has(.store-upload-zone) .modal-b>.mt8{padding:4px 2px}.modal.wide:has(.store-upload-zone) .store-files{display:grid;gap:7px;margin-top:10px}.modal.wide:has(.store-upload-zone) .store-files>div{padding:9px 11px;border:1px solid #e2e7ef;border-radius:7px;background:#fafbfc;font-size:12px}
.store-upload-collapsible{margin-top:10px}.store-upload-collapsible[hidden]{display:none}.store-upload-toggle{border-color:#536ee8;color:#536ee8;background:#f7f8ff}.store-file-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.store-file-row>span{flex:1;min-width:180px}.store-file-row .btn{white-space:nowrap}
.store-form-section{margin:0 0 18px;padding:18px 20px;border:1px solid #e0e6ef;border-radius:14px;background:#fff;box-shadow:0 3px 12px rgba(41,55,80,.05)}.store-section-head{display:flex;align-items:center;gap:11px;margin:0 0 15px;padding-bottom:12px;border-bottom:1px solid rgba(0,0,0,.07)}.store-section-head>span{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;background:#536ee8;color:#fff;font-size:12px;font-weight:800}.store-section-head b{display:block;font-size:16px;color:#23334b}.store-section-head small{display:block;margin-top:3px;color:#75839a;font-size:11px}.store-section-basic{background:#f8fbff;border-color:#dce9fa}.store-section-basic .store-section-head>span{background:#4b83c4}.store-section-interview{background:#fffaf2;border-color:#f3e5c9}.store-section-interview .store-section-head>span{background:#d28b32}.store-section-docs{background:#f7f7ff;border-color:#dedff5}.store-section-docs .store-section-head>span{background:#7665c9}.store-section-billing{background:#f5fcfa;border-color:#d6eee5}.store-section-billing .store-section-head>span{background:#2d9b7d}.store-section-receiving{background:#fff8f7;border-color:#f2deda}.store-section-receiving .store-section-head>span{background:#cf705e}.store-section-note{background:#fafafa}.store-form-section>.field:last-child{margin-bottom:0}.store-form-section>.grid2{margin-bottom:0}.modal.wide:has(.store-upload-zone) .store-form-section>.field{background:rgba(255,255,255,.88)}
.task-upload-zone:hover,.task-upload-zone:focus,.task-upload-zone.dragging{border-color:var(--brand);background:var(--brand-soft)}
.task-upload-zone.dragging{box-shadow:inset 0 0 0 2px rgba(72,179,156,.12)}
.task-upload-zone.has-files{border-style:solid;border-color:var(--ok)}
.task-upload-zone b{font-size:13px;color:var(--text-2)}
.task-upload-zone span,.task-upload-zone [data-task-pending]{font-size:11.5px;color:var(--text-3)}
.task-upload-zone [data-task-pending]{margin-top:4px;color:var(--brand);font-weight:700}
.task-request-box{display:flex;flex-direction:column;gap:5px;margin:12px 0;padding:11px 12px;border-radius:8px;font-size:12.5px}
.task-request-box.pending{background:var(--warn-soft);color:var(--warn)}
.task-request-box.approved{background:var(--ok-soft);color:var(--ok)}
.task-request-box.rejected{background:var(--danger-soft);color:var(--danger)}
.task-extension-form{margin-top:14px;padding:14px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2)}
.task-extension-title{display:flex;flex-direction:column;gap:3px;margin-bottom:12px}.task-extension-title b{font-size:14px}.task-extension-title span{color:var(--text-3);font-size:11px}.extension-reason-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
.task-review-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}
@media(max-width:600px){.extension-reason-row{grid-template-columns:1fr}.extension-reason-row .btn{width:100%}}

/* ============ Responsive ============ */
@media(max-width:1100px){
  .two-col,.three-col{grid-template-columns:1fr}
  .task-list-head{display:none}
  .task-list-row{grid-template-columns:90px minmax(0,1fr);gap:10px}
  .task-person,.task-due,.task-actions{grid-column:2}
  .task-actions{justify-content:flex-start}
  .task-template-head{display:none}
  .task-template-row{grid-template-columns:minmax(0,1fr) 120px;gap:10px}
  .task-template-main{grid-column:1/-1}.task-template-owner,.task-template-next{grid-column:1}.task-template-rule,.task-template-rate{grid-column:2}
  .task-template-actions{grid-column:1/-1;justify-content:flex-start;padding-top:4px}
  .approval-row{grid-template-columns:1fr}.approval-row>div:last-child{justify-content:flex-start}.summary-modal-grid{grid-template-columns:1fr}
}
@media(max-width:860px){
  .sidebar{transform:translateX(-100%);transition:transform .22s ease;box-shadow:var(--shadow-lg)}
  .sidebar.open{transform:none}
  .main{margin-left:0}
  .menu-btn{display:grid;place-items:center}
  .content{padding:15px}
  .topbar{padding:0 15px;height:54px}
  .topbar h2{font-size:15px}
  .grid2,.grid3{grid-template-columns:1fr}
  .kb-layout{grid-template-columns:1fr}
  .day-grid{grid-template-columns:repeat(4,1fr)}
  .stats{grid-template-columns:repeat(2,1fr);gap:10px}
  .stat .val{font-size:22px}
  .modal-b{max-height:calc(100vh - 180px)}
  .modal-mask{padding:12px}
  .hero{padding:15px}
  .task-detail-summary{grid-template-columns:1fr}
}
@media(max-width:420px){
  .stats{grid-template-columns:1fr 1fr}
  .day-grid{grid-template-columns:repeat(4,1fr)}
}
@media print{
  .sidebar,.topbar,.btn,.toolbar,.ambient{display:none!important}
  .main{margin-left:0}
  .card{break-inside:avoid;box-shadow:none}
}

/* ============ 登录选身份 ============ */
.login-mask{
  position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(160deg,#eef6f1 0%,#e9f3fb 55%,#f1f8f4 100%);
  animation:fade .25s ease;overflow-y:auto;padding:30px 16px;
}
.login-card{
  width:100%;max-width:440px;background:var(--panel);border-radius:26px;
  box-shadow:0 12px 48px rgba(40,90,75,.12);border:1px solid var(--line);
  padding:36px 30px 30px;text-align:center;animation:pop .3s ease;position:relative;overflow:hidden;
}
.login-card:before{
  content:"";position:absolute;top:-60px;left:50%;transform:translateX(-50%);
  width:180px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(72,179,156,.15),transparent 70%);
}
.login-logo{
  width:56px;height:56px;border-radius:18px;margin:0 auto 16px;
  background:linear-gradient(135deg,var(--brand) 0%,var(--brand-2) 100%);
  display:grid;place-items:center;color:#fff;font-size:26px;font-weight:800;
  box-shadow:0 6px 18px rgba(72,179,156,.3);position:relative;
}
.login-card h1{margin:0 0 6px;font-size:22px;font-weight:800;color:var(--text);position:relative}
.login-card .login-sub{margin:0 0 26px;font-size:13.5px;color:var(--text-2);position:relative}
.login-form{display:flex;flex-direction:column;gap:8px;position:relative;text-align:left}
.login-form label{font-size:12px;font-weight:700;color:var(--text-2);margin-top:3px}
.login-form input{width:100%;height:44px;border:1px solid var(--line);border-radius:10px;background:var(--panel-2);padding:0 12px;font:inherit;color:var(--text);outline:none}
.login-form input:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(72,179,156,.12);background:#fff}
.login-submit{height:44px;margin-top:8px;border:0;border-radius:10px;background:var(--brand);color:#fff;font:inherit;font-weight:800;cursor:pointer}
.login-submit:hover{background:#3ca48e}
.login-submit:disabled{opacity:.65;cursor:wait}
.login-error{min-height:18px;color:var(--danger);font-size:12px;text-align:center}
.login-divider{display:flex;align-items:center;gap:10px;margin:18px 0 14px;color:var(--text-3);font-size:12px}
.login-divider:before,.login-divider:after{content:"";height:1px;background:var(--line);flex:1}
.feishu-login{width:100%;height:44px;border:1px solid #3370ff;border-radius:10px;background:#fff;color:#245bdb;font:inherit;font-weight:800;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:10px}
.feishu-login:hover{background:#f2f6ff}
.feishu-mark{width:20px;height:20px;display:grid;grid-template-columns:1fr 1fr;gap:2px;transform:rotate(45deg)}
.feishu-mark i{display:block;border-radius:2px}
.feishu-mark i:nth-child(1){background:#3370ff}.feishu-mark i:nth-child(2){background:#00d6b9}.feishu-mark i:nth-child(3){background:#ff2e65}.feishu-mark i:nth-child(4){background:#ffc60a}
.signed-user{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--panel-2)}
.signed-user b{font-size:12px;color:var(--text)}
.signed-user span{font-size:11px;color:var(--text-3)}
.signed-user-copy{display:flex;min-width:0;flex-direction:column;gap:2px}.signed-user-copy b,.signed-user-copy span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.role-view-select{max-width:92px;height:28px;padding:0 5px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--text-2);font-size:10px}
.login-role{
  display:flex;align-items:center;gap:14px;padding:18px 18px;border-radius:18px;
  border:2px solid var(--line);background:var(--panel-2);cursor:pointer;text-align:left;
  transition:.18s;position:relative;
}
.login-role:hover{
  border-color:var(--brand);background:#fff;box-shadow:0 6px 20px rgba(72,179,156,.12);transform:translateY(-1px);
}
.login-role .lr-ico{
  width:46px;height:46px;border-radius:14px;flex:0 0 46px;display:grid;place-items:center;
  font-size:22px;
}
.login-role.manager .lr-ico{background:var(--brand-soft);color:var(--brand)}
.login-role.hr .lr-ico{background:var(--brand-soft2);color:var(--brand-2)}
.login-role .lr-txt{flex:1}
.login-role .lr-txt b{font-size:15px;font-weight:800;color:var(--text);display:block;margin-bottom:2px}
.login-role .lr-txt span{font-size:12px;color:var(--text-2);line-height:1.5}
.login-role .lr-arrow{color:var(--text-3);font-size:18px;transition:.18s}
.login-role:hover .lr-arrow{color:var(--brand);transform:translateX(3px)}
.login-foot{margin-top:20px;font-size:11.5px;color:var(--text-3);position:relative}
.login-switch-hint{
  margin-top:14px;padding:10px 14px;border-radius:12px;background:var(--brand-soft);
  font-size:11.5px;color:var(--brand);line-height:1.6;display:flex;align-items:center;gap:6px;justify-content:center;
}
/* ---------- 考勤整理工具 ---------- */
.attendance-tool-shell {
  width: 100%;
  min-height: calc(100vh - 104px);
  background: #f6f8fb;
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
}
.attendance-tool-frame {
  display: block;
  width: 100%;
  min-height: calc(100vh - 106px);
  border: 0;
  background: #f6f8fb;
}
.shot-paste-zone{display:flex;min-height:132px;align-items:center;justify-content:center;flex-direction:column;gap:6px;margin-bottom:14px;padding:18px;border:2px dashed #cbd5dc;border-radius:8px;background:var(--panel-2);text-align:center;cursor:pointer;outline:none}.shot-paste-zone b{font-size:14px}.shot-paste-zone span{color:var(--text-3);font-size:11px}.shot-paste-zone strong{margin-top:5px;color:var(--text-3);font-size:11px}.shot-paste-zone.dragging{border-color:var(--brand);background:var(--brand-soft)}.shot-paste-zone.has-files{border-style:solid;border-color:var(--ok);background:var(--ok-soft)}.shot-paste-zone.has-files strong{color:var(--ok)}
.shot-platform-legend{display:flex;flex-wrap:wrap;gap:6px 12px;margin-bottom:8px}.shot-platform-legend span{display:flex;align-items:center;gap:5px;color:var(--text-2);font-size:10px}.shot-platform-legend i,.shot-platform-table td:first-child i{display:inline-block;width:7px;height:7px;border-radius:50%}.shot-week-chart{display:flex;align-items:flex-end;gap:8px;height:120px}.shot-day-column{display:flex;height:100%;min-width:0;align-items:center;justify-content:flex-end;flex:1;flex-direction:column;gap:5px}.shot-day-total{font-size:12px}.shot-stacked-bar{display:flex;width:100%;min-height:3px;overflow:hidden;flex-direction:column-reverse;background:#dce3e8;border-radius:5px 5px 0 0;transition:height .4s}.shot-stacked-bar i{display:block;width:100%;min-height:2px}.shot-day-column>span{color:var(--text-3);font-size:11px}.shot-day-column>small{min-height:12px;color:var(--text-3);font-size:9px;white-space:nowrap}.shot-platform-table-wrap{margin-top:13px;overflow-x:auto;border:1px solid var(--line-2);border-radius:6px}.shot-platform-table{width:100%;min-width:560px;border-collapse:collapse;font-size:10px}.shot-platform-table th,.shot-platform-table td{padding:7px 8px;border-bottom:1px solid var(--line-2);text-align:center;white-space:nowrap}.shot-platform-table th{color:var(--text-3);background:var(--panel-2);font-weight:600}.shot-platform-table td:first-child{display:flex;align-items:center;gap:5px;text-align:left}.shot-platform-table tbody tr:last-child td{border-bottom:0}.shot-platform-empty{padding:18px 0 4px;color:var(--text-3);text-align:center;font-size:11px}
.report-platform-conversion .card-h p{margin:3px 0 0;color:var(--text-3);font-size:11.5px;font-weight:400}.report-platform-table-wrap{overflow-x:auto}.report-platform-table{width:100%;min-width:850px;border-collapse:collapse}.report-platform-table th,.report-platform-table td{padding:11px 12px;border-bottom:1px solid var(--line-2);text-align:center;font-size:12px;white-space:nowrap}.report-platform-table th{background:var(--panel-2);color:var(--text-3);font-size:11px;font-weight:700}.report-platform-table td:first-child{text-align:left}.report-platform-table tbody tr:last-child td{border-bottom:0}.report-platform-table tbody tr:hover{background:#f8fbf9}.report-platform-table strong{color:var(--brand);font-size:13px}.platform-dot{display:inline-block;width:8px;height:8px;margin-right:7px;border-radius:50%;background:#88b8aa}.platform-dot-1{background:#a9bde5}.platform-dot-2{background:#e9b6bd}.platform-dot-3{background:#e8c990}.platform-dot-4{background:#bdaedb}.platform-dot-5{background:#9bcac6}.report-platform-note{padding:10px 14px;background:var(--panel-2);color:var(--text-3);font-size:10.5px;line-height:1.6}.report-platform-empty{padding:32px 16px;color:var(--text-3);text-align:center;font-size:12px}
.interview-time-edit{display:inline-flex;align-items:center;gap:7px;padding:5px 8px 5px 12px;border:1px solid var(--line);border-radius:20px;background:#f4f6f5;color:var(--text-2);font:inherit;font-size:12px;cursor:pointer;transition:.15s}.interview-time-edit:hover{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}.interview-time-edit.today{border-color:#f2d49d;background:var(--warn-soft);color:var(--warn)}.interview-time-edit i{padding:2px 6px;border-radius:10px;background:rgba(255,255,255,.8);font-size:10px;font-style:normal;font-weight:700}.interview-reminder-reset{display:flex;align-items:flex-start;gap:9px;padding:11px 12px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2);cursor:pointer}.interview-reminder-reset input{margin-top:3px}.interview-reminder-reset span{display:flex;flex-direction:column;gap:3px}.interview-reminder-reset b{font-size:12.5px}.interview-reminder-reset small{color:var(--text-3);font-size:11px}
.chk .interview-store-copy{align-self:center;flex:0 0 auto;margin-left:10px;background:#fff;color:var(--brand);border-color:#bfe1d8}.chk .interview-store-copy:hover{background:var(--brand-soft)}
.stage-communication{margin-top:14px;padding:12px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2)}.stage-communication-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.stage-communication-head>div:first-child{display:flex;min-width:0;flex-direction:column;gap:3px}.stage-communication-head b{font-size:12.5px}.stage-communication-head span{color:var(--text-3);font-size:10.5px}.stage-communication-head>div:last-child{display:flex;flex:0 0 auto;gap:6px}.stage-communication-empty{padding:12px 0 2px;color:var(--text-3);font-size:11px}.stage-communication-list{display:flex;flex-direction:column;gap:7px;margin-top:10px}.stage-communication-list>div{padding:9px 10px;border:1px solid var(--line-2);border-radius:7px;background:var(--panel)}.stage-communication-list>div>span{display:flex;justify-content:space-between;gap:10px}.stage-communication-list>div>span b{font-size:12px}.stage-communication-list small{color:var(--text-3);font-size:10px}.stage-communication-list p{display:grid;grid-template-columns:72px minmax(0,1fr);gap:6px;margin:6px 0 0;color:var(--text-2);font-size:11.5px;line-height:1.55}.stage-communication-list p em{color:var(--text-3);font-size:10.5px;font-style:normal}.stage-communication-list p.concern{color:var(--danger)}
@media(max-width:600px){.stage-communication-head{align-items:flex-start;flex-direction:column}.stage-communication-head>div:last-child{width:100%}.stage-communication-head .btn{flex:1}.stage-communication-list>div>span{flex-direction:column;gap:2px}.stage-communication-list p{grid-template-columns:1fr}}
.report-loss-funnel{margin:14px 0;padding:13px 14px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2)}.report-loss-funnel h4{margin:0 0 10px;font-size:12px}.report-loss-funnel>div{display:flex;flex-direction:column;gap:8px}.report-loss-funnel-row{display:grid;grid-template-columns:85px minmax(100px,1fr) 48px 36px;gap:9px;align-items:center}.report-loss-funnel-row>span{color:var(--text-2);font-size:11.5px;font-weight:700}.report-loss-funnel-row>div{height:18px;overflow:hidden;border-radius:4px;background:#edf0ef}.report-loss-funnel-row i{display:block;height:100%;border-radius:4px;background:#e7a2a8}.report-loss-funnel-row b,.report-loss-funnel-row small{text-align:right;font-size:11px}.report-loss-funnel-row small{color:var(--text-3)}
@media(max-width:600px){.report-loss-funnel-row{grid-template-columns:72px minmax(70px,1fr) 42px}.report-loss-funnel-row small{display:none}}
.invoice-profile-title-label{display:block;margin:2px 0 6px;color:#687386;font-size:13px;font-weight:700}.invoice-profile-title{display:block;width:100%;box-sizing:border-box;margin:0 0 14px;padding:12px 14px;border:2px solid #d8dee8;border-radius:10px;background:#fff;color:#1f2937;font-size:21px;font-weight:700;line-height:1.3}.invoice-profile-title:focus{border-color:#536ee8;outline:none;box-shadow:0 0 0 3px rgba(83,110,232,.14)}
.store-card-head{align-items:center}.store-card-body{font-size:12.5px;line-height:1.6}.store-card-section{margin-top:12px;padding:12px;border:1px solid #e7ebf2;border-radius:10px;background:#fbfcff}.store-card-section:first-child{margin-top:0}.store-card-section h4{margin:0;font-size:13px;color:#25344d}.store-card-section-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.store-card-row{display:flex;gap:10px;align-items:flex-start;padding:5px 0}.store-card-row>span{color:#728097;min-width:78px}.store-card-row>b{flex:1;font-weight:600}.store-card-row .btn{margin-left:6px}.store-card-note,.store-card-summary{color:#728097;font-size:11.5px}.store-card-files{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:8px}.store-card-files>span{color:#728097;min-width:62px}.store-card-invoice{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:7px 0;border-top:1px dashed #e5eaf2}.store-card-invoice:first-of-type{border-top:0}.store-card-invoice span{color:#728097;font-size:11.5px}.store-card-empty{color:#9aa5b5;font-size:12px}.store-card-body .tag{margin-top:10px;display:inline-flex}
.store-card-compact{overflow:hidden}.store-card-complete{margin-left:8px;padding:4px 8px;border-radius:999px;background:#fff4df;color:#b97212;font-size:11px}.store-card-subtitle{color:#68758a;font-size:13px}.store-card-quick-actions{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin-top:14px;padding-top:12px;border-top:1px solid #edf0f5}.store-card-quick-actions>span{color:#52627a;font-weight:700;margin-right:2px}.store-card-stats{margin-top:11px;color:#8a96a8;font-size:12px}.store-detail-drawer section{padding:16px 0;border-bottom:1px solid #edf0f5}.store-detail-drawer section:last-child{border-bottom:0}.store-detail-drawer h3{display:flex;align-items:center;justify-content:space-between;margin:0 0 10px;color:#19324d}.store-detail-drawer p{display:flex;align-items:center;gap:18px;margin:8px 0;color:#344762}.store-detail-drawer p>b{min-width:90px;color:#8a96a8;font-weight:500}.store-detail-drawer p span{color:#8a96a8;font-size:12px}.store-detail-drawer p .btn{margin-left:auto}
.store-card-head{padding:16px 20px}.store-card-avatar{display:grid;place-items:center;width:40px;height:40px;border-radius:10px;background:#e8f7ef;color:#0e9f6e;font-size:23px;flex:none}.store-card-title{min-width:0}.store-card-title h3{margin:0}.store-card-meta{display:block;margin-top:4px;color:#75839a;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.store-card-head .store-card-complete{margin-left:0}.store-card-body>.store-card-subtitle{display:none}
.modal-mask:has(.modal-drawer){justify-content:flex-end;padding:0;background:rgba(10,37,64,.3)}.modal-drawer{height:100vh;max-height:none;margin:0;border-radius:16px 0 0 16px;max-width:660px;animation:storeDrawerIn .26s ease}.modal-drawer .modal-b{max-height:none;flex:1;overflow-y:auto}.modal-drawer .modal-f{border-radius:0}@keyframes storeDrawerIn{from{transform:translateX(24px);opacity:.5}to{transform:none;opacity:1}}
.store-card-interview{display:flex;gap:8px;align-items:flex-start;margin-top:12px;padding:9px 10px;border-radius:8px;background:#f8fafc;color:#75839a;font-size:12px}.store-card-interview b{color:#344762;font-weight:600}.store-card-interview span{white-space:nowrap}
.modal.wide:has(.store-form-section){max-width:1120px}.modal.wide:has(.store-form-section) .modal-b{background:#f5f7fc;padding:20px 26px}.modal.wide:has(.store-form-section) .store-form-section{border:2px solid #d9e7fb;border-radius:18px;background:#f8fbff;box-shadow:none;padding:28px 30px}.modal.wide:has(.store-form-section) .store-section-head{padding-bottom:18px;margin-bottom:22px}.modal.wide:has(.store-form-section) .store-section-head>span{width:56px;height:56px;border-radius:15px;background:#4b83c4;font-size:18px}.modal.wide:has(.store-form-section) .store-section-head b{font-size:25px;color:#253956}.modal.wide:has(.store-form-section) .store-section-head small{font-size:15px;margin-top:6px;color:#7183a0}.modal.wide:has(.store-form-section) .field{background:#fff;padding:0 0 8px;margin-bottom:18px}.modal.wide:has(.store-form-section) .field>label{font-size:16px;color:#5f6b7d}.modal.wide:has(.store-form-section) input,.modal.wide:has(.store-form-section) textarea,.modal.wide:has(.store-form-section) select{min-height:48px;font-size:17px;border-radius:11px}.modal.wide:has(.store-form-section) .modal-f{padding:16px 26px}
.store-detail-section{padding:22px 4px;border-bottom:1px solid #edf0f5}.store-detail-section h3{font-size:17px}.store-detail-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.store-detail-cert-card{display:flex;align-items:center;gap:12px;margin:10px 0;padding:18px;border:1px solid #e5ebf3;border-radius:14px;background:#fbfcfe}.store-detail-cert-card>b{min-width:130px;font-size:15px;color:#344762}.store-detail-status{color:#8a96a8;flex:1}.store-detail-section p{min-height:32px}.store-detail-section p>b{color:#8a96a8}.store-detail-section p .tag{margin-left:10px}
.store-detail-upload-status{border:0;border-radius:999px;padding:5px 10px;background:#fff4df;color:#b4620a;font-size:12px;cursor:pointer}.store-detail-upload-status:hover{background:#ffebc5}
.modal-drawer:has(.store-form-section){max-width:760px;width:min(760px,94vw)}
.modal-drawer:has(.store-form-section) .modal-b{padding:16px 18px;background:#f7f9fc}
.modal-drawer:has(.store-form-section) .store-form-section{padding:16px 18px;margin-bottom:12px;border-radius:14px}
.modal-drawer:has(.store-form-section) .store-section-head{margin-bottom:12px;padding-bottom:10px}
.modal-drawer:has(.store-form-section) .store-section-head>span{width:32px;height:32px;border-radius:9px;font-size:13px}
.modal-drawer:has(.store-form-section) .store-section-head b{font-size:17px}
.modal-drawer:has(.store-form-section) .store-section-head small{font-size:12px}
.modal-drawer:has(.store-form-section) .field{margin-bottom:10px}
.modal-drawer:has(.store-form-section) .modal-f{padding:12px 18px}
.store-editor-shell{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:16px;align-items:start}.store-editor-main{min-width:0}.store-editor-tabs{display:flex;gap:8px;padding:0 0 14px;border-bottom:1px solid #e8edf4;margin-bottom:14px;overflow:auto}.store-editor-tabs span{white-space:nowrap;padding:8px 12px;border-radius:9px;background:#f5f7fb;color:#7c899c;font-size:12px;font-weight:700}.store-editor-tabs span.active{background:#edf2ff;color:#536ee8}.store-editor-aside{position:sticky;top:0}.store-editor-aside section{padding:14px;margin-bottom:12px;border:1px solid #e3e9f2;border-radius:12px;background:#fff}.store-editor-aside h4{display:flex;justify-content:space-between;margin:0 0 10px;color:#33445d;font-size:14px}.store-editor-aside h4 b{color:#536ee8}.store-editor-aside .block{display:block;width:100%;margin:7px 0;text-align:left}.store-editor-aside small{display:block;margin-top:8px;color:#94a0b1;font-size:11px}.store-editor-aside p{margin:9px 0;color:#738198;font-size:12px}.store-progress{height:7px;border-radius:99px;background:#edf0f5;overflow:hidden}.store-progress i{display:block;height:100%;border-radius:99px;background:#536ee8}@media(max-width:820px){.store-editor-shell{display:block}.store-editor-aside{position:static}.store-editor-tabs{margin-top:0}}
.store-card-quick-actions .btn.disabled{opacity:.55;color:#8d98a8;background:#f6f7f9;cursor:not-allowed}
