*{box-sizing:border-box;margin:0;padding:0}
:root{--pr:#1B4F8A;--dk:#0D2D52;--ac:#E8A020;--lt:#E8F0FA;--lr:#F4F8FE;--gn:#2E7D32;--rd:#C62828;--am:#E65100;--pu:#4527A0;--gy:#546E7A;--bo:#D6E4F5;--wh:#fff;--tx:#0D2D52;--ts:#3A5A7A;--tl2:#6B8BAD;--bg:#F5F8FC}
body{font-family:system-ui,-apple-system,sans-serif;font-size:13px;background:var(--bg);color:var(--tx);min-height:100vh}
a{color:var(--pr);text-decoration:none}a:hover{text-decoration:underline}
.shell{display:flex;height:100vh;overflow:hidden}
.sidebar{width:200px;background:var(--pr);display:flex;flex-direction:column;overflow-y:auto;flex-shrink:0}
.main-area{flex:1;display:flex;flex-direction:column;overflow:hidden}
.content{flex:1;overflow-y:auto;padding:16px}
.sb-logo{padding:13px 14px;border-bottom:1px solid rgba(255,255,255,.12);display:flex;align-items:center;gap:9px;flex-shrink:0}
.sb-logo img{width:32px;height:32px;border-radius:7px;object-fit:cover;flex-shrink:0}
.sb-logo .name{font-size:13px;font-weight:700;color:#fff;line-height:1.2}
.sb-logo .url{font-size:9px;color:rgba(255,255,255,.45)}
.sb-sec{padding:8px 8px 2px}
.sb-sl{font-size:9px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:rgba(255,255,255,.35);padding:0 6px;margin-bottom:3px}
.sb-item{display:flex;align-items:center;gap:7px;padding:7px 8px;border-radius:7px;cursor:pointer;font-size:11px;color:rgba(255,255,255,.72);margin-bottom:1px;border-left:2.5px solid transparent;text-decoration:none;transition:all .1s}
.sb-item:hover{background:rgba(255,255,255,.1);color:#fff;text-decoration:none}
.sb-item.active,.sb-item[data-active]{background:rgba(255,255,255,.18);color:#fff;font-weight:600;border-left-color:rgba(255,255,255,.65)}
.sb-badge{margin-left:auto;font-size:9px;padding:1px 5px;border-radius:8px;background:var(--ac);color:var(--dk);font-weight:700}
.sb-foot{margin-top:auto;padding:10px 12px;border-top:1px solid rgba(255,255,255,.1);display:flex;align-items:center;gap:8px;flex-shrink:0}
.sb-foot .uname{font-size:11px;font-weight:600;color:#fff;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-foot .urole{font-size:9px;color:rgba(255,255,255,.45)}
.topbar{padding:10px 16px;border-bottom:1px solid var(--bo);background:#fff;display:flex;align-items:center;justify-content:space-between;flex-shrink:0;gap:10px}
.topbar-title{font-size:14px;font-weight:600;color:var(--tx)}
.topbar-right{display:flex;align-items:center;gap:8px}
.search-inp{font-size:11px;padding:5px 10px;border:1px solid var(--bo);border-radius:7px;background:var(--lr);color:var(--tx);font-family:inherit;width:180px}
.search-inp:focus{outline:none;border-color:var(--pr)}
.av{display:flex;align-items:center;justify-content:center;border-radius:50%;font-weight:700;flex-shrink:0;background:var(--lt);color:var(--pr)}
.card{background:#fff;border:1px solid var(--bo);border-radius:11px;margin-bottom:14px;overflow:hidden;box-shadow:0 1px 3px rgba(27,79,138,.05)}
.ch{padding:10px 14px;border-bottom:1px solid var(--bo);display:flex;align-items:center;justify-content:space-between;background:var(--lr)}
.ct{font-size:12px;font-weight:600;color:var(--tx)}
.cb{padding:14px}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:12px}
.g3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-bottom:12px}
.g4{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:13px}
@media(max-width:768px){
.g2,.g3,.g4{grid-template-columns:1fr}
.sidebar{display:none}
.shell{flex-direction:column}
.main-area{height:100vh}
.topbar{flex-wrap:wrap;gap:6px}
.topbar-title{font-size:13px}
.search-inp{width:120px}
.pub-hero{padding:22px 16px 20px}
.pub-hero h1{font-size:26px}
.pub-wrap{padding:12px 10px}
.pub-prog{flex-direction:column;gap:8px}
.pub-prog-icon{font-size:22px}
.login-box{width:100%;max-width:100%;padding:0 4px}
.login-logo img{width:48px;height:48px}
.login-logo h1{font-size:19px}
.apply-wrap{padding:12px 10px}
.vote-wrap{padding:12px}
.vote-card{padding:20px 16px}
.vbtn{font-size:13px;padding:12px}
.modal{max-width:100%;margin:0 10px;border-radius:10px}
.modal-b{padding:14px}
.hero{padding:14px}
.hero .g2{grid-template-columns:1fr}
.form-sec{padding:12px}
.btn-full{font-size:12px}
.stat .sv{font-size:18px}
.tbl th,.tbl td{padding:6px 5px;font-size:10px}
.ch{flex-wrap:wrap;gap:6px}
.ct{font-size:11px}
}
@media(max-width:480px){
.pub-hero h1{font-size:22px;letter-spacing:-0.5px}
.hero-btns,.btn-group{flex-direction:column}
.btn-full{max-width:100%!important}
.vote-card{padding:16px 12px}
.toast{right:10px;left:10px;max-width:none}
.pub-prog-icon{display:none}
}
.stat{background:#fff;border:1px solid var(--bo);border-radius:10px;padding:12px 13px}
.sl{font-size:10px;color:var(--tl2);margin-bottom:4px}
.sv{font-size:22px;font-weight:600}
.ss{font-size:10px;color:var(--tl2);margin-top:2px}
.row{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid #EBF3FB;font-size:11px}
.row:last-child{border-bottom:none}
.rn{flex:1;min-width:0}
.rt{font-size:11px;font-weight:500;color:var(--tx);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs{font-size:10px;color:var(--tl2);margin-top:1px}
.b{display:inline-block;font-size:10px;padding:2px 8px;border-radius:3px;font-weight:500;white-space:nowrap}
.b-blue{background:#E8F0FA;color:#1B4F8A}.b-green{background:#E8F5E9;color:#2E7D32}.b-amber{background:#FFF8E1;color:#E65100}.b-red{background:#FFEBEE;color:#C62828}.b-purple{background:#EDE7F6;color:#4527A0}.b-gray{background:#ECEFF1;color:#546E7A}.b-teal{background:#E0F2F1;color:#00695C}
.btn{font-size:11px;padding:6px 13px;border-radius:7px;border:1px solid var(--bo);background:#fff;color:var(--tx);cursor:pointer;font-family:inherit;font-weight:500;transition:all .1s;white-space:nowrap;display:inline-block;text-decoration:none}
.btn:hover{border-color:var(--pr);color:var(--pr);text-decoration:none}
.btn-p{background:var(--pr)!important;color:#fff!important;border:none!important;box-shadow:0 2px 5px rgba(27,79,138,.2)}
.btn-p:hover{background:#1560A8!important;color:#fff!important}
.btn-g{background:var(--gn);color:#fff;border:none}.btn-r{background:var(--rd);color:#fff;border:none}
.btn-full{width:100%;text-align:center;padding:9px;font-size:13px}
.btn-sm{font-size:10px;padding:4px 10px}
.btn-group{display:flex;gap:7px;flex-wrap:wrap}
.fg{margin-bottom:12px}
.fl{font-size:10px;font-weight:600;color:var(--ts);margin-bottom:3px;display:block}
.req{color:var(--rd);margin-left:2px}
.fi{width:100%;padding:7px 10px;font-size:12px;border:1.5px solid var(--bo);border-radius:7px;background:#fff;color:var(--tx);font-family:inherit;transition:border-color .1s}
.fi:focus{outline:none;border-color:var(--pr);box-shadow:0 0 0 3px rgba(27,79,138,.08)}
.fi.err{border-color:var(--rd)}
textarea.fi{resize:vertical;min-height:80px}
.ferr{font-size:10px;color:var(--rd);margin-top:3px}
.fhint{font-size:10px;color:var(--tl2);margin-top:3px}
.chk{display:flex;align-items:flex-start;gap:8px;padding:7px 0;border-bottom:1px solid #EBF3FB;cursor:pointer;font-size:11px;line-height:1.5}
.chk:last-child{border-bottom:none}
.chk input{accent-color:var(--pr);width:14px;height:14px;margin-top:2px;flex-shrink:0}
.ntc{border-radius:8px;padding:9px 12px;font-size:11px;display:flex;gap:7px;align-items:flex-start;margin-bottom:11px;line-height:1.5}
.ntc-b{background:#E8F0FA;color:#1B4F8A}.ntc-g{background:#E8F5E9;color:#2E7D32}.ntc-a{background:#FFF8E1;color:#E65100}.ntc-r{background:#FFEBEE;color:#C62828}
.hero{background:linear-gradient(135deg,var(--pr),var(--dk));border-radius:11px;padding:16px 18px;margin-bottom:14px;color:#fff}
.tbl{width:100%;border-collapse:collapse;font-size:11px}
.tbl th{text-align:left;padding:6px 8px;color:var(--tl2);font-weight:600;font-size:10px;border-bottom:1px solid var(--bo);background:var(--lr)}
.tbl td{padding:8px;border-bottom:1px solid #EBF3FB}
.tbl tr:hover td{background:var(--lr)}
.tbl-wrap{overflow-x:auto}
.sll{font-size:9px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--tl2);margin:14px 0 7px;padding-bottom:4px;border-bottom:1px solid var(--bo)}
.pub-wrap{max-width:580px;margin:0 auto;padding:20px 16px}
.pub-hero{background:linear-gradient(135deg,var(--pr),var(--dk));border-radius:14px;padding:32px 24px;text-align:center;margin-bottom:16px;color:#fff}
.pub-hero img{height:54px;border-radius:8px;margin:0 auto 14px;display:block}
.pub-hero h1{font-size:32px;font-weight:700;letter-spacing:-1px;margin-bottom:7px}
.pub-hero .tagline{font-size:12px;color:var(--ac);font-weight:600;margin-bottom:4px}
.pub-hero .sub{font-size:11px;color:rgba(255,255,255,.7);margin-bottom:20px}
.pub-prog{background:#fff;border:1px solid var(--bo);border-radius:11px;padding:14px;margin-bottom:10px;display:flex;gap:12px;align-items:flex-start;box-shadow:0 1px 3px rgba(27,79,138,.05)}
.pub-prog-icon{font-size:26px;flex-shrink:0}
.pub-prog-title{font-size:13px;font-weight:700;color:var(--tx);margin-bottom:3px}
.pub-prog-desc{font-size:11px;color:var(--tl2);margin-bottom:10px;line-height:1.5}
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;background:var(--bg)}
.login-box{width:380px;max-width:100%}
.login-logo{text-align:center;margin-bottom:20px}
.login-logo img{width:60px;height:60px;border-radius:14px;object-fit:cover;margin:0 auto 10px;display:block;background:var(--lt)}
.login-logo h1{font-size:22px;font-weight:700;color:var(--pr);margin-bottom:3px}
.login-logo p{font-size:11px;color:var(--tl2)}
.apply-wrap{max-width:680px;margin:0 auto;padding:20px 16px}
.form-sec{background:#fff;border:1px solid var(--bo);border-radius:11px;padding:16px;margin-bottom:14px}
.form-sec-title{font-size:13px;font-weight:600;color:var(--pr);margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--bo);display:flex;align-items:center;gap:7px}
.prog-bar{background:var(--bo);border-radius:9px;height:6px;margin-bottom:6px;overflow:hidden}
.prog-fill{background:var(--pr);height:100%;border-radius:9px;transition:width .3s}
.file-drop{border:1.5px dashed var(--bo);border-radius:8px;padding:20px;text-align:center;cursor:pointer;background:var(--lr);transition:all .1s}
.file-drop:hover,.file-drop.drag{border-color:var(--pr);background:var(--lt)}
.file-item{display:flex;align-items:center;gap:7px;padding:5px 8px;background:#fff;border:1px solid var(--bo);border-radius:6px;margin-bottom:4px;font-size:11px}
.file-item-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vote-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;background:var(--bg)}
.vote-box{max-width:500px;width:100%}
.vote-card{background:#fff;border:1px solid var(--bo);border-radius:14px;padding:28px;box-shadow:0 4px 16px rgba(27,79,138,.1)}
.vbtn{display:block;width:100%;padding:14px;border-radius:9px;border:none;font-size:14px;font-weight:700;cursor:pointer;font-family:inherit;margin-bottom:10px;transition:all .15s;text-align:center}
.vbtn-approve{background:#E8F5E9;color:#2E7D32}.vbtn-approve:hover{background:#2E7D32;color:#fff}
.vbtn-deny{background:#FFEBEE;color:#C62828}.vbtn-deny:hover{background:#C62828;color:#fff}
.vbtn-abstain{background:#ECEFF1;color:#546E7A}.vbtn-abstain:hover{background:#546E7A;color:#fff}
.vbtn-recommend{background:#E8F5E9;color:#2E7D32}.vbtn-recommend:hover{background:#2E7D32;color:#fff}
.vbtn-notrecommend{background:#FFEBEE;color:#C62828}.vbtn-notrecommend:hover{background:#C62828;color:#fff}
.toast{position:fixed;bottom:20px;right:20px;padding:10px 16px;border-radius:8px;font-size:12px;font-weight:500;z-index:9999;animation:slideIn .2s ease;max-width:320px}
.toast-success{background:var(--gn);color:#fff}.toast-error{background:var(--rd);color:#fff}.toast-info{background:var(--pr);color:#fff}
@keyframes slideIn{from{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px}
.modal{background:#fff;border-radius:14px;width:100%;max-width:540px;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.2)}
.modal-h{padding:16px 20px;border-bottom:1px solid var(--bo);display:flex;align-items:center;justify-content:space-between}
.modal-t{font-size:14px;font-weight:600;color:var(--tx)}
.modal-x{background:none;border:none;font-size:22px;cursor:pointer;color:var(--tl2);line-height:1;padding:0}
.modal-b{padding:20px}
.modal-f{padding:14px 20px;border-top:1px solid var(--bo);display:flex;gap:8px;justify-content:flex-end}
.spinner{width:32px;height:32px;border:3px solid var(--bo);border-top-color:var(--pr);border-radius:50%;animation:spin .8s linear infinite;margin:20px auto}
@keyframes spin{to{transform:rotate(360deg)}}
.step{display:flex;gap:10px}
.step-nc{display:flex;flex-direction:column;align-items:center;width:24px;flex-shrink:0}
.step-n{width:22px;height:22px;border-radius:50%;background:var(--lt);border:1.5px solid var(--pr);display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:var(--pr)}
.step-l{width:1.5px;flex:1;background:var(--bo);margin:2px 0;min-height:12px}
.step-b{flex:1;padding-bottom:14px}
.step-t{font-size:11px;font-weight:600;margin-bottom:2px}
.step-d{font-size:10px;color:var(--tl2);margin-bottom:3px;line-height:1.4}
.step-a{font-size:10px;color:var(--ts);margin-bottom:2px;display:flex;gap:4px}
.step-a::before{content:'⚡';flex-shrink:0}
