*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --blue-900:#0c2340;--blue-800:#0f2d52;--blue-700:#163d6f;--blue-600:#1a4f8b;
  --blue-500:#2563a8;--blue-400:#3b82c4;--blue-300:#6ba3db;--blue-200:#a3c8ed;
  --blue-100:#d4e4f7;--blue-50:#eef4fb;
  --gold:#c8962e;--gold-light:#e8b84a;
  --green:#16a34a;--red:#dc2626;--orange:#ea580c;--gray:#6b7280;
  --bg:#f0f4f8;--card:#fff;--text:#1e293b;--text-light:#64748b;
  --radius:10px;--shadow:0 2px 12px rgba(12,35,64,.08);
  --shadow-lg:0 8px 30px rgba(12,35,64,.12);
}
html{font-size:14px;touch-action:manipulation}
a,button,input,select,textarea,label{touch-action:manipulation}
body{font-family:'Noto Sans SC',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;display:flex;flex-direction:column}
#app{flex:1 1 auto;display:flex;flex-direction:column}
/* ---------- 顶部栏 ---------- */
/* iOS 风格：半透明毛玻璃 + 发丝线，滚动后浮起阴影 */
.site-header{display:flex;align-items:center;gap:.875rem;padding:.625rem 1.5rem;
  background:rgba(255,255,255,.75);
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px);
  position:sticky;top:0;z-index:300;
  box-shadow:0 1px 2px rgba(15,30,57,.04);
  transition:box-shadow .22s ease,background .22s ease}
.site-header::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:rgba(60,60,67,.26);transform:scaleY(.5);transform-origin:bottom;pointer-events:none}
.site-header.is-scrolled{box-shadow:0 6px 20px rgba(12,35,64,.10)}
.site-header .logo-img{height:42px;width:auto;display:block}
.hd-brand{display:flex;align-items:center;text-decoration:none;flex-shrink:0}
/* 企业标语：紧贴品牌，用竖分隔线隔开，不再和右侧按钮挤成一堆 */
.hd-slogan{position:relative;margin-left:.375rem;padding-left:1.25rem;
  font-size:.8125rem;color:var(--gray);font-weight:500;letter-spacing:.5px;white-space:nowrap}
.hd-slogan::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:1px;height:18px;background:#dbe3ee}
/* 右侧操作区：文字链接(次要) + 描边按钮(次次要) + 实心主 CTA */
.hd-actions{display:flex;align-items:center;gap:.5rem;margin-left:auto;flex-shrink:0}
.hd-link,.hd-btn,.hd-cta{display:inline-flex;align-items:center;height:36px;border-radius:8px;
  font-size:.875rem;font-weight:600;font-family:inherit;white-space:nowrap;transition:all .16s}
.hd-link{padding:0 .75rem;color:var(--blue-700);text-decoration:none}
.hd-link:hover{background:var(--blue-50);color:var(--blue-900)}
.hd-btn{padding:0 1rem;background:#fff;border:1.5px solid var(--blue-200);color:var(--blue-700);cursor:pointer}
.hd-btn:hover{background:var(--blue-50);border-color:var(--blue-400);color:var(--blue-800)}
/* 工具箱是引流位：保留橙色识别度，但改成实色、去掉无限呼吸动画，改为 hover 微抬升 */
.hd-cta{gap:.375rem;padding:0 1rem;background:#ea580c;color:#fff;text-decoration:none;
  box-shadow:0 2px 8px rgba(234,88,12,.24)}
.hd-cta svg{width:16px;height:16px;fill:currentColor;flex-shrink:0}
.hd-cta:hover{background:#c2410c;transform:translateY(-1px);box-shadow:0 6px 16px rgba(234,88,12,.34)}
.hd-cta:active{transform:translateY(0)}
.site-header .hb-toggle{display:none;align-items:center;justify-content:center;width:48px;height:48px;border-radius:8px;background:transparent;border:0;color:var(--blue-800);cursor:pointer;flex-shrink:0;margin-right:-.25rem}
.site-header .hb-toggle:active{background:var(--blue-50)}
.sb-backdrop{display:none}
.sb-fab{display:none;position:fixed;bottom:16px;left:16px;z-index:200;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,var(--blue-700),var(--blue-600));color:#fff;border:0;box-shadow:0 4px 16px rgba(12,35,64,.35);align-items:center;justify-content:center;cursor:pointer;transition:all .2s}
.sb-fab:active{transform:scale(.92);background:var(--blue-800)}
.sb-fab svg{width:24px;height:24px;fill:currentColor}
.site-footer{background:#f1f5f9;border-top:1px solid #e2e8f0;padding:.875rem 1.5rem;text-align:center;font-size:.75rem;color:#64748b;line-height:1.8}
.site-footer p{margin:0}
.site-footer a{color:#64748b;text-decoration:none}
.site-footer a:hover{color:var(--blue-700)}
@media (max-width:760px){
  .site-header{padding:calc(.3rem + env(safe-area-inset-top,0px)) .625rem .3rem;gap:.5rem;
    flex-wrap:nowrap;position:fixed;top:0;left:0;right:0;height:auto;min-height:52px}
  .site-header .logo-img{height:32px}
  .hd-slogan{display:none}
  .hd-actions{gap:.375rem}
  .hd-link,.hd-btn,.hd-cta{height:32px;font-size:.8125rem;border-radius:7px}
  .hd-link{padding:0 .5rem}
  .hd-btn{padding:0 .75rem}
  .hd-cta{gap:.3rem;padding:0 .7rem}
  .hd-cta svg{width:14px;height:14px}
  body.has-sidebar .site-header .hb-toggle{display:inline-flex}
  body{padding-top:calc(52px + env(safe-area-inset-top,0px))}
  .site-footer{padding:.625rem .5rem;font-size:.6875rem}
}
@media (max-width:480px){.site-header .hd-link{display:none}}
button{cursor:pointer;font-family:inherit;border:none;border-radius:6px;font-size:.875rem;padding:.5rem 1rem;transition:all .2s}
input,select,textarea{font-family:inherit;font-size:.875rem;border:1.5px solid #d1d9e6;border-radius:6px;padding:.5rem .75rem;outline:none;transition:border .2s;width:100%;background:#fff;color:var(--text)}
input:focus,select:focus,textarea:focus{border-color:var(--blue-500);box-shadow:0 0 0 3px rgba(37,99,168,.1)}
textarea{resize:vertical;min-height:100px}
label{font-weight:500;margin-bottom:.25rem;display:block;font-size:.8125rem;color:var(--text-light)}

/* Login */
.login-wrap{flex:1;min-height:calc(100vh - 120px);display:flex;align-items:center;justify-content:center;gap:2rem;flex-wrap:wrap;
  background:
    linear-gradient(135deg,rgba(15,30,57,.55) 0%,rgba(30,64,124,.45) 60%,rgba(96,165,250,.35) 100%),
    url('/home-bg.jpg') center center / cover no-repeat;
  position:relative;overflow:hidden}
.login-wrap::before{content:'';position:absolute;width:600px;height:600px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.05),transparent 70%);top:-200px;right:-100px}
.login-wrap::after{content:'';position:absolute;width:400px;height:400px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.03),transparent 70%);bottom:-150px;left:-50px}
.login-card{background:rgba(255,255,255,.97);border-radius:16px;padding:3rem;width:400px;max-width:90vw;
  box-shadow:0 25px 60px rgba(0,0,0,.3);position:relative;z-index:1}
.login-logo{text-align:center;margin-bottom:2rem}
.login-logo .icon{width:64px;height:64px;background:linear-gradient(135deg,var(--blue-600),var(--blue-400));
  border-radius:16px;display:inline-flex;align-items:center;justify-content:center;margin-bottom:1rem;
  box-shadow:0 8px 24px rgba(37,99,168,.3)}
.login-logo .icon svg{width:32px;height:32px;fill:#fff}
.login-logo h1{font-size:1.375rem;font-weight:700;color:var(--blue-900);letter-spacing:-.02em}
.login-notes{position:relative;z-index:2;width:300px;flex:0 0 300px;display:flex;flex-direction:column;max-height:min(68vh,460px)}
.login-notes[hidden]{display:none}
.login-notes-head{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}
.login-notes-head .dot{width:6px;height:6px;border-radius:50%;background:var(--gold);flex-shrink:0}
.login-notes-head h3{font-size:1rem;font-weight:600;color:#fff;text-shadow:0 1px 8px rgba(6,20,40,.55)}
.notes-board{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.875rem;overflow-y:auto;
  padding:.35rem .5rem .75rem;flex:1;min-height:0}
.note{position:relative;border:none;cursor:pointer;font:inherit;text-align:left;
  padding:1.5rem .875rem .75rem;border-radius:4px;min-height:140px;display:flex;flex-direction:column;gap:.375rem;
  transform:rotate(var(--rot,0deg));box-shadow:0 8px 18px -8px rgba(6,20,40,.5);
  transition:transform .18s ease,box-shadow .18s ease}
.note:hover{transform:rotate(0deg) translateY(-4px) scale(1.02);box-shadow:0 16px 28px -10px rgba(6,20,40,.6);z-index:2}
.note-pin{position:absolute;top:.5rem;left:50%;margin-left:-5px;width:10px;height:10px;border-radius:50%;
  background:radial-gradient(circle at 34% 28%, #fff 0%, #ef4444 55%, #991b1b 100%);box-shadow:0 1px 3px rgba(0,0,0,.45)}
.note-top{position:absolute;top:.45rem;right:.5rem;font-size:.6875rem;line-height:1.4;padding:0 5px;border-radius:4px;background:rgba(0,0,0,.14)}
.note-yellow{background:#FEF3C7;color:#713F12}
.note-pink{background:#FCE7F3;color:#831843}
.note-blue{background:#DBEAFE;color:#1E3A8A}
.note-green{background:#DCFCE7;color:#14532D}
.note-purple{background:#EDE9FE;color:#4C1D95}
.note-title{font-size:.8125rem;font-weight:600;line-height:1.4;overflow:hidden;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.note-text{font-size:.75rem;line-height:1.6;opacity:.85;flex:1;overflow:hidden;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical}
.note-date{font-size:.6875rem;opacity:.6}
@media (max-width:1140px){.login-notes{display:none}}
.login-logo p{font-size:.8125rem;color:var(--gray);margin-top:.25rem}
@media (max-width:760px){
  /* 手机端登录优化：更大输入区、防 iOS 自动放大、按钮易点击、垂直居中不贴顶 */
  .login-wrap{padding:1rem .75rem;align-items:center;justify-content:center;min-height:calc(100vh - 52px)}
  .login-card{padding:1.75rem 1.25rem;width:100%;max-width:100%;border-radius:14px;
              box-shadow:0 12px 32px rgba(0,0,0,.22);margin-top:1rem}
  .login-logo{margin-bottom:1.25rem}
  .login-logo h1{font-size:1.25rem}
  .login-logo p{font-size:.75rem}
  .login-card .form-group{margin-bottom:1rem}
  .login-card label{font-size:.8125rem;margin-bottom:.375rem}
  .login-card input{font-size:16px;padding:.75rem .875rem;border-radius:8px;min-height:46px}
  .login-card select{font-size:16px;padding:.75rem .75rem;min-height:46px}
  .login-card .btn-primary.full{padding:.875rem;font-size:1rem;min-height:48px;border-radius:10px;margin-top:.25rem}
  .login-hint{font-size:.8125rem;margin-top:1rem;line-height:1.8}
  .login-hint a{padding:.25rem .375rem;display:inline-block}
}
@media (max-width:380px){
  .login-card{padding:1.5rem 1rem}
  .login-logo h1{font-size:1.125rem}
}
.form-group{margin-bottom:1.25rem}
.btn-primary{background:linear-gradient(135deg,var(--blue-600),var(--blue-500));color:#fff;
  padding:.625rem 1rem;font-weight:600;border-radius:8px;
  box-shadow:0 4px 12px rgba(37,99,168,.3);transition:all .2s}
.btn-primary:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(37,99,168,.4)}
.btn-primary.full{width:100%;padding:.75rem;font-size:.9375rem}
.btn-ghost{background:#eef4fb;color:var(--blue-700)}
.btn-ghost:hover{background:var(--blue-100)}
.btn-danger{background:#fee2e2;color:var(--red)}
.btn-danger:hover{background:#fecaca}
.btn-success{background:#dcfce7;color:#15803d}
.btn-success:hover{background:#bbf7d0}
.btn-warn{background:#fef3c7;color:#92400e}
.btn-warn:hover{background:#fde68a}
.btn-sm{padding:.25rem .625rem;font-size:.75rem}
.login-hint{text-align:center;margin-top:1.25rem;font-size:.75rem;color:var(--gray);line-height:1.6}
.login-hint code{background:var(--blue-50);padding:1px 6px;border-radius:4px;color:var(--blue-700);font-family:Menlo,Consolas,monospace}
.err{color:var(--red);font-size:.8125rem;margin-top:.5rem;min-height:1.1em}

/* Layout */
.layout{display:flex;min-height:calc(100vh - 120px);flex:1}
.sidebar{width:240px;background:linear-gradient(180deg,var(--blue-900),var(--blue-800));
  color:#fff;display:flex;flex-direction:column;position:fixed;top:65px;left:0;bottom:0;z-index:100}
.sidebar-header{padding:1.25rem;border-bottom:1px solid rgba(255,255,255,.1)}
.sidebar-header h2{font-size:1.0625rem;font-weight:600;display:flex;align-items:center;gap:.5rem}
.sidebar-header .badge{font-size:.625rem;background:var(--gold);padding:2px 6px;border-radius:4px;font-weight:500}
.sidebar-header p{font-size:.75rem;color:var(--blue-200);margin-top:.25rem}
.sidebar-nav{flex:1;padding:.75rem 0;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.16) transparent}
.sidebar-nav::-webkit-scrollbar{width:6px}
.sidebar-nav::-webkit-scrollbar-track{background:transparent}
.sidebar-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.16);border-radius:3px}
.sidebar-nav::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.3)}
.nav-item{display:flex;align-items:center;gap:.625rem;padding:.5625rem 1.25rem;color:var(--blue-200);
  cursor:pointer;transition:all .15s;font-size:.875rem;border-left:3px solid transparent;background:none;width:100%;text-align:left}
.nav-item:hover{background:rgba(255,255,255,.05);color:#fff}
.nav-item.active{background:rgba(255,255,255,.1);color:#fff;border-left-color:var(--blue-400);font-weight:500}
.nav-item svg{width:18px;height:18px;opacity:.7;flex-shrink:0;fill:currentColor}
.nav-item .nav-label{flex:1}
.nav-group-title{padding:.75rem 1.25rem .25rem;font-size:.6875rem;font-weight:600;letter-spacing:.08em;color:rgba(163,200,237,.5)}
.nav-badge{display:none;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#e74c3c;color:#fff;font-size:.6875rem;font-weight:600;line-height:18px;text-align:center;box-shadow:0 0 0 2px rgba(231,76,60,.25)}
.nav-badge.show{display:inline-block;animation:nbPulse 1.6s ease-in-out infinite}
@keyframes nbPulse{0%,100%{box-shadow:0 0 0 2px rgba(231,76,60,.25)}50%{box-shadow:0 0 0 5px rgba(231,76,60,0)}}
.nav-item.active svg{opacity:1}
.sidebar-footer{padding:.875rem 1.25rem;border-top:1px solid rgba(255,255,255,.1)}
.user-box{display:flex;align-items:center;gap:.625rem;margin-bottom:.75rem}
.avatar{width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,var(--gold),var(--gold-light));
  display:flex;align-items:center;justify-content:center;color:#fff;font-weight:600;font-size:.875rem;flex-shrink:0}
.user-name{font-size:.875rem;font-weight:500}
.user-role{font-size:.6875rem;color:var(--blue-300)}
.logout-btn{display:flex;align-items:center;gap:.5rem;color:var(--blue-300);cursor:pointer;
  font-size:.8125rem;transition:color .2s;background:none;padding:.375rem 0;width:100%}
.logout-btn:hover{color:#fff}

.main{flex:1;margin-left:240px;padding:1.75rem 2rem;background:var(--bg);min-height:calc(100vh - 120px)}
.page-header{margin-bottom:1.5rem;display:flex;justify-content:space-between;align-items:flex-end;gap:1rem;flex-wrap:wrap}
.page-header h1{font-size:1.5rem;font-weight:700;color:var(--blue-900)}
.page-header p{font-size:.8125rem;color:var(--gray);margin-top:.25rem}

/* Cards */
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.5rem;margin-bottom:1rem}
.card-title{font-size:1rem;font-weight:600;margin-bottom:1rem;color:var(--blue-900);
  display:flex;align-items:center;justify-content:space-between;gap:.5rem}

/* Stats Grid */
.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin-bottom:1.5rem}
.stat-card{background:var(--card);border-radius:var(--radius);padding:1.25rem;box-shadow:var(--shadow);
  border-left:4px solid var(--blue-500);position:relative;overflow:hidden}
.stat-card::after{content:'';position:absolute;top:-20px;right:-20px;width:80px;height:80px;
  border-radius:50%;background:rgba(37,99,168,.05)}
.stat-card.warn{border-left-color:var(--orange)}
.stat-card.success{border-left-color:var(--green)}
.stat-card.danger{border-left-color:var(--red)}
.stat-card.gold{border-left-color:var(--gold)}
.stat-card.info{border-left-color:var(--blue-400)}
.stat-label{font-size:.75rem;color:var(--gray);font-weight:500;text-transform:uppercase;letter-spacing:.05em}
.stat-value{font-size:1.875rem;font-weight:700;color:var(--blue-900);margin:.25rem 0;line-height:1.1}
.stat-sub{font-size:.75rem;color:var(--text-light)}

/* Table */
.table-wrap{overflow-x:auto;border-radius:var(--radius);border:1px solid #e2e8f0}
table{width:100%;border-collapse:collapse;font-size:.875rem;background:#fff;min-width:680px}
th{background:#f8fafc;color:var(--text-light);font-weight:600;text-align:left;padding:.75rem 1rem;
  font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid #e2e8f0}
td{padding:.875rem 1rem;border-bottom:1px solid #f1f5f9;color:var(--text);vertical-align:middle}
tr:last-child td{border-bottom:none}
tr:hover td{background:#fafbfc}

/* Tags / Badges */
.tag{display:inline-flex;align-items:center;gap:4px;font-size:.6875rem;padding:.1875rem .5rem;border-radius:4px;font-weight:500;white-space:nowrap}
.tag-pending          {background:#fef3c7;color:#92400e}
.tag-reviewing        {background:#dbeafe;color:#1e40af}
.tag-manager_approved {background:#cffafe;color:#155e75}
.tag-vice_gm_approved {background:#c7d2fe;color:#3730a3}
.tag-approved         {background:#d1fae5;color:#065f46}
.tag-rejected         {background:#fee2e2;color:#991b1b}
.tag-implemented      {background:#e0e7ff;color:#3730a3}
.tag-pinned           {background:linear-gradient(135deg,#fb923c,#f97316);color:#fff}
.prio-high  {background:#fee2e2;color:#991b1b}
.prio-medium{background:#fef3c7;color:#92400e}
.prio-low   {background:#e0f2fe;color:#075985}
.role-admin   {background:linear-gradient(135deg,var(--gold),var(--gold-light));color:#fff}
.role-gm      {background:linear-gradient(135deg,#7c3aed,#a855f7);color:#fff}
.role-vice_gm {background:linear-gradient(135deg,#2563eb,#3b82f6);color:#fff}
.role-manager {background:linear-gradient(135deg,#0891b2,#06b6d4);color:#fff}
.role-employee{background:#e2e8f0;color:#475569}

/* Announcement banner */
.anno-banner{border-left:4px solid var(--gold);background:linear-gradient(90deg,#fffbeb 0%,#ffffff 50%)}
.anno-list{display:flex;flex-direction:column;gap:.625rem}
.anno-item{padding:.625rem .875rem;border:1px solid #fde68a;background:#fffdf5;border-radius:8px}
.anno-item.pinned{border-color:#fb923c;background:linear-gradient(90deg,#fff7ed,#ffffff)}
.anno-head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.25rem}
.anno-title{font-weight:600;color:var(--blue-900);font-size:.9375rem}
.anno-meta{margin-left:auto;font-size:.6875rem;color:var(--text-light)}
.anno-content{font-size:.8125rem;color:var(--text);white-space:pre-wrap;line-height:1.6}
@media (max-width:760px){
  .anno-meta{margin-left:0;width:100%}
  .anno-title{font-size:.875rem}
}

/* Filter bar */
.filter-bar{display:flex;gap:.625rem;flex-wrap:wrap;align-items:end;margin-bottom:1rem}
.filter-bar > div{display:flex;flex-direction:column;min-width:140px}
.filter-bar label{margin-bottom:.25rem}

/* Modal */
.modal-mask{position:fixed;inset:0;background:rgba(12,35,64,.55);display:flex;align-items:center;
  justify-content:center;z-index:1000;backdrop-filter:blur(4px);padding:1rem}
.modal{background:#fff;border-radius:12px;width:100%;max-width:800px;max-height:90vh;
  display:flex;flex-direction:column;overflow:hidden;box-shadow:0 25px 60px rgba(0,0,0,.3);animation:modalIn .2s ease-out}
@keyframes modalIn{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}
.modal-header{padding:1.25rem 1.5rem;border-bottom:1px solid #f1f5f9;
  display:flex;justify-content:space-between;align-items:center}
.modal-header h3{font-size:1.0625rem;color:var(--blue-900);font-weight:600}
.modal-body{padding:1.5rem;flex:1 1 auto;min-height:0;overflow-y:auto}
.modal-footer{padding:1rem 1.5rem;border-top:1px solid #f1f5f9;display:flex;gap:.625rem;justify-content:flex-end;background:#fafbfc;border-radius:0 0 12px 12px}
.icon-close{background:none;color:var(--gray);font-size:1.25rem;padding:0;width:28px;height:28px;
  display:flex;align-items:center;justify-content:center;border-radius:6px}
.icon-close:hover{background:#f1f5f9;color:var(--text)}

/* Toast */
.toast{position:fixed;bottom:24px;right:24px;background:var(--blue-900);color:#fff;padding:.75rem 1.25rem;
  border-radius:8px;box-shadow:0 8px 30px rgba(0,0,0,.25);font-size:.875rem;z-index:2000;
  animation:toastIn .25s ease;max-width:320px}
.toast.err{background:var(--red)}
.toast.ok {background:var(--green)}
@keyframes toastIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* Detail view */
.detail-meta{display:flex;gap:1.5rem;flex-wrap:wrap;color:var(--text-light);font-size:.8125rem;margin-bottom:1rem}
.detail-meta span strong{color:var(--text);font-weight:600;margin-right:.25rem}
.detail-content{background:var(--blue-50);border-radius:8px;padding:1rem;font-size:.9375rem;
  line-height:1.7;white-space:pre-wrap;color:var(--text);border-left:3px solid var(--blue-400);margin-bottom:1rem}
.timeline{position:relative;padding-left:1.25rem;margin-top:1rem}
.timeline::before{content:'';position:absolute;left:5px;top:6px;bottom:6px;width:2px;background:#e2e8f0}
.tl-item{position:relative;padding-bottom:1rem}
.tl-item::before{content:'';position:absolute;left:-1.25rem;top:6px;width:12px;height:12px;
  border-radius:50%;background:var(--blue-400);border:2px solid #fff;box-shadow:0 0 0 2px var(--blue-200)}
.tl-meta{font-size:.75rem;color:var(--text-light);margin-bottom:.25rem}
.tl-action{font-weight:500;color:var(--blue-900);font-size:.875rem}
.tl-notes{margin-top:.25rem;color:var(--text);font-size:.8125rem;background:#fff;border:1px solid #e2e8f0;padding:.5rem .75rem;border-radius:6px}

/* Chart */
.chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:1rem}
.bar-chart{display:flex;flex-direction:column;gap:.625rem}
.bar-row{display:flex;align-items:center;gap:.75rem;font-size:.8125rem}
.bar-label{width:90px;color:var(--text-light);text-align:right;flex-shrink:0}
.bar-track{flex:1;background:#f1f5f9;height:18px;border-radius:9px;overflow:hidden;position:relative}
.bar-fill{height:100%;background:linear-gradient(90deg,var(--blue-500),var(--blue-300));border-radius:9px;transition:width .5s}
.bar-val{width:42px;font-weight:600;color:var(--blue-900);text-align:right;flex-shrink:0}
.donut{display:flex;align-items:center;gap:1.25rem;flex-wrap:wrap;justify-content:center}
.donut svg{display:block}
.donut-legend{display:flex;flex-direction:column;gap:.375rem;font-size:.8125rem}
.donut-legend span{display:flex;align-items:center;gap:.375rem;color:var(--text)}
.donut-legend i{display:inline-block;width:10px;height:10px;border-radius:2px;flex-shrink:0}

/* Misc */
.empty{text-align:center;padding:3rem 1rem;color:var(--text-light);font-size:.875rem}
.empty svg{width:48px;height:48px;margin:0 auto .75rem;opacity:.3;display:block;fill:var(--gray)}
.pager{display:flex;gap:.375rem;align-items:center;justify-content:center;margin-top:1rem;font-size:.8125rem;color:var(--text-light)}
.pager button{padding:.375rem .75rem;background:#fff;border:1px solid #e2e8f0;color:var(--text)}
.pager button:disabled{opacity:.45;cursor:not-allowed}
.pager button:not(:disabled):hover{border-color:var(--blue-400);color:var(--blue-600)}
.row{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
.spacer{flex:1}
@media (max-width:760px){
  .sidebar{transform:translateX(-100%);top:52px;width:80%;max-width:300px;bottom:0;z-index:250;
           box-shadow:4px 0 22px rgba(0,0,0,.28);transition:transform .25s ease}
  .sidebar.open{transform:none}
  .main{margin-left:0;padding:1rem;padding-top:.75rem;overflow-x:hidden;max-width:100%;box-sizing:border-box}
  .toggle-sb{display:none !important}
  .sb-backdrop{display:block;position:fixed;top:52px;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);
               z-index:240;opacity:0;pointer-events:none;transition:opacity .2s}
  .sb-backdrop.open{opacity:1;pointer-events:auto}
  .sb-fab{display:none}
  body.has-sidebar .sb-fab{display:flex}
  .layout{min-height:calc(100vh - 52px - 60px)}
}
.toggle-sb{display:none;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;
  background:#fff;border:1px solid #e2e8f0;color:var(--blue-700);margin-right:.5rem}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 1rem}
@media(max-width:640px){.grid2{grid-template-columns:1fr}}
.hdr-btns{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}
.hdr-btns button{margin:0}
.fap-table{font-size:.75rem;min-width:1100px}
.fap-table th,.fap-table td{padding:.375rem .5rem;border:1px solid #cbd5e1;text-align:center;vertical-align:middle;white-space:normal;word-break:break-word}
.fap-table th{background:#f1f5f9;color:#1e293b;font-weight:600}
.fap-table th small{font-weight:400;color:#64748b}
.fap-table td{background:#fff}
/* Key-projects (Gantt) */
.kpb-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.kpb-table{border-collapse:collapse;font-size:.75rem;min-width:1200px}
.kpb-table th,.kpb-table td{border:1px solid #94a3b8;padding:0;text-align:center;background:#fff}
.kpb-table th.kpb-month{background:#e2e8f0;font-weight:600;padding:.25rem .5rem}
.kpb-table th.kpb-third{background:#f1f5f9;font-weight:500;padding:.25rem;font-size:.6875rem;color:#475569;width:30px}
.kpb-table th.kpb-name,.kpb-table td.kpb-name{width:140px;background:#f8fafc;padding:.25rem .5rem}
.kpb-table td.kpb-name input{width:100%;border:0;background:transparent;font-size:.8125rem;padding:.25rem;text-align:center}
.kpb-table td.kpb-cell{width:30px;height:28px;cursor:pointer;user-select:none}
.kpb-table td.kpb-cell:hover{box-shadow:inset 0 0 0 2px rgba(59,130,246,.55)}
.kpb-table thead th{position:sticky;top:0;z-index:1}
.kpb-title{font-weight:700;font-size:1.125rem;text-align:center;padding:.5rem;background:#fff;border:1px solid #94a3b8;border-bottom:none}
.kpb-title input{width:60%;max-width:480px;font-weight:700;font-size:1.125rem;text-align:center;border:0;background:transparent;color:#c0392b}
.kpb-title input:focus{outline:1px dashed #c0392b;background:#fff7ed}
.kpb-palette{display:flex;gap:.375rem;align-items:center;flex-wrap:wrap;padding:.5rem 0}
.kpb-swatch{width:24px;height:24px;border-radius:4px;border:2px solid transparent;cursor:pointer;display:inline-block}
.kpb-swatch.active{border-color:#1e293b;box-shadow:0 0 0 2px rgba(30,41,59,.15)}
.kpb-swatch.eraser{background:repeating-linear-gradient(45deg,#fff 0 4px,#cbd5e1 4px 8px);border:1px solid #94a3b8}
.kpb-row-op{padding:0 .25rem;background:#f8fafc;width:60px}
.kpb-row-op button{padding:.125rem .375rem;font-size:.6875rem}
@media print{
  .kpb-table td.kpb-cell{cursor:default}
  .kpb-row-op,.kpb-add-row,.kpb-palette,.kpb-actions,.no-print{display:none !important}
  .kpb-table th.kpb-month,.kpb-table th.kpb-third{background:#e2e8f0 !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .kpb-table td.kpb-cell{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  /* 重点项目看板打印优化：取消最小宽度限制，强制适应页面，缩小字体 */
  .kpb-table{min-width:0 !important;width:100% !important;font-size:8pt !important;table-layout:fixed}
  .kpb-table th,.kpb-table td{padding:2px 1px !important;word-break:break-word}
  .kpb-table th.kpb-name,.kpb-table td.kpb-name{width:80px !important}
  .kpb-title{font-size:12pt !important;margin-bottom:8px !important}
}
@media (max-width:760px){
  .page-header{flex-direction:column;align-items:flex-start}
  .hdr-btns{width:100%;justify-content:flex-start}
  .hdr-btns button{flex:1 0 auto;min-width:0;font-size:.8125rem;padding:.5rem .75rem}
  .fap-table{font-size:.7rem;min-width:900px}
  .fap-table th,.fap-table td{padding:.25rem .375rem}
  .table-wrap{-webkit-overflow-scrolling:touch}
  .table-wrap::after{content:"← 左右滑动查看完整表格 →";display:block;text-align:center;font-size:.7rem;color:#94a3b8;padding:.375rem 0}
  .modal{width:96vw !important;max-width:96vw !important}
}
@media print{
  html,body{margin:0 !important;padding:0 !important;background:#fff !important;width:100% !important}
  .sidebar,.toggle-sb,.no-print,#logoutBtn,.user-info,.tabs,.page-header,.site-header,.site-footer{display:none !important}
  .main{padding:0 !important;margin:0 !important}
  .layout{display:block !important}
  .card{box-shadow:none;border:none;padding:0 !important;margin:0 !important;background:transparent}
  .fap-print{padding:0 !important;margin:0 !important;width:100% !important}
  .fap-title{display:block !important;margin:0 0 4px 0 !important;font-size:14pt !important}
  .fap-foot{font-size:8pt !important;margin-top:4px !important}
  .table-wrap{overflow:visible !important;border:none !important;width:100% !important}
  .table-wrap::after{display:none !important}
  .fap-table{min-width:0 !important;width:100% !important;font-size:8pt;table-layout:fixed;border-collapse:collapse}
  .fap-table th,.fap-table td{border:1px solid #000 !important;color:#000 !important;padding:2px 3px !important;word-break:break-word;overflow-wrap:anywhere;line-height:1.2}
  .fap-table th small{font-size:6.5pt}
  @page{size:A4 landscape;margin:5mm}
}

/* ============================================================
   手机端全面优化 — 仅影响 max-width:760px 的设备
   ============================================================ */
@media (max-width:760px){
  /* ---------- 全局基础 ---------- */
  html{font-size:13px;-webkit-text-size-adjust:100%;overflow-x:hidden}
  body{padding-top:calc(52px + env(safe-area-inset-top,0px));overflow-x:hidden}
  #app{width:100%;overflow-x:hidden}

  /* ---------- Header 顶部栏 ---------- */
  .site-header{height:auto;min-height:50px;gap:.375rem;
    padding:calc(.25rem + env(safe-area-inset-top,0px)) .5rem .25rem}
  .site-header .logo-img{height:28px}
  .site-header .brand .cn{font-size:.875rem}
  .site-header .brand .en{font-size:.6rem}
  .hd-btn{padding:0 .625rem;font-size:.78125rem}
  .hd-cta{padding:0 .625rem;font-size:.78125rem}

  /* ---------- Footer ---------- */
  .site-footer{padding:.5rem .375rem;font-size:.625rem;line-height:1.6}

  /* ---------- Login 登录页 ---------- */
  .login-wrap{padding:.75rem .5rem;min-height:calc(100vh - 50px);align-items:center;justify-content:center;padding-top:3rem}
  .login-card{padding:1.5rem 1rem;width:100%;max-width:100%;border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.18);margin:0}
  .login-logo{margin-bottom:1rem}
  .login-logo h1{font-size:1.15rem}
  .login-logo p{font-size:.7rem}
  .login-card .form-group{margin-bottom:.875rem}
  .login-card label{font-size:.8rem;margin-bottom:.3rem}
  .login-card input,.login-card select{font-size:16px!important;padding:.625rem .75rem!important;min-height:44px;border-radius:8px}
  .login-card .btn-primary.full{padding:.75rem;font-size:.9375rem;min-height:46px;border-radius:8px}
  .login-hint{font-size:.75rem;margin-top:.75rem;line-height:1.6}
  /* 验证码行：输入框 + 图片 自适应 */
  .login-card .form-group:has(#captcha),
  .login-card .form-group:has(#rcaptcha){display:flex;gap:.5rem;align-items:flex-end}
  .login-card .form-group:has(#captcha)>div,
  .login-card .form-group:has(#rcaptcha)>div{flex:1}
  .login-card .form-group:has(#captcha) img,
  .login-card .form-group:has(#rcaptcha) img{height:44px!important;border-radius:6px;flex-shrink:0;cursor:pointer}

  /* ---------- Layout 布局 ---------- */
  .layout{flex-direction:column;min-height:calc(100vh - 50px - 50px);width:100%;overflow-x:hidden;max-width:100vw}
  .sidebar{top:50px;width:75%;max-width:280px;bottom:0;z-index:250}
  .sidebar-header{padding:1rem .875rem}
  .sidebar-header h2{font-size:.9rem}
  .sidebar-header p{font-size:.6875rem}
  .sidebar-nav{padding:.5rem 0}
  .nav-item{padding:.625rem 1rem;font-size:.8125rem;gap:.5rem}
  .nav-group-title{padding:.625rem 1rem .25rem;font-size:.6875rem}
  .nav-item svg{width:16px;height:16px}
  .sidebar-footer{padding:.75rem 1rem}
  .user-box{gap:.5rem;margin-bottom:.5rem}
  .avatar{width:30px;height:30px;font-size:.75rem}
  .user-name{font-size:.8rem}
  .user-role{font-size:.625rem}
  .logout-btn{font-size:.75rem;padding:.25rem 0}

  .main{margin-left:0!important;padding:.75rem .5rem;padding-top:.5rem;min-height:auto;width:100%;max-width:100vw;overflow-x:hidden;box-sizing:border-box}

  /* ---------- Page Header ---------- */
  .page-header{margin-bottom:.875rem;gap:.5rem}
  .page-header h1{font-size:1.15rem}
  .page-header p{font-size:.75rem;margin-top:.125rem}
  .hdr-btns{width:100%;gap:.375rem}
  .hdr-btns button{flex:1 1 auto;min-width:0;font-size:.75rem;padding:.4rem .5rem;white-space:nowrap}

  /* ---------- Stats Grid 统计卡片 ---------- */
  .stats-grid{grid-template-columns:repeat(2,1fr);gap:.5rem;margin-bottom:.75rem}
  .stat-card{padding:.75rem .625rem;border-radius:8px}
  .stat-label{font-size:.65rem;letter-spacing:0}
  .stat-value{font-size:1.35rem;margin:.125rem 0}
  .stat-sub{font-size:.65rem}

  /* ---------- Card 卡片 ---------- */
  .card{padding:1rem .875rem;margin-bottom:.875rem;border-radius:14px;overflow:hidden;max-width:100%;box-sizing:border-box}
  .card-title{font-size:.875rem;margin-bottom:.625rem}

  /* ---------- Filter Bar 筛选栏 ---------- */
  .filter-bar{gap:.375rem;margin-bottom:.625rem}
  .filter-bar>div{min-width:0;flex:1 1 120px}
  .filter-bar label{font-size:.7rem;margin-bottom:.125rem}
  .filter-bar select,.filter-bar input{font-size:.8rem;padding:.375rem .5rem;min-height:36px}
  .filter-bar button{font-size:.75rem;padding:.375rem .625rem;min-height:36px}

  /* ---------- Table 表格 ---------- */
  .table-wrap{border-radius:6px;border:1px solid #d1d9e6;-webkit-overflow-scrolling:touch;overflow-x:auto;margin:0 -.125rem}
  table{font-size:.75rem;min-width:600px}
  th{padding:.5rem .375rem;font-size:.65rem}
  td{padding:.5rem .375rem}

  /* ---------- Tags ---------- */
  .tag{font-size:.625rem;padding:.125rem .375rem}

  /* ---------- Modal 弹窗 ---------- */
  .modal-mask{padding:.375rem;align-items:flex-start;padding-top:1rem}
  .modal{width:98vw!important;max-width:98vw!important;max-height:92vh;border-radius:10px}
  .modal-header{padding:.75rem .875rem}
  .modal-header h3{font-size:.9375rem}
  .modal-body{padding:.75rem .625rem}
  .modal-footer{padding:.625rem .75rem;gap:.375rem;flex-wrap:wrap}
  .modal-footer button{flex:1 1 auto;min-width:80px}
  .icon-close{width:32px;height:32px;font-size:1.375rem}

  /* ---------- Form Elements 表单元素（全站统一：浅底无边框 + 聚焦蓝边） ---------- */
  input,select,textarea{
    font-size:15px!important;padding:.7rem .8rem!important;min-height:46px;
    background-color:#f2f5fa!important;border:1.5px solid transparent!important;
    border-radius:10px!important;color:var(--text)!important;
    transition:background-color .16s,border-color .16s,box-shadow .16s
  }
  input:focus,select:focus,textarea:focus{
    background-color:#fff!important;border-color:var(--blue-500)!important;
    box-shadow:0 0 0 3px rgba(37,99,168,.12)!important;outline:none!important
  }
  /* 勾选框/单选框不要被上面的尺寸撑变形 */
  input[type="checkbox"],input[type="radio"]{
    min-height:0!important;width:18px;height:18px;padding:0!important;
    border-radius:4px!important;background-color:#fff!important;flex-shrink:0
  }
  /* 日期控件各端原生渲染差异大：高度会偏高、文字会居中 → 统一高度并强制左对齐 */
  input[type="date"]{
    height:46px!important;min-height:46px!important;
    text-align:left!important;font-family:inherit!important
  }
  input[type="date"]::-webkit-date-and-time-value{text-align:left!important}
  input[type="date"]::-webkit-datetime-edit{text-align:left!important;padding:0}
  input[type="date"]::-webkit-calendar-picker-indicator{margin-left:auto;opacity:.5;cursor:pointer}

  /* select 统一自定义箭头（各端原生箭头样式差异大） */
  select{
    -webkit-appearance:none!important;appearance:none!important;
    background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236b7280'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E")!important;
    background-repeat:no-repeat!important;
    background-position:right .75rem center!important;
    background-size:16px!important;
    padding-right:2.25rem!important
  }

  textarea{min-height:96px;line-height:1.6}
  label{font-size:.75rem}
  .form-group{margin-bottom:.875rem}
  .form-group>label{font-weight:600;color:var(--text-light);margin-bottom:.3rem;padding-left:.125rem}
  .err{font-size:.75rem}

  /* 表单底部按钮行：主按钮通栏，次按钮并排（只影响真正含主按钮的行） */
  .card form>.row>.btn-primary{
    flex:1 1 100%;min-height:48px;font-size:.9375rem;
    border-radius:11px;font-weight:700;letter-spacing:.5px
  }
  .card form>.row>.btn-ghost{flex:1 1 38%;min-height:44px;font-size:.875rem;border-radius:10px}
  .grid2{grid-template-columns:1fr!important;gap:.5rem!important}

  /* ---------- 每日进步一点点（提交建议页面 & 弹窗）----------
     移动端把「带边框的表格」重构成「标签 + 浅底输入块」的现代表单：
     去掉 td 边框与标签底色，全页只保留输入控件一种"形"。 */
  /* 表单名：收成细窄的小节标题（避免与 page-header 重复） */
  .sg-form-heading{
    font-size:.8125rem!important;font-weight:600!important;color:var(--blue-700)!important;
    text-align:left!important;margin-bottom:.75rem!important;
    padding-left:.5rem;border-left:3px solid var(--blue-500);line-height:1.25
  }
  .sg-form-daterow{text-align:left!important;margin-bottom:.875rem!important;
    font-size:.75rem!important;color:var(--text-light);display:flex;align-items:center;gap:.5rem}
  .sg-form-daterow input{
    width:auto!important;flex:1;max-width:170px;
    font-size:14px!important;padding:.4rem .6rem!important;min-height:40px!important;
    border:1.5px solid transparent!important;background:#f2f5fa!important;
    border-radius:10px!important;color:var(--text)!important
  }

  /* 表格整体：去边框、去圆角，改成区块流 */
  .sg-form-table{border:none!important;width:100%!important;min-width:0!important;
    border-collapse:separate!important;border-spacing:0!important;
    max-width:100%!important;overflow:visible!important}
  .sg-form-table tr{display:block;margin-bottom:.875rem}
  .sg-form-table tr:last-child{margin-bottom:0}
  .sg-form-table td{
    display:block!important;width:100%!important;
    border:0!important;background:transparent!important;
    padding:0!important;text-align:left!important;box-sizing:border-box
  }
  /* 标签：小号灰字落在控件上方 */
  .sg-form-table .sg-label{
    background:transparent!important;border:0!important;border-radius:0!important;
    font-size:.75rem!important;font-weight:600!important;color:var(--text-light)!important;
    padding:0 0 .3rem .125rem!important;text-align:left!important;letter-spacing:.02em
  }
  .sg-form-table .sg-content{border-radius:0!important}

  /* 输入控件：浅底无边框；聚焦时白底 + 蓝边（全页唯一有"形"的元素） */
  .sg-form-table input,
  .sg-form-table select,
  .sg-form-table textarea{
    font-size:14px!important;width:100%!important;
    border:1.5px solid transparent!important;border-radius:10px!important;
    padding:.7rem .8rem!important;background-color:#f2f5fa!important;
    min-height:46px!important;box-sizing:border-box;color:var(--text)!important;
    transition:background .16s,border-color .16s,box-shadow .16s
  }
  .sg-form-table input:focus,
  .sg-form-table select:focus,
  .sg-form-table textarea:focus{
    background-color:#fff!important;border-color:var(--blue-500)!important;
    box-shadow:0 0 0 3px rgba(37,99,168,.12)!important
  }
  .sg-form-table input[readonly]{color:var(--text-light)!important}
  .sg-form-table textarea{min-height:104px;resize:vertical;font-size:14px!important;line-height:1.7!important}
  .sg-form-table select{
    min-height:46px;-webkit-appearance:none;appearance:none;
    background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236b7280'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E")!important;
    background-repeat:no-repeat!important;background-position:right .75rem center!important;
    background-size:16px!important;background-color:#f2f5fa!important;padding-right:2.25rem!important
  }

  /* 建议类型：常规勾选项（2 列），自绘方形复选框 —— 比原生的大、好点 */
  .sg-checkbox-group{
    display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))!important;
    gap:.125rem .5rem!important;align-items:stretch!important
  }
  .sg-checkbox-group .sg-type{
    display:flex!important;align-items:flex-start;gap:.375rem;
    position:relative;white-space:normal!important;
    min-height:40px;padding:.25rem 0;cursor:pointer
  }
  .sg-checkbox-group .sg-type input{
    -webkit-appearance:none;appearance:none;
    flex:0 0 17px;width:17px!important;height:17px!important;min-height:17px!important;
    margin:1px 0 0!important;padding:0!important;
    border:1.5px solid #c3ccdb!important;border-radius:5px!important;
    background-color:#fff!important;box-sizing:border-box;
    transition:background-color .16s,border-color .16s
  }
  .sg-checkbox-group .sg-type input:checked{
    background-color:var(--blue-500)!important;border-color:var(--blue-500)!important;
    background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6L9 17l-5-5'/%3E%3C/svg%3E")!important;
    background-repeat:no-repeat!important;
    background-position:center!important;
    background-size:12px!important
  }
  .sg-checkbox-group .sg-type-txt{
    display:block;font-size:.75rem;line-height:1.45;color:var(--text)
  }
  .sg-checkbox-group .sg-type input:checked + .sg-type-txt{color:var(--blue-700);font-weight:600}
  .sg-checkbox-group .sg-type:active{opacity:.7}
  /* 类型提示语：左侧色条的说明块 */
  .sg-type-hint{
    grid-column:1/-1;margin-top:.125rem!important;
    font-size:.6875rem!important;line-height:1.6;color:var(--text-light)!important;
    background:#f7f9fc;border-left:3px solid var(--blue-200);
    border-radius:0 8px 8px 0;padding:.5rem .6rem
  }

  /* 底部按钮：主按钮通栏，次按钮并排 */
  .sg-btn-row{
    display:grid!important;grid-template-columns:1fr 1fr!important;
    gap:.5rem!important;margin-top:1.25rem!important
  }
  .sg-btn-row #sgSubmitBtn{
    grid-column:1/-1;order:-1;width:100%!important;flex:none!important;
    padding:.85rem!important;font-size:1rem!important;min-height:50px!important;
    border-radius:11px!important;font-weight:700;letter-spacing:1px
  }
  .sg-btn-row #sgResetBtn,.sg-btn-row #sgGoList{
    width:100%!important;flex:none!important;padding:.6rem!important;
    font-size:.875rem!important;min-height:44px!important;border-radius:10px!important
  }

  /* 提交建议页面卡片：加大留白 */
  .card.fap-print{
    padding:1.125rem .875rem!important;overflow:visible!important;max-width:100%!important;
    box-sizing:border-box!important;border-radius:14px!important
  }

  /* ---------- Detail View 详情视图 ---------- */
  .detail-meta{gap:.5rem;font-size:.75rem;flex-direction:column}
  .detail-meta span{display:block}
  .detail-content{padding:.625rem;font-size:.8125rem;border-radius:6px}
  .timeline{padding-left:1rem}
  .tl-meta{font-size:.6875rem}
  .tl-action{font-size:.8rem}
  .tl-notes{font-size:.75rem;padding:.375rem .5rem}

  /* ---------- Pager 分页 ---------- */
  .pager{font-size:.75rem;gap:.25rem;flex-wrap:wrap}
  .pager button{padding:.25rem .5rem;font-size:.75rem}

  /* ---------- Toast 提示 ---------- */
  .toast{bottom:12px;right:12px;left:12px;max-width:none;font-size:.8rem;text-align:center}

  /* ---------- Announcement 公告 ---------- */
  .anno-item{padding:.5rem .625rem}
  .anno-title{font-size:.8rem}
  .anno-content{font-size:.75rem}
  .anno-meta{font-size:.625rem}

  /* ---------- Empty State ---------- */
  .empty{padding:1.5rem .75rem;font-size:.8rem}
  .empty svg{width:36px;height:36px;margin-bottom:.5rem}

  /* ---------- Chart ---------- */
  .chart-grid{grid-template-columns:1fr;gap:.625rem}
  .bar-label{width:60px;font-size:.7rem}
  .bar-val{width:32px;font-size:.75rem}
  .donut{flex-direction:column;align-items:center}

  /* ---------- FAP Table (complex table) ---------- */
  .fap-table{font-size:.65rem;min-width:800px}
  .fap-table th,.fap-table td{padding:.25rem .25rem}

  /* ---------- Key Projects Gantt ---------- */
  .kpb-table{min-width:900px;font-size:.65rem}
  .kpb-title{font-size:.875rem}
  .kpb-palette{gap:.25rem}
  .kpb-swatch{width:20px;height:20px}

  /* ---------- 审核弹窗中 grid 布局 ---------- */
  .modal-body .grid2,
  .modal-body div[style*="grid-template-columns:1fr 1fr"]{
    grid-template-columns:1fr!important;gap:.5rem!important
  }
  .modal-body div[style*="display:grid"]{
    grid-template-columns:1fr!important
  }

  /* ---------- 审核弹窗底部按钮 ---------- */
  .modal-footer .row{width:100%;flex-wrap:wrap;gap:.375rem!important}
  .modal-footer .row button{flex:1 1 auto;min-width:70px;font-size:.8rem}
  .modal-footer .spacer{display:none}

  /* ---------- 提交建议页面按钮 ---------- */
  .card .row{gap:.375rem!important}
  .card .row button{font-size:.8rem}
}

/* ---------- 超小屏幕 (iPhone SE / 320px) ---------- */
@media (max-width:380px){
  .login-card{padding:1.25rem .75rem}
  .login-logo h1{font-size:1rem}
  .stats-grid{grid-template-columns:1fr 1fr;gap:.375rem}
  .stat-card{padding:.625rem .5rem}
  .stat-value{font-size:1.15rem}
  .main{padding:.5rem .375rem}
  .card{padding:.625rem .5rem}
  .hdr-btns button{font-size:.6875rem;padding:.35rem .375rem}
  .page-header h1{font-size:1rem}
  .modal{width:99vw!important;max-width:99vw!important}
  .modal-body{padding:.5rem .375rem}
  .sidebar{width:80%;max-width:260px}
  .nav-item{padding:.5rem .75rem;font-size:.75rem}
  .nav-group-title{padding:.5rem .75rem .25rem;font-size:.625rem}
}

/* ---------- 平板竖屏优化 (768px ~ 1024px) ---------- */
@media (min-width:761px) and (max-width:1024px){
  .stats-grid{grid-template-columns:repeat(3,1fr)}
  .main{padding:1.25rem 1rem}
}

/* ==================================================================
   滑动式登录 / 注册卡片（auth-*）
   结构：左登录表单 .auth-signin + 右注册表单 .auth-signup + 渐变滑动面板 .auth-overlay-wrap
   ================================================================== */
.auth-shell{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:.875rem}
.auth-card{position:relative;width:740px;max-width:100%;min-height:480px;background:#fff;
  border-radius:18px;overflow:hidden;box-shadow:0 22px 52px rgba(0,0,0,.3)}

/* 两张表单叠在同一区域，滑动时互换位置 —— 必须各自有底色，否则会互相穿透 */
.auth-pane{position:absolute;top:0;left:0;height:100%;width:50%;padding:0 42px;
  display:flex;align-items:center;justify-content:center;background:#fff;
  transition:all .7s cubic-bezier(.65,0,.35,1)}
.auth-pane form{width:100%;display:flex;flex-direction:column;text-align:center}
.auth-pane h1{font-size:1.4375rem;font-weight:700;color:var(--blue-900);letter-spacing:.5px}
.auth-sub{font-size:.75rem;color:var(--gray);margin:.4rem 0 .85rem;line-height:1.6}
.auth-signin{z-index:2}
.auth-card.right-panel-active .auth-signin{transform:translateX(100%)}
.auth-signup{opacity:0;z-index:1;pointer-events:none}
.auth-card.right-panel-active .auth-signup{
  transform:translateX(100%);opacity:1;z-index:5;pointer-events:auto;animation:authShow .7s}
@keyframes authShow{0%,49.99%{opacity:0;z-index:1}50%,100%{opacity:1;z-index:5}}

/* 输入框：浅底无边框，聚焦时白底 + 蓝色描边 */
.auth-pane input,.auth-pane select{
  width:100%;margin:.25rem 0;padding:.6rem .8rem;background:#eef2f9;
  border:1.5px solid transparent;border-radius:7px;font-size:.8125rem;color:var(--text);
  outline:none;transition:all .18s;font-family:inherit;box-shadow:none}
.auth-pane input::placeholder{color:#96a1b2}
.auth-pane input:focus,.auth-pane select:focus{
  background:#fff;border-color:var(--blue-500);box-shadow:0 0 0 3px rgba(37,99,168,.12)}

/* 验证码：输入框 + 图片一行 */
.auth-captcha{display:flex;gap:.45rem;align-items:center;margin:.25rem 0}
.auth-captcha input{margin:0;flex:1;min-width:0}
.auth-captcha img{height:38px;width:98px;flex:0 0 98px;object-fit:cover;cursor:pointer;
  border-radius:7px;border:1px solid #d1d9e6;background:#fff}

.auth-forgot{font-size:.71875rem;color:var(--gray);text-decoration:none;margin:.5rem 0 .1rem}
.auth-forgot:hover{color:var(--blue-600)}

/* 实心按钮 */
.auth-btn{border:0;border-radius:7px;padding:.62rem 2.1rem;margin-top:.7rem;cursor:pointer;
  background:linear-gradient(135deg,var(--blue-600),var(--blue-500));color:#fff;
  font-size:.84375rem;font-weight:600;letter-spacing:2px;font-family:inherit;
  box-shadow:0 5px 15px rgba(37,99,168,.32);transition:all .2s}
.auth-btn:hover{transform:translateY(-1px);box-shadow:0 9px 20px rgba(37,99,168,.42)}
.auth-btn:active{transform:translateY(0)}
.auth-pane .err{text-align:center}
.auth-pane .ok{color:var(--green);font-size:.75rem;margin-top:.45rem;text-align:center}

/* 渐变滑动面板：大圆角挂在滑动容器上，切换时整体平移 */
.auth-overlay-wrap{position:absolute;top:0;left:50%;width:50%;height:100%;overflow:hidden;z-index:100;
  border-radius:118px 0 0 118px;transition:transform .7s cubic-bezier(.65,0,.35,1)}
.auth-card.right-panel-active .auth-overlay-wrap{transform:translateX(-100%)}
.auth-overlay{position:relative;left:-100%;width:200%;height:100%;
  background:linear-gradient(135deg,var(--blue-800) 0%,var(--blue-500) 55%,var(--blue-400) 100%);
  transform:translateX(0);transition:transform .7s cubic-bezier(.65,0,.35,1)}
.auth-card.right-panel-active .auth-overlay{transform:translateX(50%)}
.auth-overlay-panel{position:absolute;top:0;height:100%;width:50%;padding:0 38px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:#fff;
  transform:translateX(0);transition:transform .7s cubic-bezier(.65,0,.35,1)}
.auth-overlay-panel h1{color:#fff;font-size:1.4375rem;font-weight:700;letter-spacing:.5px}
.auth-overlay-panel p{font-size:.75rem;line-height:1.8;margin:.7rem 0 1.25rem;opacity:.93}
.auth-overlay-panel.left{transform:translateX(-20%)}
.auth-card.right-panel-active .auth-overlay-panel.left{transform:translateX(0)}
.auth-overlay-panel.right{right:0}
.auth-card.right-panel-active .auth-overlay-panel.right{transform:translateX(20%)}
.auth-btn-ghost{border:1.5px solid rgba(255,255,255,.92);background:transparent;color:#fff;
  border-radius:7px;padding:.55rem 2.15rem;cursor:pointer;font-size:.78125rem;font-weight:600;
  letter-spacing:2px;font-family:inherit;transition:all .2s}
.auth-btn-ghost:hover{background:rgba(255,255,255,.15);border-color:#fff}

/* 移动端切换条（桌面隐藏在渐变面板上的按钮里） */
.auth-switch{display:none;align-items:center;gap:.35rem;font-size:.8125rem;
  color:rgba(255,255,255,.92);text-shadow:0 1px 6px rgba(6,20,40,.55)}
.auth-switch a{color:#fff;font-weight:700;text-decoration:underline;text-underline-offset:3px}

/* ---- 移动端：滑动面板收起，改为单卡片 + 底部切换条 ---- */
@media (max-width:760px){
  .auth-shell{width:100%;gap:.875rem}
  .auth-card{min-height:0;width:100%;border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,.22)}
  .auth-overlay-wrap{display:none}
  .auth-pane{position:static;width:100%;height:auto;padding:1.625rem 1.25rem;display:none}
  .auth-card .auth-signin{display:flex}
  .auth-card.right-panel-active .auth-signin{display:none;transform:none}
  .auth-card.right-panel-active .auth-signup{
    display:flex;transform:none;opacity:1;animation:none;pointer-events:auto}
  .auth-pane h1{font-size:1.25rem}
  .auth-sub{font-size:.75rem;margin:.4rem 0 .85rem}
  /* 16px 起，避免 iOS 聚焦时自动放大 */
  .auth-pane input,.auth-pane select{font-size:16px;padding:.7rem .85rem;min-height:44px;border-radius:8px}
  .auth-captcha img{height:44px;width:110px;flex:0 0 110px}
  .auth-btn{width:100%;padding:.8125rem;font-size:.9375rem;min-height:46px;border-radius:9px;letter-spacing:1px}
  .auth-switch{display:flex}
}
