/* ERP6 · T+ 2026 对齐主题（令牌来自 tokens.json） */
:root{
  --tp-main:#3788ff; --tp-main-dark:#1f5fd0; --tp-text:#333; --tp-text2:#5b657a; --tp-line:#ccc; --tp-line2:#e6e8ee;
  --tp-head-bg:#e8e8e8; --tp-total-bg:#f5f5f5; --tp-hover:#eef4ff; --tp-disabled:#a0a0a0;
  --tp-row-h:30px; --tp-toolbar-h:30px; --tp-font:"Microsoft YaHei","PingFang SC","Segoe UI",Arial,sans-serif;
  --tp-rail:170px; --tp-top:48px;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font:12px/1.5 var(--tp-font);color:var(--tp-text);background:#fff}
a{color:var(--tp-main);text-decoration:none}
button{font-family:inherit}

/* ================= 登录页 ================= */
.login-page{min-height:100vh;position:relative;overflow:hidden;background:
  radial-gradient(1200px 600px at 12% 18%, rgba(90,160,255,.55), transparent 60%),
  radial-gradient(900px 500px at 85% 90%, rgba(31,95,208,.55), transparent 60%),
  linear-gradient(135deg,#071a3a 0%,#0e2b5e 38%,#1f4f9e 70%,#2f6fd0 100%);}
.login-page:before{content:"";position:absolute;inset:0;background:
  linear-gradient(180deg, rgba(255,255,255,.06), transparent 30%),
  repeating-linear-gradient(115deg, rgba(255,255,255,.035) 0 2px, transparent 2px 120px);pointer-events:none}
.login-logo{position:absolute;left:36px;top:26px;display:flex;align-items:center;gap:10px;color:#fff;z-index:2}
.login-logo .mark{width:30px;height:30px;border-radius:7px;background:#fff;color:#1f5fd0;font-weight:800;display:flex;align-items:center;justify-content:center;font-size:15px}
.login-logo b{font-size:20px;letter-spacing:.5px}.login-logo i{font-style:normal;font-size:11px;opacity:.75;margin-left:6px}
.login-hero{position:absolute;left:64px;top:34%;max-width:640px;color:#fff;z-index:2}
.login-hero h1{margin:0;font-size:44px;line-height:1.25;letter-spacing:1px;font-weight:600}
.login-hero p{margin:18px 0 0;font-size:20px;letter-spacing:6px;opacity:.92}
.login-hero .tags{position:absolute;left:0;bottom:-190px;display:flex;gap:26px;font-size:13px;opacity:.8;white-space:nowrap}
.login-card{position:absolute;right:7%;top:50%;transform:translateY(-50%);width:380px;background:#fff;border-radius:6px;box-shadow:0 20px 60px rgba(3,18,48,.4);padding:0 0 18px;z-index:2}
.login-card .brand{padding:18px 24px 6px;display:flex;align-items:center;justify-content:space-between}
.login-card .brand .l{display:flex;align-items:center;gap:8px;color:#1f5fd0;font-weight:700;font-size:16px}
.login-card .brand .l span.dot{width:16px;height:16px;border-radius:50%;background:#e8453c;display:inline-block}
.login-card .brand .v{font-size:11px;color:#9aa3b5}
.login-tabs{display:flex;gap:26px;padding:6px 24px 0;border-bottom:1px solid #eef1f6}
.login-tabs .t{padding:8px 0 9px;font-size:14px;color:#333;cursor:pointer;position:relative;white-space:nowrap}
.login-tabs .t.active{color:#1f5fd0;font-weight:600}
.login-tabs .t.active:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:#1f5fd0;border-radius:2px}
.login-tabs .scan{margin-left:auto;color:#3788ff;font-size:12px;display:flex;align-items:center;gap:4px}
.login-form{padding:16px 24px 0}
.lf-row{display:flex;align-items:center;gap:10px;height:44px;border-bottom:1px solid #e3e8f0;margin-top:4px}
.lf-row .ic{width:18px;height:18px;color:#9aa3b5;flex:0 0 auto}
.lf-row input,.lf-row select{border:0;outline:none;flex:1;height:40px;font-size:14px;color:#333;background:transparent;font-family:inherit}
.lf-row select{appearance:none;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%239aa3b5'/%3E%3C/svg%3E") right center no-repeat;padding-right:16px}
.lf-btn{width:100%;height:44px;margin-top:22px;border:0;border-radius:4px;background:#1f5fd0;color:#fff;font-size:15px;letter-spacing:4px;cursor:pointer}
.lf-btn:hover{background:#1a52b8}
.lf-links{display:flex;justify-content:center;gap:10px;margin-top:14px;font-size:12px;color:#5b657a}
.lf-links a{color:#1f5fd0}
.login-extra{display:flex;justify-content:space-around;margin:22px 24px 0;text-align:center;font-size:12px;color:#78829a}
.login-extra .q{display:flex;flex-direction:column;align-items:center;gap:6px}
.login-extra .q .box{width:38px;height:38px;border:1px solid #dfe5ef;border-radius:4px;display:flex;align-items:center;justify-content:center;color:#5b657a}
.login-ver{margin-top:16px;padding-top:12px;border-top:1px solid #eef1f6;text-align:center;font-size:11px;color:#9aa3b5}
.login-err{color:#e34d59;font-size:12px;height:18px;margin-top:8px;text-align:center}

/* ================= 门户外壳 ================= */
.portal{height:100vh;display:flex;flex-direction:column;background:#f0f2f5}
.topbar{height:var(--tp-top);background:#2b3a67;color:#fff;display:flex;align-items:stretch;flex:0 0 auto;position:relative;z-index:20}
.logo-block{width:var(--tp-rail);background:#1f2c52;display:flex;flex-direction:column;justify-content:center;padding-left:18px}
.logo-block b{font-size:17px;letter-spacing:1px}.logo-block i{font-style:normal;font-size:10px;opacity:.7;letter-spacing:2px}
.topbar .acct{display:flex;align-items:center;gap:8px;padding:0 16px;font-size:13px;border-right:1px solid rgba(255,255,255,.12);cursor:pointer}
.topbar .acct .chev{font-size:10px;opacity:.7}
.topbar .date{display:flex;align-items:center;padding:0 16px;font-size:12px;opacity:.9}
.topbar .search{margin-left:auto;align-self:center;width:300px;height:30px;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);border-radius:4px;display:flex;align-items:center;padding:0 10px;gap:8px;color:#cfd8ea;font-size:12px}
.topbar .search input{flex:1;background:transparent;border:0;outline:none;color:#fff;font-size:12px}
.topbar .search input::placeholder{color:#aab6cf}
.topbar .icons{display:flex;align-items:center;gap:2px;padding:0 8px}
.topbar .icons .ib{width:34px;height:34px;display:flex;align-items:center;justify-content:center;color:#dfe7f5;border-radius:4px;cursor:pointer;position:relative}
.topbar .icons .ib:hover{background:rgba(255,255,255,.12)}
.topbar .icons .badge{position:absolute;top:4px;right:4px;min-width:14px;height:14px;border-radius:7px;background:#e8453c;color:#fff;font-size:9px;line-height:14px;text-align:center;padding:0 3px}
.topbar .avatar{display:flex;align-items:center;gap:8px;padding:0 16px;font-size:12px;border-left:1px solid rgba(255,255,255,.12)}
.topbar .avatar .face{width:26px;height:26px;border-radius:50%;background:#ffb22e;color:#5a3a00;display:flex;align-items:center;justify-content:center;font-weight:700}
.topbar .avatar a{color:#fff;opacity:.85}
.portal-body{flex:1;display:flex;min-height:0}
.rail.collapsed{width:56px}
.rail.collapsed .mi span:not(.ic){display:none}
.rail.collapsed .mi .ar{display:none}
.rail{width:var(--tp-rail);background:linear-gradient(180deg,#2b3a67,#1f2c52 60%,#1a2547);color:#c9d4ea;display:flex;flex-direction:column;flex:0 0 auto;overflow:auto;position:relative;z-index:10}
.rail .mi{height:56px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:12px;cursor:pointer;border-left:3px solid transparent;white-space:nowrap}
.rail .mi:hover{background:rgba(255,255,255,.07);color:#fff}
.rail .mi.active{background:rgba(55,136,255,.22);border-left-color:#5aa0ff;color:#fff}
.rail .mi .ic{width:18px;height:18px}
.rail .mi .ar{font-size:9px;opacity:.6;position:absolute;right:8px}
.rail .mi{position:relative}
.submenu{width:0;overflow:hidden;transition:width .15s ease;background:#fff;border-right:1px solid #e3e8f0}
.submenu.open{width:200px;overflow:auto}
.submenu .sm-h{height:34px;line-height:34px;padding:0 14px;font-size:12px;color:#78829a;border-bottom:1px solid #eef1f6;display:flex;justify-content:space-between}
.submenu .sm-i{padding:7px 14px;font-size:12px;color:#333;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:6px}
.submenu .sm-i:hover{background:#eef4ff;color:#1f5fd0}
.submenu .sm-i .ar{color:#aab4c8;font-size:10px}
.workspace{flex:1;overflow:auto;padding:10px 12px;min-width:0;background:#f0f2f5}
.ws-tabs{display:flex;gap:2px;border-bottom:1px solid #e3e8f0;margin:-10px -12px 10px;padding:6px 12px 0;background:#fff}
.ws-tabs .t{height:30px;line-height:28px;padding:0 16px;border:1px solid transparent;border-bottom:0;border-radius:4px 4px 0 0;font-size:13px;color:#5b657a;cursor:pointer}
.ws-tabs .t.active{background:#fff;border-color:#e3e8f0;color:#1f5fd0;font-weight:600;position:relative;top:1px}
.ws-card{background:#fff;border:1px solid #e3e8f0;border-radius:4px;margin-bottom:10px}
.ws-card .h{height:44px;display:flex;align-items:center;padding:0 16px;border-bottom:1px solid #eef1f6;font-size:14px;font-weight:600;color:#333}
.ws-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;padding:16px}
.ws-tile{height:64px;border:1px solid #e3e8f0;border-radius:4px;display:flex;align-items:center;gap:10px;padding:0 12px;cursor:pointer;font-size:13px;color:#333}
.ws-tile:hover{border-color:#3788ff;color:#1f5fd0;box-shadow:0 4px 14px rgba(55,136,255,.12)}
.ws-tile .ic{width:20px;height:20px;color:#3788ff}
.ws-main{display:flex;gap:10px;align-items:flex-start}
.ws-left{flex:1;min-width:0}
.ws-right{width:360px;flex:0 0 auto}
.todo-row{display:flex;justify-content:space-between;padding:10px 16px;border-bottom:1px solid #f2f4f8;font-size:13px;color:#333}
.todo-row .n{color:#1f5fd0;font-weight:600}
.banner{background:linear-gradient(90deg,#fff7e6,#fffdf7);border:1px solid #ffe4b3;color:#8a5a00;font-size:12px;padding:8px 12px;border-radius:4px;margin-bottom:10px}
.notice{background:linear-gradient(135deg,#6f5bd0,#3f7fd8);color:#fff;border-radius:4px;padding:18px;font-size:16px;font-weight:600}

/* 页签 + iframe 业务页 */
.tabbar{height:34px;background:#f7f9fc;border-bottom:1px solid #e3e8f0;display:flex;align-items:flex-end;gap:2px;padding:0 8px;flex:0 0 auto;overflow:auto}
.tabbar .tab{height:28px;line-height:28px;padding:0 12px;border:1px solid #e3e8f0;border-bottom:0;border-radius:4px 4px 0 0;background:#eef2f9;color:#5b657a;font-size:12px;cursor:pointer;display:flex;align-items:center;gap:6px;white-space:nowrap}
.tabbar .tab.active{background:#fff;color:#1f5fd0;font-weight:600}
.tabbar .tab .x{color:#aab4c8;font-size:11px}
.tabbar .tab .x:hover{color:#e34d59}
.frame-wrap{flex:1;min-height:0;position:relative;background:#fff}
.frame-wrap iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.hidden{display:none!important}
