/* ============================================================
   智慧南翔 · 网上办公（融合门户）  品牌视觉系统 v2
   主色：南翔紫 #6B2D8B   辅色：品牌黄 #FAA117（CMYK 2/37/91/0）
   设计原则：一个主色贯穿、黄色只做强调、8px 间距节奏、
             三层紫阶、统一 12px 圆角与柔和阴影
   ============================================================ */
:root{
  /* 品牌紫阶 */
  --p-900:#2E1042; --p-800:#3E1757; --p-700:#4A1D63; --p-600:#5B3A78;
  --p-500:#6B2D8B;              /* 南翔紫 · 主色 */
  --p-400:#8751A8; --p-300:#A277C0; --p-200:#C9AEDB;
  --p-100:#F1E8F7; --p-050:#F8F4FB;
  /* 品牌黄阶 */
  --y-700:#B66C00; --y-600:#E29108; --y-500:#FAA117;  /* 品牌黄 · 强调 */
  --y-300:#FFD37A; --y-100:#FFF3DC;
  /* 中性 */
  --ink:#2B2333; --ink2:#5C4E69; --ink3:#9B8AA8; --ink4:#B9AEC2;
  --line:#EEE7F3; --line2:#E4D9ED; --bg:#F6F3F9; --card:#fff;
  --red:#D9433A; --green:#2F8F68;
  /* 影与形 */
  --sh-1:0 2px 10px rgba(62,23,87,.05);
  --sh-2:0 6px 20px rgba(62,23,87,.09);
  --sh-3:0 18px 46px rgba(46,16,66,.16);
  --r-s:8px; --r-m:12px; --r-l:16px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
body{font-family:"Microsoft YaHei","PingFang SC","Hiragino Sans GB","Segoe UI",Arial,sans-serif;
  color:var(--ink);background:var(--bg);font-size:14px;line-height:1.6;
  -webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}
button,input,select,textarea{font-family:inherit;font-size:inherit;outline:none}
button{cursor:pointer;border:none;background:none;color:inherit}
a{color:var(--p-500);text-decoration:none}
.hidden{display:none !important}

/* ============ 登录页：左右分屏 ============ */
.login-view{position:fixed;inset:0;overflow:auto;background:var(--bg)}
.login-grid{display:grid;grid-template-columns:1.06fr .94fr;min-height:100%;min-height:100vh}
.login-brandpane{position:relative;overflow:hidden;color:#fff;
  background:linear-gradient(142deg,var(--p-900) 0%,var(--p-700) 42%,var(--p-500) 100%);
  padding:58px clamp(38px,5.5vw,92px) 30px;display:flex;flex-direction:column;justify-content:space-between}
.brand-mesh{position:absolute;inset:0;pointer-events:none;opacity:.5;
  background-image:
    radial-gradient(circle at 12% 16%,rgba(255,255,255,.10) 0,transparent 34%),
    radial-gradient(circle at 88% 78%,rgba(250,161,23,.16) 0,transparent 40%),
    repeating-linear-gradient(0deg,transparent 0 47px,rgba(255,255,255,.035) 47px 48px),
    repeating-linear-gradient(90deg,transparent 0 47px,rgba(255,255,255,.035) 47px 48px)}
.brand-orbit{position:absolute;right:-210px;bottom:-250px;width:640px;height:640px;border-radius:50%;
  border:1px solid rgba(250,161,23,.24);box-shadow:0 0 0 70px rgba(255,255,255,.035),
  0 0 0 150px rgba(255,255,255,.022),inset 0 0 0 1px rgba(255,255,255,.05);pointer-events:none}
.brand-orbit::after{content:"";position:absolute;left:12%;top:12%;width:76%;height:76%;border-radius:50%;
  border:1px dashed rgba(255,255,255,.14)}
.brand-content{position:relative;z-index:2;max-width:540px}
.login-logo{display:block;width:154px;height:auto;margin-bottom:54px}
.login-kicker{display:flex;align-items:center;gap:10px;font-size:12px;letter-spacing:2.6px;
  color:var(--y-300);font-weight:600;margin-bottom:18px}
.login-kicker i{width:28px;height:2px;background:var(--y-500);border-radius:2px}
.brand-content h1{margin:0;font-size:clamp(38px,3.6vw,52px);font-weight:600;letter-spacing:7px;line-height:1.25}
.brand-content h1 span{display:block;font-size:clamp(28px,2.5vw,36px);letter-spacing:12px;
  color:var(--y-500);font-weight:500;margin-top:12px}
.login-lead{margin:24px 0 40px;font-size:15.5px;color:rgba(255,255,255,.82);letter-spacing:.5px}
.login-points{list-style:none;padding:0;margin:0;max-width:470px}
.login-points li{display:flex;align-items:center;gap:16px;padding:14px 0;
  border-top:1px solid rgba(255,255,255,.13);font-size:13.5px;color:rgba(255,255,255,.86)}
.login-points li:last-child{border-bottom:1px solid rgba(255,255,255,.13)}
.login-points i{font-style:normal;font-size:12px;font-weight:700;letter-spacing:1px;
  color:var(--y-500);min-width:24px}
.brand-foot{position:relative;z-index:2;display:flex;justify-content:space-between;gap:16px;
  padding-top:18px;border-top:1px solid rgba(255,255,255,.16);
  font-size:11px;color:rgba(255,255,255,.55);letter-spacing:.4px}

/* ---- 吉祥物「小响」：品牌区下半部的欢迎角色 ---- */
.mascot-stage{position:relative;z-index:2;flex:1 1 auto;min-height:218px;margin-top:22px;isolation:isolate}
.mascot-glow{position:absolute;right:-7%;bottom:-20%;width:76%;height:98%;border-radius:50%;
  background:radial-gradient(ellipse at 54% 54%,rgba(250,161,23,.22) 0%,rgba(162,119,192,.16) 42%,transparent 72%);
  filter:blur(7px);pointer-events:none;animation:mascotBreath 7s ease-in-out infinite}
.mascot-shadow{position:absolute;right:2%;bottom:4px;width:56%;height:26px;border-radius:50%;
  background:radial-gradient(ellipse,rgba(30,8,46,.40),transparent 70%);filter:blur(6px);pointer-events:none}
.mascot-img{position:absolute;right:0;bottom:0;display:block;width:clamp(190px,25vw,300px);height:auto;
  cursor:pointer;user-select:none;-webkit-user-drag:none;
  filter:drop-shadow(0 14px 22px rgba(30,8,46,.34));
  animation:mascotFloat 6s ease-in-out infinite;transition:filter .2s}
.mascot-img:hover{filter:drop-shadow(0 17px 27px rgba(30,8,46,.46)) brightness(1.05)}
.mascot-bubble{position:absolute;left:0;top:13%;max-width:252px;padding:13px 17px;border-radius:14px;
  background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.24);
  backdrop-filter:blur(6px);box-shadow:0 10px 26px rgba(30,8,46,.14);
  color:#fff;cursor:pointer;transition:background .2s,transform .2s}
.mascot-bubble:hover{background:rgba(255,255,255,.16);transform:translateY(-2px)}
.mascot-bubble::after{content:"";position:absolute;right:-6px;bottom:22px;width:11px;height:11px;
  background:rgba(255,255,255,.10);border-top:1px solid rgba(255,255,255,.24);
  border-right:1px solid rgba(255,255,255,.24);transform:rotate(45deg)}
.mascot-bubble b{display:block;font-size:14px;font-weight:600;letter-spacing:.6px;color:var(--y-300)}
.mascot-bubble span{display:block;margin-top:5px;font-size:11.5px;line-height:1.75;color:rgba(255,255,255,.84)}
.mascot-bubble.pop{animation:bubblePop .4s ease}
.mascot-tag{position:absolute;left:0;bottom:26px;display:flex;align-items:center;gap:9px;
  padding:6px 13px;border-radius:20px;background:var(--y-500);color:var(--p-800);
  box-shadow:0 6px 16px rgba(250,161,23,.24)}
.mascot-tag b{font-size:12px;font-weight:700;letter-spacing:1px}
.mascot-tag i{font-style:normal;font-size:9px;letter-spacing:1.2px;opacity:.72}
@keyframes mascotFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}
@keyframes mascotBreath{0%,100%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}
@keyframes bubblePop{0%{transform:scale(.94);opacity:.45}100%{transform:scale(1);opacity:1}}
@media(prefers-reduced-motion:reduce){.mascot-img,.mascot-glow{animation:none}}

.login-formpane{display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:44px 34px;background:
    radial-gradient(circle at 82% 12%,rgba(107,45,139,.07) 0,transparent 38%),
    radial-gradient(circle at 12% 92%,rgba(250,161,23,.07) 0,transparent 34%),var(--bg)}
.login-card{position:relative;width:min(408px,100%);background:var(--card);border:1px solid var(--line);
  border-radius:var(--r-l);padding:38px 36px 30px;box-shadow:var(--sh-3);overflow:hidden}
.login-card-accent{position:absolute;top:0;left:0;right:0;height:4px;
  background:linear-gradient(90deg,var(--y-500) 0%,var(--y-300) 46%,var(--p-500) 100%)}
.login-card-head{padding-bottom:22px;margin-bottom:4px}
.login-card-head h2{margin:0;font-size:26px;font-weight:600;color:var(--p-700);letter-spacing:3px}
.login-card-head span{display:block;color:var(--ink3);font-size:12px;margin-top:8px;letter-spacing:.8px}
.login-card label{display:block;font-size:12.5px;font-weight:600;color:var(--ink2);margin:17px 0 8px}
.field{display:flex;align-items:center;gap:11px;height:48px;padding:0 14px;
  border:1px solid var(--line2);border-radius:var(--r-s);background:#FBF9FD;transition:.18s}
.field:focus-within{border-color:var(--p-500);background:#fff;
  box-shadow:0 0 0 3px rgba(107,45,139,.10)}
.field-ico{width:18px;height:18px;flex-shrink:0;color:var(--ink4);display:grid;place-items:center}
.field-ico svg{width:100%;height:100%}
.field:focus-within .field-ico{color:var(--p-500)}
.field input{flex:1;min-width:0;height:100%;border:none;background:transparent;color:var(--ink);font-size:14px}
.field input::placeholder{color:var(--ink4)}
.btn-primary{background:var(--y-500);color:var(--p-800);font-weight:700;border-radius:var(--r-s);
  padding:10px 18px;transition:.18s;box-shadow:0 8px 18px rgba(250,161,23,.26)}
.btn-primary:hover{background:var(--y-600);transform:translateY(-1px);box-shadow:0 10px 22px rgba(250,161,23,.32)}
.login-btn{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;height:48px;
  font-size:16px;margin-top:26px}
.login-btn span{letter-spacing:5px;padding-left:5px}
.login-btn em{font-style:normal;font-size:18px;letter-spacing:0;line-height:1;opacity:.85}
.login-demo{width:100%;margin-top:12px;border:1px solid var(--line2);background:#fff;
  color:var(--p-500);border-radius:var(--r-s);padding:11px;font-size:13px;transition:.18s}
.login-demo:hover{background:var(--p-050);border-color:var(--p-300)}
.login-err{color:var(--red);font-size:12px;min-height:18px;margin-top:10px}
.login-try{border-top:1px solid var(--line);margin-top:10px;padding-top:18px}
.login-try-t{font-size:11.5px;color:var(--ink3);margin-bottom:11px}
.login-chips{display:flex;flex-wrap:wrap;gap:8px}
.login-chips button{border:1px solid var(--line2);background:var(--p-050);color:var(--ink2);
  border-radius:16px;padding:5px 12px;font-size:12px;transition:.15s}
.login-chips button:hover{border-color:var(--p-400);color:var(--p-500);background:var(--p-100)}
.login-foot{margin-top:24px;font-size:11px;color:var(--ink3);line-height:2;text-align:center}
.login-foot a:hover{text-decoration:underline}

/* ============ 顶栏 ============ */
.p-top{height:64px;display:flex;align-items:center;padding:0 24px;color:#fff;position:sticky;top:0;z-index:30;
  background:linear-gradient(100deg,var(--p-800) 0%,var(--p-700) 48%,var(--p-500) 100%);
  border-bottom:1px solid rgba(255,255,255,.10);box-shadow:0 3px 14px rgba(46,16,66,.18)}
.p-logo{display:flex;align-items:center;gap:12px;cursor:pointer;min-width:238px}
.p-logo-img{height:33px;width:auto;display:block}
.p-logo-sep{width:1px;height:26px;background:rgba(255,255,255,.28)}
.p-logo-txt{display:flex;flex-direction:column;line-height:1.3}
.p-logo-txt b{font-size:16px;letter-spacing:2px;font-weight:600}
.p-logo-txt small{font-size:10px;opacity:.7;letter-spacing:.8px}
.p-nav{display:flex;align-items:stretch;height:64px;margin-left:12px;flex:1;overflow-x:auto;scrollbar-width:none}
.p-nav::-webkit-scrollbar{display:none}
.p-nav button{color:rgba(255,255,255,.78);padding:0 18px;font-size:13.5px;position:relative;white-space:nowrap;transition:.15s}
.p-nav button:hover{color:#fff;background:rgba(255,255,255,.07)}
.p-nav button.on{color:#fff;font-weight:600;background:rgba(255,255,255,.10)}
.p-nav button.on::after{content:"";position:absolute;left:16px;right:16px;bottom:0;height:3px;
  background:var(--y-500);border-radius:3px 3px 0 0}
.badge{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;
  background:var(--y-500);color:var(--p-800);font-size:11px;font-weight:700;font-style:normal;margin-left:3px}
.p-top-right{display:flex;align-items:center;gap:16px;flex-shrink:0}
.p-search{display:flex;height:32px;background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.10);
  border-radius:16px;overflow:hidden}
.p-search input{width:172px;background:transparent;border:none;color:#fff;padding:0 13px;font-size:12px}
.p-search input::placeholder{color:rgba(255,255,255,.6)}
.p-search button{width:34px;color:var(--y-300);font-size:20px;line-height:1}
.p-search button:hover{background:rgba(250,161,23,.18)}
.p-user{display:flex;align-items:center;gap:9px;cursor:pointer;position:relative;padding:5px 7px;border-radius:8px}
.p-user:hover{background:rgba(255,255,255,.10)}
.p-avatar{width:32px;height:32px;border-radius:50%;background:var(--y-500);color:var(--p-800);
  display:grid;place-items:center;font-weight:700;font-size:13px}
.p-user-txt{display:flex;flex-direction:column;line-height:1.35}
.p-user-txt b{font-size:12px;font-weight:600}
.p-user-txt small{font-size:10px;opacity:.7}
.p-caret{font-size:10px;opacity:.7}
.p-user-menu{position:absolute;right:0;top:48px;width:176px;background:#fff;color:var(--ink);
  border-radius:var(--r-s);box-shadow:var(--sh-3);border:1px solid var(--line);padding:6px;display:none;z-index:40}
.p-user.open .p-user-menu{display:block}
.p-user-menu-h{padding:9px 10px;font-size:12px;color:var(--ink3);border-bottom:1px solid var(--line);margin-bottom:4px}
.p-user-menu button{display:block;width:100%;text-align:left;padding:9px 10px;font-size:13px;border-radius:6px}
.p-user-menu button:hover{background:var(--p-050);color:var(--p-500)}

/* ============ 主体骨架 ============ */
.p-body{display:flex;min-height:calc(100vh - 92px)}
.p-rail{width:60px;background:var(--p-800);display:flex;flex-direction:column;align-items:center;
  padding:16px 0;gap:8px;flex-shrink:0}
.p-rail button{width:40px;height:40px;border-radius:10px;color:rgba(255,255,255,.62);
  display:grid;place-items:center;transition:.15s;position:relative}
.p-rail button svg{width:20px;height:20px}
.p-rail button:hover{background:rgba(255,255,255,.10);color:#fff}
.p-rail button.on{background:rgba(250,161,23,.15);color:var(--y-500)}
.p-rail button.on::before{content:"";position:absolute;left:-10px;top:9px;bottom:9px;width:3px;
  background:var(--y-500);border-radius:0 3px 3px 0}
.rail-sp{flex:1}
.rail-bottom a{width:40px;height:40px;border-radius:10px;display:grid;place-items:center;
  color:rgba(255,255,255,.62);font-size:20px}
.rail-bottom a:hover{background:rgba(255,255,255,.10);color:#fff}
.p-main{flex:1;position:relative;background:var(--bg);overflow:hidden}
.p-watermark{position:absolute;inset:0;pointer-events:none;opacity:.65;
  background-image:
    radial-gradient(circle at 92% 5%,rgba(107,45,139,.09) 0,transparent 30%),
    radial-gradient(circle at 3% 95%,rgba(250,161,23,.07) 0,transparent 32%)}
.p-page{position:relative;max-width:1240px;margin:0 auto;padding:26px 30px 40px}

/* 欢迎条：紫色 hero */
.welcome{position:relative;overflow:hidden;display:flex;align-items:center;justify-content:space-between;
  gap:22px;flex-wrap:wrap;margin-bottom:20px;padding:22px 26px;border-radius:var(--r-m);
  background:linear-gradient(105deg,var(--p-700) 0%,var(--p-500) 56%,var(--p-400) 100%);
  box-shadow:0 10px 26px rgba(74,29,99,.16)}
.welcome::after{content:"";position:absolute;right:-90px;top:-130px;width:330px;height:330px;border-radius:50%;
  border:1px solid rgba(255,255,255,.14);box-shadow:0 0 0 46px rgba(255,255,255,.045),
  0 0 0 98px rgba(255,255,255,.028);pointer-events:none}
.welcome-l{position:relative;z-index:1}
.welcome-l h2{margin:0 0 7px;font-size:21px;font-weight:600;color:#fff;letter-spacing:.5px}
.welcome-l p{margin:0;color:rgba(255,255,255,.75);font-size:12px}
.welcome-stats{display:flex;gap:10px;position:relative;z-index:1}
.wstat{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);border-radius:10px;
  padding:9px 15px;min-width:98px;text-align:center;backdrop-filter:blur(2px)}
.wstat b{display:block;font-size:22px;color:var(--y-300);line-height:1.25;font-weight:700}
.wstat span{font-size:11px;color:rgba(255,255,255,.8)}

/* 卡片体系 */
.home-grid{display:grid;grid-template-columns:320px 1fr;gap:20px;align-items:start}
.col{display:flex;flex-direction:column;gap:20px}
.card{background:var(--card);border-radius:var(--r-m);box-shadow:var(--sh-1);
  border:1px solid var(--line);overflow:hidden;transition:box-shadow .18s}
.card:hover{box-shadow:var(--sh-2)}
.card-head{display:flex;align-items:center;gap:10px;padding:15px 18px;border-bottom:1px solid var(--line)}
.card-head h3{margin:0;font-size:15px;font-weight:600;color:var(--p-700);display:flex;align-items:center;gap:9px}
.card-head h3::before{content:"";width:3px;height:15px;background:var(--y-500);border-radius:2px}
.card-head .more{font-size:12px;color:var(--ink3);cursor:pointer;margin-left:auto}
.card-head .more:hover{color:var(--p-500)}
.tabs,.mini-tabs{display:flex;gap:26px;border-bottom:1px solid var(--line);padding:0 18px}
.tabs button,.mini-tabs button{padding:14px 2px;font-size:14px;color:var(--ink2);position:relative;white-space:nowrap}
.mini-tabs button{font-size:13px;padding:13px 2px}
.tabs button.on,.mini-tabs button.on{color:var(--p-500);font-weight:600}
.tabs button.on::after,.mini-tabs button.on::after{content:"";position:absolute;left:0;right:0;bottom:-1px;
  height:2px;background:var(--y-500);border-radius:2px}
.tabs .more,.mini-tabs .more{font-size:12px;color:var(--ink3);margin-left:auto;align-self:center}
.card-body{padding:14px 18px}

/* 左列：品牌 banner + 日历 */
.photo-banner{height:112px;position:relative;overflow:hidden;color:#fff;padding:18px 20px;
  background:linear-gradient(120deg,var(--p-700),var(--p-500) 58%,var(--p-400))}
.photo-banner::after{content:"";position:absolute;right:-26px;bottom:-56px;width:170px;height:170px;
  border:2px solid rgba(250,161,23,.36);border-radius:50%;
  box-shadow:0 0 0 22px rgba(255,255,255,.06),0 0 0 48px rgba(255,255,255,.04)}
.photo-banner b{font-size:15px;letter-spacing:1px;position:relative;z-index:1}
.photo-banner span{display:block;font-size:11.5px;opacity:.85;margin-top:8px;position:relative;z-index:1}
.cal{padding:14px 18px 18px}
.cal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;
  font-size:13px;color:var(--p-700);font-weight:600}
.cal-head button{color:var(--ink3);padding:2px 9px;font-size:16px;border-radius:5px}
.cal-head button:hover{color:var(--p-500);background:var(--p-050)}
.cal table{width:100%;border-collapse:collapse;text-align:center;font-size:12px;color:var(--ink2)}
.cal th{color:var(--ink3);font-weight:400;padding:5px 0;font-size:11px}
.cal td{padding:5px 0;height:30px}
.cal td.today{background:var(--y-500);color:var(--p-800);border-radius:50%;font-weight:700}
.cal td.dim{color:#D8CEE0}
.notice-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;
  border-bottom:1px dashed var(--line);font-size:12px}
.notice-row:last-child{border-bottom:none}
.notice-row .t{color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:76%}
.notice-row .t:hover{color:var(--p-500);cursor:pointer}
.notice-row .d{color:var(--ink3);font-size:11px;white-space:nowrap;margin-left:8px}
.pill{display:inline-block;font-size:10px;padding:1px 7px;border-radius:9px;margin-right:7px;vertical-align:1px}
.pill-red{background:#FDECEA;color:#C33A31}
.pill-blue{background:var(--p-100);color:var(--p-500)}
.pill-gray{background:#F1EDF4;color:#7D718A}
.pill-green{background:var(--y-100);color:var(--y-700)}
.quick-btn{display:block;margin:16px auto 4px;background:var(--y-500);color:var(--p-800);
  font-weight:600;border-radius:20px;padding:10px 30px;font-size:13px;
  box-shadow:0 5px 14px rgba(250,161,23,.26);transition:.18s}
.quick-btn:hover{background:var(--y-600);color:#fff}
.remind-item{display:flex;justify-content:space-between;align-items:center;padding:9px 0;
  border-bottom:1px dashed var(--line);font-size:12px}
.remind-item:last-child{border:none}
.remind-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:74%}
.link-btn{font-size:11px;border:1px solid var(--line2);color:var(--p-500);border-radius:12px;
  padding:3px 10px;background:var(--p-050);white-space:nowrap}
.link-btn:hover{background:var(--p-100);border-color:var(--p-300)}

/* 待办 */
.todo-list{padding:6px 18px 14px;min-height:136px}
.todo-item{display:flex;align-items:center;gap:11px;padding:12px 2px;border-bottom:1px dashed var(--line)}
.todo-item:last-child{border:none}
.todo-dot{width:8px;height:8px;border-radius:50%;background:var(--y-500);flex-shrink:0}
.todo-dot.urgent{background:var(--red)}
.todo-main{flex:1;min-width:0}
.todo-main b{display:block;font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.todo-main small{color:var(--ink3);font-size:11px}
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--ink3);
  gap:8px;min-height:128px;font-size:12px}
.empty svg{width:38px;height:38px;opacity:.35}

/* 应用宫格 */
.app-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:14px 8px;padding:18px}
.app-cell{display:flex;flex-direction:column;align-items:center;gap:9px;position:relative;cursor:pointer;
  padding:6px 2px;border-radius:10px;transition:.16s}
.app-cell:hover{background:var(--p-050);transform:translateY(-2px)}
.app-ico{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;color:#fff;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.22),0 4px 11px rgba(62,23,87,.16)}
.app-ico svg{width:21px;height:21px;filter:drop-shadow(0 1px 1px rgba(35,10,52,.28))}
.app-cell span:last-child{font-size:11px;color:var(--ink2);text-align:center;line-height:1.3;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.app-cell.off .app-ico{filter:grayscale(.5);opacity:.78}
.app-star{position:absolute;top:0;right:7px;font-size:12px;color:var(--y-500);opacity:0}
.app-cell:hover .app-star{opacity:.6}
.app-cell .app-star.on{opacity:1}
.add-cell .app-ico{background:var(--p-050);border:1px dashed var(--p-300);color:var(--p-500);
  box-shadow:none;font-size:23px}

/* ============ 通用页面 ============ */
.page-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;gap:12px;flex-wrap:wrap}
.page-title h2{margin:0;font-size:21px;color:var(--p-700);font-weight:600}
.page-title p{margin:6px 0 0;color:var(--ink2);font-size:12px}
.group-block{margin-bottom:22px}
.group-title{display:flex;align-items:center;gap:9px;margin:0 0 12px;font-size:15px;color:var(--p-700);font-weight:600}
.group-title::before{content:"";width:3px;height:16px;background:var(--y-500);border-radius:2px}
.group-title small{font-weight:400;color:var(--ink3);font-size:11px}
.app-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}
.app-card{background:#fff;border-radius:var(--r-m);border:1px solid var(--line);
  box-shadow:var(--sh-1);padding:16px;display:flex;flex-direction:column;gap:10px;transition:.18s}
.app-card:hover{box-shadow:var(--sh-2);transform:translateY(-2px)}
.app-card-top{display:flex;gap:12px;align-items:flex-start}
.app-card .app-ico{width:40px;height:40px;flex-shrink:0}
.app-card h4{margin:0 0 4px;font-size:14px;font-weight:600}
.app-card .meta{font-size:11px;color:var(--ink3)}
.app-card p{margin:0;font-size:11.5px;color:var(--ink2);line-height:1.7;min-height:38px}
.app-card-ops{display:flex;gap:8px;align-items:center;border-top:1px solid var(--line);padding-top:11px}
.mini-btn{border:1px solid var(--line2);background:var(--p-050);color:var(--p-500);
  border-radius:6px;padding:5px 12px;font-size:12px;transition:.15s}
.mini-btn:hover{background:var(--p-100);border-color:var(--p-300)}
.mini-btn.solid{background:var(--p-500);color:#fff;border-color:var(--p-500)}
.mini-btn.solid:hover{background:var(--p-700)}
.mini-btn.gray{color:var(--ink2);border-color:var(--line);background:#FAF8FC}
.st{margin-left:auto;font-size:11px;padding:2px 8px;border-radius:10px;white-space:nowrap}

/* 列表 / 表单 / 表格 */
.list{background:#fff;border-radius:var(--r-m);border:1px solid var(--line);box-shadow:var(--sh-1);overflow:hidden}
.list-row{display:flex;align-items:center;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line)}
.list-row:last-child{border-bottom:none}
.list-row:hover{background:var(--p-050)}
.list-row .lt{flex:1;min-width:0}
.list-row .lt b{font-size:13.5px;font-weight:500;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.list-row .lt small{color:var(--ink3);font-size:11px}
.list-row .ld{color:var(--ink3);font-size:12px;white-space:nowrap}
.form-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
.form-row input,.form-row select,.form-row textarea{border:1px solid var(--line2);border-radius:var(--r-s);
  padding:9px 11px;background:#FBF9FD;color:var(--ink)}
.form-row input:focus,.form-row select:focus{border-color:var(--p-500);box-shadow:0 0 0 3px rgba(107,45,139,.09)}
.form-row input{flex:1;min-width:180px}
.form-row select{min-width:130px}
.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}
.info-item{background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px 16px;box-shadow:var(--sh-1)}
.info-item small{color:var(--ink3);font-size:11px;display:block;margin-bottom:6px}
.info-item b{font-size:14px;font-weight:600;color:var(--p-700)}
.help-block{background:#fff;border:1px solid var(--line);border-radius:10px;padding:18px 20px;
  margin-bottom:14px;line-height:1.9;font-size:13px;color:var(--ink2);box-shadow:var(--sh-1)}
.help-block h3{margin:0 0 10px;color:var(--p-700);font-size:15px}
.help-block b{color:var(--ink)}
.help-block ol{padding-left:20px;margin:8px 0}
.tbl{width:100%;border-collapse:collapse;background:#fff;font-size:12.5px}
.tbl th,.tbl td{border:1px solid var(--line);padding:9px 11px;text-align:left}
.tbl th{background:var(--p-050);color:var(--p-700);font-weight:600}

/* 弹窗 / 提示 / 页脚 */
.modal{position:fixed;inset:0;background:rgba(46,16,66,.48);z-index:60;display:grid;place-items:center;padding:20px}
.modal-box{background:#fff;border-radius:14px;width:min(560px,96vw);max-height:86vh;overflow:auto;box-shadow:var(--sh-3)}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;
  border-bottom:1px solid var(--line);font-size:15px;font-weight:600;color:var(--p-700)}
.modal-x{font-size:24px;color:var(--ink3);line-height:1}
.modal-body{padding:20px}
.modal-body label{display:block;font-size:12px;color:var(--ink2);margin:12px 0 6px}
.modal-body input,.modal-body select,.modal-body textarea{width:100%;border:1px solid var(--line2);
  border-radius:var(--r-s);padding:9px 11px;background:#FBF9FD}
.modal-body .modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}
.toast{position:fixed;left:50%;bottom:36px;transform:translateX(-50%);background:var(--p-800);color:#fff;
  padding:11px 22px;border-radius:22px;font-size:13px;z-index:80;box-shadow:var(--sh-3)}
.p-foot{height:28px;display:grid;place-items:center;font-size:11px;color:var(--ink3);
  background:#FBF9FD;border-top:1px solid var(--line)}

/* ============ 响应式 ============ */
@media(max-width:1200px){
  .p-nav button{padding:0 13px}
  .p-search input{width:130px}
  .p-logo{min-width:216px}
}
@media(max-width:980px){
  .login-grid{grid-template-columns:1fr}
  .login-brandpane{padding:38px 34px 26px;min-height:400px}
  .login-logo{width:126px;margin-bottom:30px}
  .login-lead{margin:18px 0 24px}
  .brand-foot{margin-top:28px}
  .mascot-stage{min-height:190px;margin-top:12px}
  .mascot-img{width:min(230px,42vw)}
  .mascot-bubble{top:8%;padding:10px 14px}
  .home-grid{grid-template-columns:1fr}
  .app-grid{grid-template-columns:repeat(6,1fr)}
}
@media(max-width:760px){
  .p-logo{min-width:0}
  .p-logo-txt,.p-logo-sep{display:none}
  .p-nav{display:none}
  .p-top{justify-content:space-between}
  .p-rail{width:48px}
  .p-rail button,.rail-bottom a{width:36px;height:36px}
  .p-rail button.on::before{left:-6px}
  .p-page{padding:18px 16px 30px}
  .welcome{padding:18px}
  .welcome-stats{width:100%;flex-wrap:wrap}
  .wstat{flex:1;min-width:80px}
  .app-grid{grid-template-columns:repeat(5,1fr)}
}
@media(max-width:520px){
  .login-brandpane{padding:30px 24px 22px}
  .brand-content h1{font-size:34px;letter-spacing:4px}
  .brand-content h1 span{font-size:24px;letter-spacing:7px}
  .brand-foot{flex-direction:column;gap:5px}
  .mascot-stage{min-height:162px}
  .mascot-img{width:172px;right:2%}
  .mascot-bubble{max-width:186px;top:0;padding:9px 12px}
  .mascot-bubble b{font-size:12.5px}
  .mascot-bubble span{font-size:10.5px}
  .mascot-tag{bottom:14px;padding:5px 10px}
  .mascot-tag i{display:none}
  .login-formpane{padding:30px 18px}
  .login-card{padding:30px 22px 24px}
  .p-search{display:none}
  .app-grid{grid-template-columns:repeat(4,1fr)}
}
/* 笔记本矮屏：压缩品牌区纵向节奏，保证一屏看全 */
@media(max-height:820px) and (min-width:981px){
  .login-brandpane{padding-top:38px;padding-bottom:22px}
  .login-logo{width:132px;margin-bottom:28px}
  .brand-content h1{font-size:40px}
  .brand-content h1 span{font-size:28px;margin-top:8px}
  .login-lead{margin:16px 0 24px}
  .login-points li{padding:10px 0}
  .mascot-stage{min-height:146px;margin-top:8px}
  .mascot-img{width:min(218px,22vw)}
  .mascot-bubble{top:2%;padding:10px 14px}
  .login-card{padding:30px 34px 26px}
  .login-card-head{padding-bottom:16px}
  .login-card label{margin:13px 0 7px}
}

/* ============ 小响办事助手（登录后右下角） ============ */
.nx-fab{position:fixed;right:26px;bottom:28px;z-index:52;width:64px;height:64px;padding:6px;
  border:0;border-radius:50%;background:#6B2D8B;cursor:pointer;display:grid;place-items:center;
  box-shadow:0 10px 26px rgba(62,23,87,.3);transition:transform .18s ease}
.nx-fab:hover{transform:translateY(-3px)}
.nx-fab::after{content:"";position:absolute;inset:-5px;border:2px solid rgba(250,161,23,.6);border-radius:50%;pointer-events:none}
.nx-fab img{width:100%;height:100%;object-fit:contain}
.nx-fab-tip{position:absolute;right:76px;top:50%;transform:translateY(-50%);white-space:nowrap;
  background:#fff;color:#6B2D8B;border:1px solid #E7DCEF;border-radius:18px;padding:6px 12px;
  font-size:12px;box-shadow:0 4px 14px rgba(62,23,87,.12);opacity:0;pointer-events:none;transition:opacity .18s}
.nx-fab:hover .nx-fab-tip{opacity:1}
.nx-chat{position:fixed;right:26px;bottom:106px;z-index:55;width:372px;height:524px;
  max-height:calc(100vh - 150px);background:#fff;border:1px solid #E7DCEF;border-radius:16px;
  box-shadow:0 18px 52px rgba(46,16,66,.24);display:flex;flex-direction:column;overflow:hidden}
.nx-chat-h{flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:12px 14px;background:#6B2D8B;color:#fff}
.nx-chat-av{width:38px;height:38px;flex:0 0 auto;border-radius:50%;background:#F6F1F9;overflow:hidden;display:grid;place-items:center}
.nx-chat-av img{width:100%;height:100%;object-fit:contain}
.nx-chat-who{flex:1;min-width:0}
.nx-chat-who b{display:block;font-size:14px;letter-spacing:2px}
.nx-chat-who small{display:block;font-size:11px;color:rgba(255,255,255,.76);margin-top:2px}
.nx-chat-x{border:0;background:transparent;color:#fff;font-size:24px;line-height:1;cursor:pointer;padding:2px 6px}
.nx-chat-log{flex:1;min-height:0;overflow-y:auto;padding:16px 14px;background:#FAF8FC;display:flex;flex-direction:column;gap:12px}
.nx-msg{display:flex;gap:8px;align-items:flex-start}
.nx-msg.me{justify-content:flex-end}
.nx-msg-av{width:26px;height:26px;flex:0 0 auto;border-radius:50%;background:#fff;border:1px solid #E7DCEF;overflow:hidden}
.nx-msg-av img{width:100%;height:100%;object-fit:contain}
.nx-bubble{max-width:79%;padding:10px 13px;border-radius:12px;font-size:13px;line-height:1.72;
  color:#2B2333;background:#fff;border:1px solid #E7DCEF;border-top-left-radius:3px;word-break:break-word}
.nx-msg.me .nx-bubble{background:#6B2D8B;color:#fff;border-color:#6B2D8B;border-top-left-radius:12px;border-top-right-radius:3px}
.nx-links{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
.nx-link{border:1px solid #F4D9A4;background:#FFF3DC;color:#8A5A00;border-radius:7px;
  padding:5px 10px;font-size:12px;cursor:pointer;font-family:inherit}
.nx-link:hover{background:#FAA117;color:#fff;border-color:#FAA117}
.nx-chat-quick{flex:0 0 auto;display:flex;flex-wrap:wrap;gap:6px;padding:10px 14px 4px;background:#fff;border-top:1px solid #F0E9F5}
.nx-quick{border:1px solid #E7DCEF;background:#F6F1F9;color:#6B2D8B;border-radius:14px;
  padding:5px 11px;font-size:12px;cursor:pointer;font-family:inherit}
.nx-quick:hover{background:#6B2D8B;color:#fff;border-color:#6B2D8B}
.nx-chat-in{flex:0 0 auto;display:flex;gap:8px;padding:8px 14px 10px;background:#fff}
.nx-chat-in input{flex:1;min-width:0;border:1px solid #E7DCEF;border-radius:9px;padding:10px 12px;
  font-size:13px;font-family:inherit;outline:none;color:#2B2333}
.nx-chat-in input:focus{border-color:#6B2D8B;box-shadow:0 0 0 3px rgba(107,45,139,.09)}
.nx-chat-in button{flex:0 0 42px;border:0;border-radius:9px;background:#FAA117;color:#fff;font-size:16px;cursor:pointer}
.nx-chat-in button:hover{background:#E29108}
.nx-chat-foot{flex:0 0 auto;text-align:center;font-size:10.5px;color:#8A7C96;padding:0 14px 9px;background:#fff}
@media(max-width:520px){
  .nx-fab{right:14px;bottom:16px;width:56px;height:56px}
  .nx-fab-tip{display:none}
  .nx-chat{right:10px;left:10px;bottom:82px;width:auto;height:auto;max-height:calc(100vh - 104px)}
}
