*{box-sizing:border-box}:root{color-scheme:dark;--bg:#070a0f;--panel:rgba(18,24,34,.78);--panel2:rgba(25,34,47,.9);--border:rgba(255,255,255,.09);--border-hover:rgba(111,168,255,.48);--text:#f1f5f9;--muted:#8d9aaa;--accent:#6fa8ff;--accent-soft:rgba(111,168,255,.14);--success:#61d095;--danger:#df7777;--warn:#e5b567}html{min-height:100%;background:var(--bg)}button,input,select,textarea,pre,code{font-family:"Microsoft YaHei","微软雅黑","PingFang SC",Arial,sans-serif}body{min-height:100vh;margin:0;color:var(--text);font-family:"Microsoft YaHei","微软雅黑","PingFang SC",Arial,sans-serif;background:radial-gradient(circle at 15% 10%,rgba(46,104,194,.22),transparent 35%),radial-gradient(circle at 90% 20%,rgba(86,63,170,.16),transparent 32%),linear-gradient(145deg,#070a0f 0%,#0b1018 48%,#080b11 100%);overflow-x:hidden}body:before{content:"";position:fixed;inset:0;pointer-events:none;opacity:.18;background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);background-size:32px 32px;mask-image:linear-gradient(to bottom,#000,transparent 85%)}a{color:inherit}.page{position:relative;width:min(100% - 32px,1120px);margin:0 auto;padding:42px 0 56px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:44px}.brand{display:flex;align-items:center;gap:12px;text-decoration:none}.brand-mark{display:grid;width:40px;height:40px;place-items:center;border:1px solid var(--border);border-radius:13px;background:linear-gradient(145deg,rgba(111,168,255,.22),rgba(255,255,255,.04));box-shadow:inset 0 1px 0 rgba(255,255,255,.08);font-weight:800}.brand-text{font-size:13px;font-weight:650;letter-spacing:.08em;color:#dbe7f5}.top-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end}.pill,.button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:36px;padding:8px 12px;border:1px solid var(--border);border-radius:999px;background:rgba(255,255,255,.035);color:#d9e3ee;font:inherit;font-size:12px;text-decoration:none;cursor:pointer}.button:hover,.pill:hover{border-color:var(--border-hover);background:var(--accent-soft)}.button.primary{background:rgba(111,168,255,.16);border-color:rgba(111,168,255,.36)}.button.danger{border-color:rgba(223,119,119,.28);color:#f0b5b5}.button.small{min-height:30px;padding:5px 10px;font-size:11px}.hero{margin-bottom:34px}.eyebrow{margin:0 0 12px;color:var(--accent);font-size:12px;font-weight:700;letter-spacing:.18em;text-transform:uppercase}h1{margin:0;font-size:clamp(34px,6vw,60px);font-weight:720;line-height:1.05;letter-spacing:-.04em}.hero-description{max-width:700px;margin:18px 0 0;color:var(--muted);font-size:14px;line-height:1.8}.summary{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:26px 0}.summary-card,.panel{border:1px solid var(--border);border-radius:18px;background:var(--panel);box-shadow:0 20px 55px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.04);backdrop-filter:blur(16px)}.summary-card{padding:17px}.summary-card b{display:block;font-size:22px}.summary-card span{display:block;margin-top:6px;color:var(--muted);font-size:11px}.section-head{display:flex;align-items:end;justify-content:space-between;gap:20px;margin:30px 0 16px}.section-title{margin:0;font-size:14px;font-weight:650;letter-spacing:.04em}.section-count{color:var(--muted);font-size:12px}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.project-card{position:relative;display:flex;min-height:230px;padding:26px;color:inherit;text-decoration:none;border:1px solid var(--border);border-radius:22px;background:linear-gradient(145deg,rgba(255,255,255,.055),transparent 55%),var(--panel);box-shadow:0 20px 55px rgba(0,0,0,.22),inset 0 1px 0 rgba(255,255,255,.055);transition:.18s;overflow:hidden}.project-card:hover{transform:translateY(-3px);border-color:var(--border-hover);background:linear-gradient(145deg,rgba(255,255,255,.075),transparent 58%),var(--panel2)}.project-card.disabled{opacity:.62;cursor:not-allowed;transform:none}.card-content{display:flex;width:100%;flex-direction:column}.card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.project-icon{display:grid;width:50px;height:50px;place-items:center;border:1px solid rgba(111,168,255,.25);border-radius:16px;background:var(--accent-soft);color:var(--accent);font-size:18px;font-weight:800}.status-dot{width:8px;height:8px;border-radius:50%;background:#718096}.status-dot.online{background:var(--success);box-shadow:0 0 14px rgba(97,208,149,.7)}.project-title-row{display:flex;align-items:center;gap:10px;margin:auto 0 7px;padding-top:34px;flex-wrap:wrap}.project-name{margin:0;font-size:24px}.badge{display:inline-flex;align-items:center;padding:4px 8px;border:1px solid var(--border);border-radius:999px;color:#b9c6d4;font-size:10px}.badge.good{border-color:rgba(97,208,149,.3);color:#9ee2be}.badge.bad{border-color:rgba(223,119,119,.28);color:#e6a3a3}.project-description{margin:0;color:var(--muted);font-size:13px;line-height:1.7}.project-meta{display:flex;align-items:center;gap:8px;margin-top:16px;color:#aebaca;font-size:11px;flex-wrap:wrap}.panel{padding:22px;margin:14px 0}.panel h2,.panel h3{margin:0 0 16px}.muted{color:var(--muted)}.notice{padding:12px 14px;border:1px solid rgba(229,181,103,.25);border-radius:12px;background:rgba(229,181,103,.07);color:#e3c58e;font-size:12px;line-height:1.6}.error{padding:12px 14px;border:1px solid rgba(223,119,119,.3);border-radius:12px;background:rgba(223,119,119,.08);color:#f0b5b5;font-size:12px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.field{display:flex;flex-direction:column;gap:7px}.field.full{grid-column:1/-1}.field label{color:#b9c6d4;font-size:11px}.field input,.field select,.field textarea{width:100%;min-height:40px;padding:9px 11px;border:1px solid var(--border);border-radius:11px;background:rgba(4,8,14,.55);color:var(--text);font:inherit;font-size:13px;outline:none}.field textarea{min-height:90px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--border-hover)}.actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:14px}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:14px}table{width:100%;border-collapse:collapse;min-width:760px;font-size:12px}th,td{padding:12px 13px;text-align:left;border-bottom:1px solid rgba(255,255,255,.055);vertical-align:top}th{color:#aebaca;font-weight:600;background:rgba(255,255,255,.025)}td{color:#d9e3ee}tr:last-child td{border-bottom:0}.code-output{white-space:pre-wrap;word-break:break-word;max-height:480px;overflow:auto;padding:14px;border:1px solid var(--border);border-radius:12px;background:#05080d;color:#c9d4df;font:11px/1.6 "Microsoft YaHei","微软雅黑",sans-serif}.login-page{overflow:hidden}.login-shell{position:relative;isolation:isolate;display:grid;min-height:100vh;place-items:center;padding:32px 20px}.login-shell:before{content:"";position:absolute;z-index:-3;width:560px;height:560px;border-radius:50%;background:radial-gradient(circle,rgba(77,133,220,.20),rgba(77,133,220,.06) 38%,transparent 70%);filter:blur(8px);transform:translate(-34%,-28%)}.login-shell:after{content:"";position:absolute;z-index:-3;width:520px;height:520px;border-radius:50%;background:radial-gradient(circle,rgba(111,82,188,.17),rgba(111,82,188,.04) 42%,transparent 72%);filter:blur(12px);transform:translate(38%,32%)}.login-ambient{position:absolute;z-index:-2;border:1px solid rgba(255,255,255,.035);border-radius:50%;pointer-events:none}.login-ambient-one{width:620px;height:620px;transform:translate(-38%,-25%)}.login-ambient-two{width:470px;height:470px;transform:translate(42%,33%)}.login-card{position:relative;width:min(100%,440px);padding:34px 34px 26px;border:1px solid rgba(255,255,255,.10);border-radius:28px;background:linear-gradient(155deg,rgba(25,34,47,.88),rgba(11,16,24,.88));box-shadow:0 32px 100px rgba(0,0,0,.46),inset 0 1px 0 rgba(255,255,255,.07);backdrop-filter:blur(24px);overflow:hidden}.login-card:before{content:"";position:absolute;inset:0 0 auto;height:1px;background:linear-gradient(90deg,transparent,rgba(137,183,255,.5),transparent)}.login-brand{display:flex;align-items:center;gap:13px}.login-brand-mark{display:grid;width:46px;height:46px;place-items:center;border:1px solid rgba(111,168,255,.28);border-radius:15px;background:linear-gradient(145deg,rgba(111,168,255,.20),rgba(255,255,255,.035));box-shadow:inset 0 1px 0 rgba(255,255,255,.09),0 8px 26px rgba(24,75,145,.15)}.login-brand-core{display:grid;width:27px;height:27px;place-items:center;border-radius:9px;background:linear-gradient(145deg,#7eb4ff,#5f8fdb);color:#07111f;font-size:14px;font-weight:900;box-shadow:0 4px 14px rgba(86,145,230,.28)}.login-brand-copy{display:flex;min-width:0;flex-direction:column;gap:4px}.login-brand-name{color:#dce8f6;font-size:12px;font-weight:720;letter-spacing:.14em}.login-brand-version{color:#657488;font-size:10px;letter-spacing:.04em}.login-heading{margin:34px 0 26px}.login-kicker{margin:0 0 11px;color:#729fe0;font-size:10px;font-weight:760;letter-spacing:.22em}.login-card h1{margin:0;font-size:36px;line-height:1.1;letter-spacing:-.045em}.login-subtitle{margin:10px 0 0;color:#7f8da0;font-size:13px}.login-error{margin:0 0 16px}.login-form{display:flex;flex-direction:column;gap:15px}.login-field{gap:8px}.login-field label{padding-left:2px;color:#aab7c8;font-size:11px;font-weight:600;letter-spacing:.02em}.login-field input{min-height:48px;padding:11px 14px;border-radius:14px;border-color:rgba(255,255,255,.085);background:rgba(3,8,14,.54);box-shadow:inset 0 1px 0 rgba(255,255,255,.025);transition:border-color .18s,box-shadow .18s,background .18s}.login-field input:hover{border-color:rgba(255,255,255,.14)}.login-field input:focus{border-color:rgba(111,168,255,.58);background:rgba(5,11,19,.68);box-shadow:0 0 0 3px rgba(111,168,255,.09)}.login-submit{width:100%;min-height:50px;margin-top:5px;padding:10px 16px;border-radius:14px!important;background:linear-gradient(135deg,rgba(93,151,236,.29),rgba(86,118,190,.20))!important;border-color:rgba(116,171,250,.38)!important;font-size:13px!important;font-weight:680;letter-spacing:.02em;box-shadow:0 10px 28px rgba(23,68,130,.16);transition:transform .18s,border-color .18s,background .18s}.login-submit:hover{transform:translateY(-1px);border-color:rgba(133,185,255,.58)!important;background:linear-gradient(135deg,rgba(101,160,245,.36),rgba(91,126,203,.25))!important}.login-submit:active{transform:translateY(0)}.login-submit-arrow{margin-left:auto;color:#9bc2fb;font-size:17px;line-height:1}.login-footer{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:23px;padding-top:19px;border-top:1px solid rgba(255,255,255,.055);color:#566477;font-size:9px;font-weight:700;letter-spacing:.16em}.login-status-dot{width:5px;height:5px;border-radius:50%;background:#62c993;box-shadow:0 0 10px rgba(98,201,147,.55)}.footer{display:flex;justify-content:space-between;gap:20px;margin-top:38px;padding-top:22px;border-top:1px solid rgba(255,255,255,.055);color:#667385;font-size:11px}.tabs{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0 18px}.ops-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.ops-card{padding:14px;border:1px solid var(--border);border-radius:14px;background:rgba(255,255,255,.025)}@media(max-width:760px){.login-shell{padding:20px 14px}.login-card{padding:28px 22px 22px;border-radius:24px}.login-card h1{font-size:32px}.login-heading{margin:30px 0 24px}.login-ambient-one{width:460px;height:460px}.login-ambient-two{width:360px;height:360px}.page{width:min(100% - 22px,1120px);padding-top:24px}.brand-text{display:none}.project-grid,.summary,.form-grid,.ops-grid{grid-template-columns:1fr}.topbar{align-items:flex-start}.top-actions{max-width:65%}h1{font-size:42px}.footer{flex-direction:column;gap:8px}.panel{padding:16px}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}

/* Project Hub R5：管理页面与统一身份顶栏 */
.topbar-left{display:flex;align-items:center;gap:14px;min-width:0}.home-link{display:inline-flex;align-items:center;gap:7px;min-height:34px;padding:7px 10px;border:1px solid rgba(255,255,255,.07);border-radius:11px;color:#aebdd0;font-size:11px;font-weight:620;text-decoration:none;background:rgba(255,255,255,.025);transition:border-color .18s,background .18s,color .18s}.home-link:hover{color:#e4edf8;border-color:rgba(111,168,255,.28);background:rgba(111,168,255,.07)}.user-chip{display:flex;align-items:center;gap:9px;min-height:38px;padding:5px 10px 5px 6px;border:1px solid rgba(255,255,255,.075);border-radius:13px;background:rgba(255,255,255,.028);text-decoration:none;transition:border-color .18s,background .18s}.user-chip:hover{border-color:rgba(111,168,255,.27);background:rgba(111,168,255,.06)}.user-avatar,.account-avatar{display:grid;place-items:center;flex:none;width:28px;height:28px;border-radius:9px;background:linear-gradient(145deg,rgba(111,168,255,.30),rgba(88,113,177,.20));border:1px solid rgba(126,180,255,.25);color:#d9e9ff;font-weight:800;font-size:12px}.user-chip-copy{display:flex;flex-direction:column;gap:1px;min-width:0}.user-chip-copy b{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#dbe6f2;font-size:11px;font-weight:660}.user-chip-copy small{color:#718094;font-size:9px}.nav-button{background:rgba(255,255,255,.02)}
.admin-hero{padding-bottom:8px}.admin-panel{position:relative;overflow:hidden}.admin-panel:before{content:"";position:absolute;inset:0 0 auto;height:1px;background:linear-gradient(90deg,rgba(111,168,255,.22),transparent 62%);pointer-events:none}.section-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:17px}.section-heading h2{margin:2px 0 0}.section-kicker{margin:0;color:#6f8db6;font-size:9px;font-weight:780;letter-spacing:.17em}.section-note{display:inline-flex;align-items:center;min-height:27px;padding:5px 9px;border:1px solid rgba(255,255,255,.065);border-radius:999px;color:#738297;background:rgba(255,255,255,.02);font-size:9px}.field label small{margin-left:5px;color:#64758c;font-size:9px;font-weight:500}.field-help{margin-top:-2px;color:#66778b;font-size:9px;line-height:1.4}.full-actions{grid-column:1/-1}.admin-table table{min-width:860px}.admin-table code{color:#a9c9f7;font-size:11px}.table-identity{display:flex;align-items:center;gap:10px}.table-identity span:last-child{display:flex;flex-direction:column;gap:3px}.table-identity small{color:#69798e}.project-mini-icon{display:grid;width:30px;height:30px;place-items:center;border-radius:9px;border:1px solid rgba(111,168,255,.18);background:rgba(111,168,255,.08);color:#b9d6ff;font-weight:800}.status-badge,.role-badge{display:inline-flex;align-items:center;width:max-content;padding:4px 8px;border:1px solid rgba(255,255,255,.08);border-radius:999px;color:#9ba9ba;background:rgba(255,255,255,.025);font-size:9px;font-weight:650;white-space:nowrap}.status-badge.enabled{border-color:rgba(97,208,149,.27);background:rgba(97,208,149,.07);color:#9ee2be}.status-badge.disabled{border-color:rgba(223,119,119,.22);background:rgba(223,119,119,.06);color:#d79b9b}.status-badge.warning{margin-left:5px;border-color:rgba(229,181,103,.25);background:rgba(229,181,103,.06);color:#e0c18d}.role-badge.admin{border-color:rgba(111,168,255,.26);background:rgba(111,168,255,.07);color:#aacbfa}.empty-state{padding:28px!important;text-align:center!important;color:#68788d!important}.hash-cell{max-width:260px;word-break:break-all;color:#90a5bf}.admin-summary .summary-card span{color:#7f8da0}.ops-title{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.ops-title b{font-size:12px}.ops-title small{color:#5f7086;font:9px/1.3 "Microsoft YaHei","微软雅黑",sans-serif}.ops-description{min-height:34px;margin:8px 0 12px;color:#75859a;font-size:10px;line-height:1.55}.danger-confirm{gap:6px}.soft-notice{border-color:rgba(111,168,255,.18);background:rgba(111,168,255,.05);color:#9db5d2}
.admin-two-column{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);gap:14px}.account-create-panel,.account-summary-panel{margin-top:14px}.compact-form{grid-template-columns:repeat(2,minmax(0,1fr))}.account-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:14px}.account-stats>div{display:flex;flex-direction:column;gap:4px;padding:13px;border:1px solid rgba(255,255,255,.06);border-radius:13px;background:rgba(255,255,255,.022)}.account-stats b{font-size:23px;letter-spacing:-.03em}.account-stats span{color:#6e7e92;font-size:9px}.account-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.account-card{padding:16px;border:1px solid rgba(255,255,255,.075);border-radius:17px;background:linear-gradient(155deg,rgba(255,255,255,.035),rgba(255,255,255,.014));box-shadow:inset 0 1px 0 rgba(255,255,255,.025)}.account-card.is-disabled{opacity:.72}.account-card-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:11px}.account-card .account-avatar{width:38px;height:38px;border-radius:12px;font-size:14px}.account-name{min-width:0}.account-name h3{margin:0 0 3px;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.account-name p{margin:0;color:#65768b;font-size:9px}.account-badges{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.account-info-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:14px 0}.account-info-row>span{display:flex;min-width:0;flex-direction:column;gap:3px;padding:9px 10px;border-radius:11px;background:rgba(0,0,0,.13)}.account-info-row small{color:#65768a;font-size:8px}.account-info-row b{overflow:hidden;text-overflow:ellipsis;color:#b7c4d3;font-size:9px;font-weight:560;white-space:nowrap}.account-controls{display:flex;flex-direction:column;gap:9px;padding-top:12px;border-top:1px solid rgba(255,255,255,.055)}.inline-control{display:flex;flex-direction:column;gap:6px}.inline-control>label{color:#75869b;font-size:9px}.control-row{display:flex;align-items:center;gap:6px}.control-row>span{flex:none;color:#65758a;font-size:9px}.control-row input,.control-row select{min-width:0;min-height:36px;padding:7px 9px;border:1px solid var(--border);border-radius:10px;background:rgba(4,8,14,.55);color:var(--text);font:inherit;font-size:10px;outline:none}.validity-control .control-row input{width:125px}.password-control .control-row input{flex:1}.account-state-form{display:flex;justify-content:flex-end}.grant-form{display:flex;flex-direction:column;gap:13px}.grant-section{padding:15px;border:1px solid rgba(255,255,255,.06);border-radius:15px;background:rgba(255,255,255,.016)}.grant-section h3{margin:0 0 13px;color:#aab9ca;font-size:11px}.time-pair .control-row input{width:100%}.permission-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.permission-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px;border:1px solid rgba(255,255,255,.055);border-radius:12px;background:rgba(0,0,0,.11)}.permission-item>span{display:flex;min-width:0;flex-direction:column;gap:3px}.permission-item b{color:#b7c5d5;font-size:10px}.permission-item small{color:#65768b;font-size:8px;line-height:1.35}.permission-item select{flex:none;width:78px;min-height:34px;padding:6px 8px;border:1px solid var(--border);border-radius:9px;background:#080d14;color:var(--text);font-size:9px}.permission-tags{display:flex;gap:4px;flex-wrap:wrap}.permission-tags span{padding:3px 6px;border:1px solid rgba(111,168,255,.16);border-radius:7px;background:rgba(111,168,255,.05);color:#9dbce7;font-size:8px}
@media(max-width:900px){.admin-two-column,.account-grid{grid-template-columns:1fr}.account-info-row{grid-template-columns:1fr 1fr}.topbar{gap:12px}.topbar-left{flex-wrap:wrap}.top-actions{max-width:none}}
@media(max-width:760px){.home-link span:last-child{display:none}.home-link{padding:7px 9px}.user-chip-copy b{max-width:118px}.nav-button{display:none}.account-card-head{grid-template-columns:auto minmax(0,1fr)}.account-badges{grid-column:1/-1;flex-direction:row;align-items:center}.account-info-row,.permission-grid,.compact-form{grid-template-columns:1fr}.control-row{flex-wrap:wrap}.validity-control .control-row input{flex:1;min-width:120px;width:auto}.password-control .control-row input{min-width:170px}.account-state-form{justify-content:stretch}.account-state-form .button{width:100%}.section-heading{align-items:center}.section-note{display:none}}

/* Project Hub R6：操作日志，仅展示 Hub 自身数据库审计事件。 */
.log-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.log-live-state{display:inline-flex;align-items:center;gap:8px;margin-bottom:9px;padding:7px 10px;border:1px solid rgba(97,208,149,.16);border-radius:999px;background:rgba(97,208,149,.045);color:#88bda1;font-size:9px;font-weight:650;letter-spacing:.06em}.log-panel{padding:0;overflow:hidden}.log-toolbar{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:16px 18px;border-bottom:1px solid rgba(255,255,255,.06);background:rgba(255,255,255,.017)}.log-toolbar-copy{display:flex;min-width:0;flex-direction:column;gap:4px}.log-toolbar-copy b{font-size:12px}.log-toolbar-copy small{color:#68788d;font-size:9px}.log-toolbar-actions{display:flex;align-items:center;gap:7px}.log-new-button{border-color:rgba(111,168,255,.24)!important;background:rgba(111,168,255,.07)!important;color:#a9c9f5!important}.log-list{height:min(62vh,620px);min-height:360px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}.log-empty{display:grid;min-height:360px;place-items:center;color:#617186;font-size:11px}.log-row{display:grid;grid-template-columns:142px minmax(0,1fr);gap:16px;padding:14px 18px;border-bottom:1px solid rgba(255,255,255,.045);background:rgba(255,255,255,.006)}.log-row:hover{background:rgba(255,255,255,.016)}.log-row.level-warn{box-shadow:inset 2px 0 0 rgba(229,181,103,.42)}.log-row.level-error{box-shadow:inset 2px 0 0 rgba(223,119,119,.50)}.log-row-meta{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;padding-top:2px}.log-row-meta time{color:#6f7f93;font:9px/1.45 "Microsoft YaHei","微软雅黑",sans-serif}.log-level,.log-result{display:inline-flex;align-items:center;width:max-content;border:1px solid rgba(255,255,255,.07);border-radius:999px;background:rgba(255,255,255,.025);font-size:8px;font-weight:700;white-space:nowrap}.log-level{padding:3px 6px}.log-result{padding:4px 7px}.log-level.info,.log-result.info{border-color:rgba(111,168,255,.16);color:#93b9ed;background:rgba(111,168,255,.05)}.log-level.warn,.log-result.warn{border-color:rgba(229,181,103,.22);color:#d4b77e;background:rgba(229,181,103,.05)}.log-level.error,.log-result.error{border-color:rgba(223,119,119,.23);color:#d79797;background:rgba(223,119,119,.055)}.log-row-body{min-width:0}.log-row-title{display:flex;align-items:center;gap:9px}.log-row-title b{min-width:0;overflow:hidden;text-overflow:ellipsis;color:#c8d4e3;font-size:11px;font-weight:650;white-space:nowrap}.log-row-context{display:flex;gap:12px;flex-wrap:wrap;margin-top:6px;color:#64758a;font-size:9px}.log-details{margin-top:8px}.log-details summary{width:max-content;cursor:pointer;color:#708aab;font-size:9px;user-select:none}.log-details pre{max-height:220px;margin:8px 0 0;padding:10px 12px;overflow:auto;border:1px solid rgba(255,255,255,.055);border-radius:10px;background:rgba(0,0,0,.16);color:#8ea0b5;font:9px/1.55 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap;word-break:break-word}.log-footer-status{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:11px 18px;border-top:1px solid rgba(255,255,255,.05);color:#5e6f83;background:rgba(0,0,0,.08);font-size:8px}.log-nav-button{border-color:rgba(111,168,255,.11)}
@media(max-width:760px){.log-nav-button{display:inline-flex}.log-hero{align-items:flex-start;flex-direction:column}.log-live-state{margin:0}.log-toolbar{align-items:flex-start;flex-direction:column}.log-toolbar-actions{width:100%}.log-toolbar-actions .button{flex:1}.log-list{height:64vh;min-height:380px}.log-row{grid-template-columns:1fr;gap:7px;padding:13px 14px}.log-row-meta{align-items:center}.log-row-context{gap:7px 10px}.log-footer-status{align-items:flex-start;flex-direction:column;gap:4px}}

/* Project Hub R8：账号/授权/项目登记对齐、日志统一活动流、发布上传状态。 */
.button.ghost{background:rgba(255,255,255,.018)}
.form-actions-right{grid-column:1/-1;justify-content:flex-end;width:100%;padding-top:2px}
.form-actions-right .button{min-width:128px}
.hidden-form{display:none!important}

/* 现有账号：新密码输入框独占一行，重置/禁用按钮在其下方等宽并排。 */
.account-security-block{display:flex;flex-direction:column;gap:7px}
.account-security-block>label{color:#75869b;font-size:10px;font-weight:600}
.password-reset-form{display:flex;flex-direction:column;gap:7px}
.account-new-password{width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--border);border-radius:10px;background:rgba(4,8,14,.55);color:var(--text);font:inherit;font-size:11px;outline:none}
.account-new-password:focus{border-color:var(--border-hover)}
.account-security-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;width:100%}
.account-security-button{width:100%;min-height:40px;border-radius:10px;font-size:12px;font-weight:680}
.validity-control .control-row{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto;align-items:center}
.validity-control .control-row input{width:100%}

/* 项目授权：权限标签提高字号和视觉权重，当前授权按项目分组。 */
.permission-item{min-height:64px;padding:12px 13px}
.permission-item b{font-size:13px;font-weight:720;color:#d8e3f0}
.permission-item small{font-size:9px;line-height:1.45;color:#76879c}
.permission-item select{width:92px;min-height:38px;font-size:11px}
.permission-tags{gap:6px}
.permission-tags span{padding:6px 10px;border-radius:8px;font-size:12px;font-weight:720;letter-spacing:.01em}
.permission-tags-strong span{border-color:rgba(111,168,255,.25);background:rgba(111,168,255,.09);color:#b5d2fa}
.permission-tags-strong .muted-tag{border-color:rgba(255,255,255,.08);background:rgba(255,255,255,.025);color:#77879a}
.grant-save-actions{margin-top:1px;padding-right:0}
.grant-view-tools{display:flex;align-items:center;gap:10px}
.grant-view-tools select{min-height:34px;padding:6px 10px;border:1px solid var(--border);border-radius:9px;background:#080d14;color:var(--text);font-size:11px}
.grant-project-list{display:flex;flex-direction:column;gap:12px}
.grant-project-card{overflow:hidden;border:1px solid rgba(255,255,255,.07);border-radius:15px;background:rgba(255,255,255,.014)}
.grant-project-card[hidden]{display:none}
.grant-project-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 14px;border-bottom:1px solid rgba(255,255,255,.055);background:rgba(255,255,255,.018)}
.grant-project-head>div{display:flex;align-items:center;gap:10px}
.grant-project-head h3{margin:0 0 2px;font-size:13px}
.grant-project-head small{color:#66778c;font-size:9px}
.grant-count-badge{padding:5px 9px;border:1px solid rgba(111,168,255,.17);border-radius:999px;color:#91b6e8;background:rgba(111,168,255,.05);font-size:9px;font-weight:650;white-space:nowrap}
.grant-user-list{display:flex;flex-direction:column}
.grant-user-row{display:grid;grid-template-columns:minmax(180px,.9fr) minmax(230px,1.1fr) minmax(260px,1.4fr);align-items:center;gap:14px;padding:13px 14px;border-bottom:1px solid rgba(255,255,255,.045)}
.grant-user-row:last-child{border-bottom:0}
.grant-user-identity{display:flex;min-width:0;flex-direction:column;gap:7px}
.grant-user-identity>b{overflow:hidden;text-overflow:ellipsis;font-size:11px;white-space:nowrap}
.grant-user-identity>div{display:flex;gap:6px;flex-wrap:wrap}
.grant-time{display:flex;min-width:0;flex-direction:column;gap:3px}
.grant-time small{color:#66778c;font-size:8px}
.grant-time b{font-size:10px;color:#bdc9d8}
.grant-time span{color:#6f8094;font-size:9px}

/* 已登记项目：统一每行、每个控件的垂直高度。 */
.registered-project-table table{table-layout:fixed;min-width:900px}
.registered-project-table th,.registered-project-table td{height:64px;padding:10px 13px;vertical-align:middle}
.registered-project-identity{min-height:40px}
.table-code-chip,.table-cell-value{display:inline-flex;align-items:center;min-height:38px;padding:6px 9px;border:1px solid rgba(255,255,255,.055);border-radius:9px;background:rgba(0,0,0,.11);font-size:10px}
.table-code-chip{font-family:"Microsoft YaHei","微软雅黑",sans-serif;color:#a9bdd6}
.project-status-cell{display:flex;min-height:38px;align-items:center;gap:5px;flex-wrap:wrap}
.project-status-cell .status-badge.warning{margin-left:0}
.project-table-actions{display:flex;min-height:40px;align-items:center}
.table-action-button{min-width:96px;min-height:38px;border-radius:10px;font-size:11px;font-weight:650}

/* 项目运维：操作名称和说明增大，按钮更明确。 */
.ops-grid{gap:12px}
.ops-card{min-height:100%;padding:15px;border:1px solid rgba(255,255,255,.07);border-radius:14px;background:rgba(255,255,255,.015)}
.ops-title{align-items:center}
.ops-title b{font-size:14px;font-weight:740;color:#dbe6f2}
.ops-title small{font-size:9px;color:#607187}
.ops-description{min-height:44px;margin:9px 0 13px;color:#8798ac;font-size:12px;line-height:1.6}
.ops-card>.button{min-height:38px;min-width:88px;font-size:12px;font-weight:650;border-radius:10px}

/* 发布上传：在当前页面显示验证阶段和错误，不再跳 raw JSON。 */
.package-upload-form .actions{grid-column:1/-1}
.upload-status{grid-column:1/-1;padding:10px 12px;border:1px solid rgba(111,168,255,.18);border-radius:10px;background:rgba(111,168,255,.05);color:#a9c4e5;font-size:11px;line-height:1.55}
.upload-status.error{border-color:rgba(223,119,119,.28);background:rgba(223,119,119,.07);color:#e6a7a7}
.upload-status.success{border-color:rgba(97,208,149,.26);background:rgba(97,208,149,.06);color:#9eddbd}

/* 操作日志：对齐 通用项目 的统一活动流布局。 */
.log-panel{padding:0;overflow:hidden}
.log-panel-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:17px 18px 14px;border-bottom:1px solid rgba(255,255,255,.055)}
.log-panel-head h2{margin:2px 0 4px;font-size:15px}
.log-panel-head p{margin:0;color:#718297;font-size:10px;line-height:1.55}
.log-filter-grid{display:grid;grid-template-columns:minmax(240px,1.6fr) repeat(3,minmax(120px,.75fr)) auto;align-items:end;gap:9px;padding:13px 18px;border-bottom:1px solid rgba(255,255,255,.05);background:rgba(0,0,0,.08)}
.log-filter-grid label{display:flex;min-width:0;flex-direction:column;gap:6px;color:#77899f;font-size:9px;font-weight:600}
.log-filter-grid input,.log-filter-grid select{width:100%;min-height:37px;padding:7px 9px;border:1px solid var(--border);border-radius:9px;background:#080d14;color:var(--text);font:inherit;font-size:10px;outline:none}
.log-filter-grid input:focus,.log-filter-grid select:focus{border-color:var(--border-hover)}
.log-filter-actions{display:flex;gap:6px}
.log-filter-actions .button{min-height:37px;border-radius:9px;white-space:nowrap}
.log-view-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:11px 18px;border-bottom:1px solid rgba(255,255,255,.05);background:rgba(255,255,255,.012)}
.log-view-summary{display:flex;align-items:center;gap:10px}
.log-view-summary strong{font-size:11px}
.log-view-summary span{color:#708196;font-size:9px}
.log-view-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}
.log-autoscroll{display:inline-flex;align-items:center;gap:6px;color:#708196;font-size:9px;white-space:nowrap}
.log-autoscroll input{accent-color:#6fa8ff}
.unified-activity-feed{min-height:360px}
.hub-log-feed{height:min(62vh,620px);overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}
.activity-empty{display:grid;min-height:360px;place-items:center;color:#617186;font-size:11px}
.hub-activity-row{display:grid;grid-template-columns:145px minmax(0,1fr) auto;align-items:center;gap:16px;padding:13px 18px;border-bottom:1px solid rgba(255,255,255,.045);background:rgba(255,255,255,.006)}
.hub-activity-row:hover{background:rgba(255,255,255,.017)}
.hub-activity-row.level-warn{box-shadow:inset 2px 0 0 rgba(229,181,103,.42)}
.hub-activity-row.level-error{box-shadow:inset 2px 0 0 rgba(223,119,119,.50)}
.activity-time{color:#718196;font:9px/1.45 "Microsoft YaHei","微软雅黑",sans-serif}
.activity-main{min-width:0}
.activity-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:5px}
.activity-meta span{display:inline-flex;align-items:center;padding:3px 6px;border:1px solid rgba(255,255,255,.065);border-radius:999px;background:rgba(255,255,255,.022);color:#8394aa;font-size:8px;font-weight:650}
.activity-meta .activity-result.info{border-color:rgba(97,208,149,.18);color:#91cfaf;background:rgba(97,208,149,.045)}
.activity-meta .activity-result.warn{border-color:rgba(229,181,103,.22);color:#d4b77e;background:rgba(229,181,103,.05)}
.activity-meta .activity-result.error{border-color:rgba(223,119,119,.23);color:#d79797;background:rgba(223,119,119,.055)}
.activity-title{display:block;overflow:hidden;text-overflow:ellipsis;color:#d0dbe8;font-size:12px;font-weight:680;white-space:nowrap}
.activity-subline{display:block;margin-top:4px;overflow:hidden;text-overflow:ellipsis;color:#697b91;font-size:9px;white-space:nowrap}
.activity-actions{display:flex;align-items:center;justify-content:flex-end}
.activity-detail-button{min-height:30px;padding:5px 9px;border-radius:8px;font-size:9px}
.activity-detail{grid-column:2/4;margin-top:-3px;padding:0 0 4px}
.activity-detail[hidden]{display:none}
.activity-detail pre{max-height:240px;margin:0;padding:10px 12px;overflow:auto;border:1px solid rgba(255,255,255,.055);border-radius:10px;background:rgba(0,0,0,.16);color:#91a4bb;font:9px/1.55 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap;word-break:break-word}
.log-new-button{border-color:rgba(111,168,255,.24)!important;background:rgba(111,168,255,.07)!important;color:#a9c9f5!important}
.log-footer-status{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:11px 18px;border-top:1px solid rgba(255,255,255,.05);color:#607185;background:rgba(0,0,0,.08);font-size:9px}

@media(max-width:980px){.grant-user-row{grid-template-columns:minmax(160px,.85fr) minmax(210px,1.1fr);}.grant-user-row .permission-tags{grid-column:1/-1}.log-filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.log-filter-actions{grid-column:1/-1;justify-content:flex-end}}
@media(max-width:760px){.account-security-actions{grid-template-columns:1fr 1fr}.validity-control .control-row{grid-template-columns:1fr auto 1fr}.validity-control .control-row .button{grid-column:1/-1;width:100%}.grant-view-tools{width:100%;justify-content:space-between}.grant-view-tools select{min-width:140px}.grant-project-head{align-items:flex-start}.grant-user-row{grid-template-columns:1fr;gap:8px}.grant-user-row .permission-tags{grid-column:auto}.registered-project-table table{min-width:820px}.log-panel-head{align-items:flex-start;flex-direction:column}.log-panel-head>.button{width:100%}.log-filter-grid{grid-template-columns:1fr}.log-filter-actions{grid-column:auto}.log-filter-actions .button{flex:1}.log-view-toolbar{align-items:flex-start;flex-direction:column}.log-view-actions{width:100%;justify-content:flex-start}.hub-log-feed{height:64vh;min-height:380px}.hub-activity-row{grid-template-columns:1fr auto;gap:7px 10px;padding:13px 14px}.activity-time{grid-column:1/2}.activity-main{grid-column:1/-1}.activity-actions{grid-column:2/3;grid-row:1}.activity-detail{grid-column:1/-1}.log-footer-status{align-items:flex-start;flex-direction:column;gap:4px}}

.ops-https-warning{display:flex;align-items:flex-start;gap:10px;margin:0 0 14px;padding:11px 13px;border:1px solid rgba(229,177,74,.24);border-radius:12px;background:rgba(112,79,18,.12);font-size:12px;line-height:1.55}.ops-https-warning b{flex:0 0 auto;color:#f2c96f}.ops-https-warning span{color:#bdc7d5}


/* Project Hub R8：项目控制台简化布局、明显操作结果、通用项目 风格日志筛选。 */
.project-section-heading{align-items:flex-end}
.project-section-heading h2{margin:2px 0 4px;font-size:18px}
.section-description{margin:0;color:#75869a;font-size:11px;line-height:1.6}
.project-activity-panel{padding-bottom:14px}
.project-activity-list{display:grid;gap:0;margin-top:14px;border:1px solid rgba(255,255,255,.06);border-radius:14px;overflow:hidden;background:rgba(0,0,0,.10)}
.project-activity-item{display:grid;grid-template-columns:158px minmax(0,1fr) auto;align-items:center;gap:14px;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.045)}
.project-activity-item:last-child{border-bottom:0}
.project-activity-item:hover{background:rgba(255,255,255,.014)}
.project-activity-item time{color:#728298;font:10px/1.4 "Microsoft YaHei","微软雅黑",sans-serif}
.project-activity-item>div{display:flex;min-width:0;flex-direction:column;gap:4px}
.project-activity-item strong{color:#d5e1ee;font-size:12px}
.project-activity-item span{color:#708095;font-size:9px}
.quarantine-notice{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:5px 10px;margin:14px 0}
.quarantine-notice b{color:#b9c8da;font-size:11px}
.quarantine-notice code{min-width:0;overflow:hidden;text-overflow:ellipsis;color:#9fc2f3;font-size:10px;white-space:nowrap}
.quarantine-notice span{grid-column:1/-1;color:#77889d;font-size:10px}
.package-upload-form{margin-top:14px}
.package-table-wrap{margin-top:16px}
.project-ops-panel{overflow:visible}
.ops-result-box{margin:14px 0 16px;border:1px solid rgba(111,168,255,.16);border-radius:14px;background:rgba(111,168,255,.035);overflow:hidden}
.ops-result-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 13px;border-bottom:1px solid rgba(111,168,255,.10)}
.ops-result-heading strong{color:#cfe0f5;font-size:12px}
.ops-result-heading span{color:#71869e;font-size:9px}
.ops-result-box .code-output{min-height:52px;max-height:260px;margin:0;padding:12px 13px;border:0;border-radius:0;background:rgba(0,0,0,.12);font-size:10px}
.ops-groups{display:grid;gap:14px}
.ops-group{border:1px solid rgba(255,255,255,.065);border-radius:15px;background:rgba(255,255,255,.012);overflow:hidden}
.ops-group-title{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 14px;border-bottom:1px solid rgba(255,255,255,.05);background:rgba(255,255,255,.018)}
.ops-group-title h3{margin:0;color:#d5e1ef;font-size:13px}
.ops-group-title span{color:#66778d;font-size:9px}
.ops-rows{display:grid}
.ops-row{display:grid;grid-template-columns:minmax(180px,.9fr) minmax(260px,1.25fr) auto;align-items:center;gap:14px;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.045)}
.ops-row:last-child{border-bottom:0}
.ops-row:hover{background:rgba(255,255,255,.012)}
.ops-row-copy{display:flex;min-width:0;flex-direction:column;gap:4px}
.ops-row-copy strong{color:#dbe6f2;font-size:13px;font-weight:720}
.ops-row-copy span{color:#7d8fa4;font-size:10px;line-height:1.45}
.ops-row-controls{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:7px;min-width:0}
.ops-row-controls:empty{display:block}
.ops-row-controls input,.ops-row-controls select,.inspection-log-form select{width:100%;min-height:38px;padding:7px 10px;border:1px solid var(--border);border-radius:10px;background:#080d14;color:var(--text);font:inherit;font-size:10px;outline:none}
.ops-row-controls input:focus,.ops-row-controls select:focus,.inspection-log-form select:focus{border-color:var(--border-hover)}
.ops-row>.button{min-width:92px;min-height:38px;border-radius:10px;font-size:11px;font-weight:700}
.inspection-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}
.inspection-card{display:grid;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:13px;padding:15px;border:1px solid rgba(255,255,255,.07);border-radius:15px;background:rgba(255,255,255,.014)}
.inspection-card-icon{display:grid;width:42px;height:42px;place-items:center;border:1px solid rgba(111,168,255,.16);border-radius:12px;background:rgba(111,168,255,.06);color:#9fc4f7;font-size:18px;font-weight:700}
.inspection-card-copy{display:flex;min-width:0;flex-direction:column;gap:5px}
.inspection-card-copy strong{font-size:13px;color:#d8e4f1}
.inspection-card-copy span{color:#78899e;font-size:10px;line-height:1.5}
.inspection-card>.button,.inspection-log-form .button{min-height:38px;border-radius:10px;font-size:11px;font-weight:680}
.inspection-log-form{display:grid;grid-template-columns:minmax(120px,1fr) auto;gap:7px;min-width:250px}

/* 日志筛选更接近 通用项目 的“统一日志”密度和功能层级。 */
.log-filter-grid.rich{grid-template-columns:repeat(4,minmax(0,1fr));align-items:end;gap:10px;padding:15px 18px}
.log-filter-grid.rich .log-filter-wide{grid-column:span 2}
.log-filter-grid.rich label{font-size:10px}
.log-filter-grid.rich input,.log-filter-grid.rich select{min-height:39px;font-size:10px}
.log-filter-grid.rich .log-filter-actions{grid-column:span 2;justify-content:flex-end}
.log-panel-head h2{font-size:18px}
.log-panel-head p{max-width:760px;font-size:11px}
.log-view-toolbar{padding:12px 18px}
.log-view-summary strong{font-size:12px}
.log-view-actions .button{font-size:10px}
.hub-log-feed{min-height:430px}
.hub-activity-row{grid-template-columns:158px minmax(0,1fr) auto;padding:14px 18px}
.activity-title{font-size:12px!important}
.activity-meta{font-size:9px}
.activity-subline{font-size:9px}

@media(max-width:980px){
  .ops-row{grid-template-columns:1fr;align-items:stretch}
  .ops-row>.button{justify-self:end}
  .inspection-grid{grid-template-columns:1fr}
  .log-filter-grid.rich{grid-template-columns:repeat(2,minmax(0,1fr))}
  .log-filter-grid.rich .log-filter-wide{grid-column:span 2}
  .log-filter-grid.rich .log-filter-actions{grid-column:span 2}
}
@media(max-width:760px){
  .project-section-heading{align-items:flex-start;flex-direction:column}
  .project-section-heading>.button{width:100%}
  .project-activity-item{grid-template-columns:1fr auto;gap:6px 10px}
  .project-activity-item time{grid-column:1/2}
  .project-activity-item>div{grid-column:1/-1}
  .project-activity-item>.status-badge{grid-column:2/3;grid-row:1}
  .quarantine-notice{grid-template-columns:1fr}
  .quarantine-notice span{grid-column:auto}
  .ops-result-heading{align-items:flex-start;flex-direction:column;gap:4px}
  .ops-row-controls{grid-template-columns:1fr}
  .ops-row>.button{width:100%;justify-self:stretch}
  .inspection-card{grid-template-columns:42px minmax(0,1fr)}
  .inspection-card>.button,.inspection-log-form{grid-column:1/-1;width:100%}
  .inspection-log-form{grid-template-columns:1fr}
  .log-filter-grid.rich{grid-template-columns:1fr}
  .log-filter-grid.rich .log-filter-wide,.log-filter-grid.rich .log-filter-actions{grid-column:auto}
  .log-filter-grid.rich .log-filter-actions{display:grid;grid-template-columns:1fr 1fr}
}

/* Project Hub R12：项目管理与项目控制台重新排版，优先桌面清晰度并兼容平板/手机。 */
.user-chip-copy{display:flex;min-width:0;align-items:center}.user-chip-copy b{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.log-nav-button{min-width:auto}
.registry-overview-panel{margin-top:18px}.registered-project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:16px}.registered-project-card{display:flex;min-width:0;flex-direction:column;gap:15px;padding:18px;border:1px solid rgba(255,255,255,.07);border-radius:18px;background:linear-gradient(145deg,rgba(255,255,255,.024),rgba(255,255,255,.008));box-shadow:0 14px 34px rgba(0,0,0,.10)}.registered-project-card:hover{border-color:rgba(111,168,255,.18);background:linear-gradient(145deg,rgba(111,168,255,.035),rgba(255,255,255,.008))}.registered-project-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.project-card-identity{display:flex;min-width:0;align-items:center;gap:12px}.project-mini-icon.large{width:42px;height:42px;border-radius:13px;font-size:16px}.project-card-identity h3{margin:0 0 4px;color:#e0e9f3;font-size:16px}.project-card-identity code{color:#6f8298;font-size:10px}.registered-project-meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;border:1px solid rgba(255,255,255,.055);border-radius:13px;background:rgba(0,0,0,.08)}.registered-project-meta>div{display:flex;min-width:0;flex-direction:column;gap:5px;padding:10px 11px;border-right:1px solid rgba(255,255,255,.045)}.registered-project-meta>div:last-child{border-right:0}.registered-project-meta span{color:#61738a;font-size:9px}.registered-project-meta strong{overflow:hidden;color:#aebed1;font:10px/1.45 "Microsoft YaHei","微软雅黑",sans-serif;text-overflow:ellipsis;white-space:nowrap}.registered-project-card-actions{display:flex;justify-content:flex-end}.registered-project-card-actions .button{min-height:36px}.registry-empty{grid-column:1/-1}.registry-editor-panel{margin-top:16px}.project-console-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:18px}.project-console-status{display:flex;align-items:center;gap:7px;padding-bottom:4px}.project-summary-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.project-summary-grid .summary-card b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.release-upload-layout{display:grid;grid-template-columns:minmax(240px,.85fr) minmax(360px,1.15fr);gap:12px;align-items:stretch;margin:14px 0}.quarantine-notice.compact{display:flex;flex-direction:column;justify-content:center;gap:6px;margin:0}.package-upload-inline{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;padding:12px;border:1px solid rgba(255,255,255,.065);border-radius:14px;background:rgba(255,255,255,.012)}.package-picker{display:flex;min-width:0;flex-direction:column;gap:6px;color:#8799ae;font-size:10px}.package-picker input{width:100%;min-width:0;color:#a9b8ca;font-size:10px}.package-upload-inline>.button{min-height:40px}.package-upload-inline .upload-status{grid-column:1/-1;margin:0}.security-gate-banner{align-items:center}.security-gate-banner>div:last-child{display:flex;flex-direction:column;gap:4px}.security-gate-icon{display:grid;flex:0 0 28px;width:28px;height:28px;place-items:center;border:1px solid rgba(229,177,74,.3);border-radius:9px;color:#efc76f;font-weight:800}.unified-ops-form{margin-top:14px;padding:16px;border:1px solid rgba(255,255,255,.07);border-radius:16px;background:rgba(255,255,255,.012)}.ops-command-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.ops-command-grid .field{margin:0}.ops-action-field{grid-column:span 2}.ops-command-grid select,.ops-command-grid input{width:100%;min-height:42px}.ops-command-footer{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:13px;padding-top:13px;border-top:1px solid rgba(255,255,255,.05)}.ops-action-description{max-width:720px;color:#7c8ea4;font-size:10px;line-height:1.55}.ops-execute-button{min-width:160px;min-height:40px}.ops-process-shell{margin-top:14px;border:1px solid rgba(111,168,255,.12);border-radius:16px;background:rgba(111,168,255,.025);overflow:hidden}.ops-process-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 15px;border-bottom:1px solid rgba(111,168,255,.08)}.ops-process-head h3{margin:2px 0 0;color:#d5e2f0;font-size:13px}.ops-process-state{padding:5px 9px;border:1px solid rgba(255,255,255,.08);border-radius:999px;font-size:9px;font-weight:700}.ops-process-state.idle{color:#77889c}.ops-process-state.running{border-color:rgba(111,168,255,.25);color:#a9cafa;background:rgba(111,168,255,.07)}.ops-process-state.success{border-color:rgba(97,208,149,.25);color:#9ee2be;background:rgba(97,208,149,.07)}.ops-process-state.failed{border-color:rgba(223,119,119,.25);color:#e0a1a1;background:rgba(223,119,119,.07)}.ops-timeline{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0;margin:0;padding:0;list-style:none}.ops-timeline li{position:relative;display:flex;min-width:0;gap:9px;padding:14px 11px;border-right:1px solid rgba(255,255,255,.045);opacity:.48}.ops-timeline li:last-child{border-right:0}.ops-timeline li.active,.ops-timeline li.done,.ops-timeline li.failed{opacity:1}.ops-step-index{display:grid;flex:0 0 24px;width:24px;height:24px;place-items:center;border:1px solid rgba(255,255,255,.10);border-radius:8px;color:#71849b;font-size:9px;font-weight:800}.ops-timeline li.active .ops-step-index{border-color:rgba(111,168,255,.35);background:rgba(111,168,255,.10);color:#b7d5ff}.ops-timeline li.done .ops-step-index{border-color:rgba(97,208,149,.30);background:rgba(97,208,149,.09);color:#a6e7c4}.ops-timeline li.failed .ops-step-index{border-color:rgba(223,119,119,.30);background:rgba(223,119,119,.09);color:#e8adad}.ops-timeline li>div{display:flex;min-width:0;flex-direction:column;gap:3px}.ops-timeline strong{color:#cbd8e6;font-size:10px}.ops-timeline small{color:#687a90;font-size:8px;line-height:1.4}.ops-result-summary{padding:13px 15px;border-top:1px solid rgba(111,168,255,.08)}.ops-result-summary>div{display:flex;align-items:center;justify-content:space-between;gap:12px}.ops-result-summary strong{color:#d6e3f1;font-size:12px}.ops-result-summary span{color:#65788f;font-size:9px}.ops-result-summary>p{margin:7px 0 0;color:#90a2b7;font-size:10px}.ops-result-details{margin-top:10px}.ops-result-details summary{cursor:pointer;color:#7890aa;font-size:9px}.ops-result-details .code-output{max-height:320px;margin:9px 0 0}.dependency-panel{overflow:hidden}.dependency-load-state{font-size:9px;color:#6e8198}.dependency-load-state.loading{color:#8aa7c9}.dependency-load-state.success{color:#8bcba8}.dependency-load-state.failed{color:#d69393}.dependency-summary-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:14px}.dependency-summary-card{display:flex;min-width:0;flex-direction:column;gap:6px;padding:12px;border:1px solid rgba(255,255,255,.06);border-radius:13px;background:rgba(255,255,255,.012)}.dependency-summary-card span{color:#687a90;font-size:9px}.dependency-summary-card strong{overflow:hidden;color:#c9d7e6;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.dependency-summary-card.good{border-color:rgba(97,208,149,.14)}.dependency-summary-card.warn{border-color:rgba(229,181,103,.16)}.dependency-skeleton{height:64px;border-radius:13px;background:linear-gradient(90deg,rgba(255,255,255,.025),rgba(255,255,255,.05),rgba(255,255,255,.025));background-size:200% 100%;animation:dependencyPulse 1.4s linear infinite}.dependency-columns{display:grid;grid-template-columns:1.1fr .9fr;gap:10px;margin-top:10px}.dependency-block{padding:14px;border:1px solid rgba(255,255,255,.06);border-radius:14px;background:rgba(255,255,255,.01)}.dependency-block-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:11px}.dependency-block-head h3{margin:0;color:#cfdeed;font-size:12px}.dependency-block-head span{color:#5f7289;font-size:8px;text-transform:uppercase}.dependency-kv{display:grid;gap:0;margin:0}.dependency-kv>div{display:grid;grid-template-columns:118px minmax(0,1fr);gap:10px;padding:7px 0;border-bottom:1px solid rgba(255,255,255,.04)}.dependency-kv>div:last-child{border-bottom:0}.dependency-kv dt{color:#667a91;font-size:9px}.dependency-kv dd{min-width:0;margin:0;overflow-wrap:anywhere;color:#9fb0c3;font:9px/1.45 "Microsoft YaHei","微软雅黑",sans-serif}.dependency-tag-list{display:flex;flex-wrap:wrap;gap:7px}.dependency-tag{display:flex;flex-direction:column;gap:3px;padding:7px 9px;border:1px solid rgba(111,168,255,.14);border-radius:10px;background:rgba(111,168,255,.04)}.dependency-tag b{font-size:9px;color:#a9c5e8}.dependency-tag small{font-size:8px;color:#61758d}.dependency-tag.system{justify-content:center;color:#9dacbd;font-size:9px}.dependency-empty{color:#65778c;font-size:9px}.dependency-service-block{margin-top:10px}.dependency-service-list{display:grid;gap:7px}.dependency-service-row{display:grid;grid-template-columns:minmax(140px,.32fr) minmax(0,1fr);gap:10px;align-items:start;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.04)}.dependency-service-row:last-child{border-bottom:0}.dependency-service-row strong{color:#a9b9ca;font-size:9px}.dependency-service-row pre{margin:0;overflow:auto;color:#7f93aa;font:8px/1.5 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap}.dependency-packages{margin-top:10px;padding:12px 14px;border:1px solid rgba(255,255,255,.06);border-radius:14px;background:rgba(255,255,255,.01)}.dependency-packages summary{cursor:pointer;color:#a4b5c8;font-size:10px}.dependency-packages summary span{margin-left:6px;color:#60758e}.dependency-package-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:10px}.dependency-package{display:flex;min-width:0;align-items:center;justify-content:space-between;gap:8px;padding:7px 8px;border-radius:9px;background:rgba(0,0,0,.12)}.dependency-package strong{overflow:hidden;color:#94a8be;font-size:8px;text-overflow:ellipsis;white-space:nowrap}.dependency-package span{flex:0 0 auto;color:#61758e;font-size:8px}.dependency-error{grid-column:1/-1;padding:14px;border:1px solid rgba(223,119,119,.16);border-radius:12px;color:#d8a0a0;background:rgba(223,119,119,.045);font-size:10px}.responsive-data-table td strong{color:#b8c7d8;font-size:10px}
@keyframes dependencyPulse{0%{background-position:200% 0}100%{background-position:-200% 0}}
@media(max-width:1050px){.registered-project-grid{grid-template-columns:1fr}.project-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.release-upload-layout{grid-template-columns:1fr}.ops-command-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dependency-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dependency-package-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.ops-timeline{grid-template-columns:1fr}.ops-timeline li{border-right:0;border-bottom:1px solid rgba(255,255,255,.04)}.ops-timeline li:last-child{border-bottom:0}}
@media(max-width:760px){.project-console-hero{align-items:flex-start;flex-direction:column}.project-console-status{padding:0}.project-summary-grid{grid-template-columns:1fr 1fr}.registered-project-meta{grid-template-columns:1fr}.registered-project-meta>div{border-right:0;border-bottom:1px solid rgba(255,255,255,.045)}.registered-project-meta>div:last-child{border-bottom:0}.registered-project-card-actions .button{width:100%}.package-upload-inline{grid-template-columns:1fr}.package-upload-inline>.button{width:100%}.ops-command-grid{grid-template-columns:1fr}.ops-action-field{grid-column:auto}.ops-command-footer{align-items:stretch;flex-direction:column}.ops-execute-button{width:100%}.dependency-summary-grid{grid-template-columns:1fr 1fr}.dependency-columns{grid-template-columns:1fr}.dependency-package-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dependency-service-row{grid-template-columns:1fr}.responsive-data-table thead{display:none}.responsive-data-table,.responsive-data-table tbody,.responsive-data-table tr,.responsive-data-table td{display:block;width:100%}.responsive-data-table tr{margin:9px 0;padding:10px 12px;border:1px solid rgba(255,255,255,.06);border-radius:12px;background:rgba(255,255,255,.01)}.responsive-data-table td{display:grid;grid-template-columns:92px minmax(0,1fr);gap:10px;height:auto!important;padding:6px 0!important;border:0!important;text-align:left!important}.responsive-data-table td:before{content:attr(data-label);color:#60758d;font-size:8px}.responsive-data-table td.empty-state{display:block}.hash-cell{max-width:none}.user-chip-copy b{max-width:120px}}
@media(max-width:480px){.project-summary-grid,.dependency-summary-grid,.dependency-package-grid{grid-template-columns:1fr}.registered-project-card{padding:14px}.registered-project-card-head{align-items:flex-start;flex-direction:column}.project-status-cell{align-self:flex-start}.dependency-kv>div{grid-template-columns:1fr;gap:3px}.responsive-data-table td{grid-template-columns:78px minmax(0,1fr)}}


/* Project Hub R13：项目列表恢复为行式列表；发布上传紧凑化；管理页可读性提高。 */
.registered-project-list{margin-top:16px;overflow:hidden;border:1px solid rgba(255,255,255,.07);border-radius:15px;background:rgba(0,0,0,.08)}
.registered-project-list-head,.registered-project-row{display:grid;grid-template-columns:minmax(190px,1.25fr) minmax(100px,.7fr) minmax(130px,.9fr) minmax(130px,.9fr) minmax(100px,.65fr) 82px;gap:14px;align-items:center}
.registered-project-list-head{padding:10px 14px;border-bottom:1px solid rgba(255,255,255,.06);background:rgba(255,255,255,.025);color:#8293a7;font-size:11px;font-weight:650}
.registered-project-row{min-height:68px;padding:11px 14px;border-bottom:1px solid rgba(255,255,255,.05);transition:background .16s,border-color .16s}
.registered-project-row:last-child{border-bottom:0}.registered-project-row:hover{background:rgba(111,168,255,.035)}
.registered-project-identity{display:flex;min-width:0;align-items:center;gap:10px}.registered-project-identity>div{display:flex;min-width:0;flex-direction:column;gap:3px}.registered-project-identity strong{overflow:hidden;color:#dbe6f2;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.registered-project-identity code{overflow:hidden;color:#71849b;font-size:10px;text-overflow:ellipsis;white-space:nowrap}
.registered-project-cell{min-width:0}.registered-project-cell strong,.registered-project-cell span{display:block;overflow:hidden;color:#a8b7c8;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.registered-project-actions{display:flex;justify-content:flex-end}.registered-project-actions .button{min-width:62px}
.compact-release-upload{grid-template-columns:minmax(0,1fr) minmax(190px,250px);align-items:center}.release-verify-hint{display:flex;min-height:54px;align-items:center;justify-content:center;gap:8px;padding:10px 12px;border:1px solid rgba(111,168,255,.13);border-radius:12px;background:rgba(111,168,255,.035);white-space:nowrap}.release-verify-hint b{color:#aec8e9;font-size:11px}.release-verify-hint span{color:#74889f;font-size:10px}
/* 管理页面最低可读字号：辅助信息不再普遍落到 8~9px。 */
.admin-panel .section-description,.project-console-hero .hero-description{font-size:13px}.admin-panel .section-note{font-size:11px}.admin-panel .status-badge,.admin-panel .role-badge{font-size:10px}.admin-panel .field label,.admin-panel .field>span{font-size:12px}.admin-panel .package-picker{font-size:12px}.admin-panel .ops-action-description{font-size:12px;line-height:1.6}.admin-panel .ops-process-state{font-size:10px}.admin-panel .ops-timeline strong{font-size:12px}.admin-panel .ops-timeline small{font-size:10px;line-height:1.5}.admin-panel .ops-result-summary strong{font-size:13px}.admin-panel .ops-result-summary span,.admin-panel .ops-result-summary>p,.admin-panel .ops-result-details summary{font-size:11px}.admin-panel .dependency-load-state{font-size:11px}.admin-panel .dependency-summary-card span{font-size:10px}.admin-panel .dependency-summary-card strong{font-size:13px}.admin-panel .dependency-block-head h3{font-size:13px}.admin-panel .dependency-block-head span{font-size:10px}.admin-panel .dependency-kv dt{font-size:11px}.admin-panel .dependency-kv dd{font-size:10px}.admin-panel .dependency-tag b{font-size:11px}.admin-panel .dependency-tag small,.admin-panel .dependency-tag.system,.admin-panel .dependency-empty{font-size:10px}.admin-panel .dependency-service-row strong{font-size:11px}.admin-panel .dependency-service-row pre{font-size:10px}.admin-panel .dependency-packages summary{font-size:11px}.admin-panel .dependency-package strong,.admin-panel .dependency-package span{font-size:10px}.admin-panel .responsive-data-table td strong{font-size:12px}
.ops-https-warning{margin-bottom:12px}.ops-https-warning b{font-size:12px}.ops-https-warning span{font-size:11px}
@media(max-width:980px){.registered-project-list-head{display:none}.registered-project-row{grid-template-columns:minmax(180px,1.3fr) minmax(100px,.7fr) minmax(100px,.7fr) 90px}.registered-project-row>[data-label="安全域"],.registered-project-row>[data-label="发布产品"]{display:none}.compact-release-upload{grid-template-columns:1fr}.release-verify-hint{min-height:42px;justify-content:flex-start}}
@media(max-width:680px){.registered-project-row{grid-template-columns:1fr auto;gap:8px 12px;padding:13px}.registered-project-identity{grid-column:1/-1}.registered-project-cell{display:grid!important;grid-template-columns:74px minmax(0,1fr);grid-column:1/-1;gap:10px;padding-top:7px;border-top:1px solid rgba(255,255,255,.04)}.registered-project-cell:before,.registered-project-actions:before{content:attr(data-label);color:#74879c;font-size:10px}.registered-project-cell strong,.registered-project-cell span{font-size:11px}.project-status-cell{display:flex!important;grid-template-columns:none;align-items:center}.project-status-cell:before{margin-right:10px}.registered-project-actions{grid-column:1/-1;align-items:center;justify-content:space-between}.registered-project-actions .button{width:auto}.release-verify-hint{white-space:normal}.package-upload-inline{padding:11px}}


/* Project Hub R14：真实执行日志 + 依赖信息可读性提升。 */
.ops-log-shell{margin-top:18px;overflow:hidden;border:1px solid rgba(255,255,255,.075);border-radius:15px;background:#091019}
.ops-log-head{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 16px;border-bottom:1px solid rgba(255,255,255,.065);background:rgba(255,255,255,.025)}
.ops-log-head h3{margin:2px 0 0;color:#d9e5f2;font-size:15px}.ops-log-state{padding:5px 9px;border-radius:999px;font-size:12px;font-weight:700}.ops-log-state.idle{color:#8c9eb2;background:rgba(140,158,178,.08)}.ops-log-state.running{color:#a8c8ed;background:rgba(93,156,224,.12)}.ops-log-state.success{color:#95d7b0;background:rgba(72,179,119,.12)}.ops-log-state.failed{color:#efaaa8;background:rgba(218,91,87,.13)}
.ops-live-log{min-height:180px;max-height:460px;overflow:auto;padding:12px 0;font:12.5px/1.65 "Microsoft YaHei","微软雅黑",sans-serif}
.ops-log-line{display:grid;grid-template-columns:74px 52px minmax(0,1fr);gap:10px;padding:4px 16px;color:#aab8c7}.ops-log-line time{color:#62758b}.ops-log-level{font-weight:750}.ops-log-line.success .ops-log-level{color:#72c997}.ops-log-line.error,.ops-log-line.error .ops-log-level{color:#eda6a4}.ops-log-line.warning,.ops-log-line.warning .ops-log-level{color:#e4c07c}.ops-log-line.muted{color:#708297}.ops-log-detail{margin:4px 16px 10px 152px;padding:10px 12px;overflow:auto;border-left:2px solid rgba(111,168,255,.2);border-radius:0 9px 9px 0;background:rgba(0,0,0,.22);color:#99aabd;font:12px/1.6 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap;word-break:break-word}.ops-log-detail.error{border-left-color:rgba(224,105,101,.45);color:#e1aeac}
.admin-panel .dependency-load-state{font-size:13px}.admin-panel .dependency-summary-card span{font-size:12px}.admin-panel .dependency-summary-card strong{font-size:15px}.admin-panel .dependency-block-head h3{font-size:15px}.admin-panel .dependency-block-head span{font-size:12px}.admin-panel .dependency-kv dt{font-size:13px}.admin-panel .dependency-kv dd{font-size:12.5px;line-height:1.55}.admin-panel .dependency-tag b{font-size:12.5px}.admin-panel .dependency-tag small,.admin-panel .dependency-tag.system,.admin-panel .dependency-empty{font-size:11.5px}.dependency-service-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.dependency-service-card{min-width:0;padding:14px 15px;border:1px solid rgba(255,255,255,.07);border-radius:13px;background:rgba(255,255,255,.018)}.dependency-service-card.good{border-color:rgba(90,190,132,.16)}.dependency-service-card.warn{border-color:rgba(224,173,85,.16)}.dependency-service-card-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.dependency-service-card-head strong{min-width:0;overflow:hidden;color:#cbd8e5;font-size:13.5px;text-overflow:ellipsis;white-space:nowrap}.dependency-service-card-head span{flex:0 0 auto;padding:3px 7px;border-radius:999px;color:#9eb1c5;background:rgba(255,255,255,.05);font-size:11.5px}.dependency-service-card.good .dependency-service-card-head span{color:#8ed4ab;background:rgba(72,179,119,.10)}.dependency-service-card p{margin:8px 0;color:#8799ad;font-size:12px}.dependency-service-card pre{margin:0;max-height:140px;overflow:auto;color:#8295aa;font:11.5px/1.55 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap}.admin-panel .dependency-packages summary{font-size:13px}.admin-panel .dependency-package strong{font-size:12px}.admin-panel .dependency-package span{font-size:11.5px}.dependency-package{padding:9px 10px}
@media(max-width:760px){.ops-log-line{grid-template-columns:62px 46px minmax(0,1fr);gap:7px;padding:4px 10px}.ops-log-detail{margin-left:10px;margin-right:10px}.dependency-service-list{grid-template-columns:1fr}.ops-live-log{font-size:12px}}

/* Project Hub R15：统一操作日志阅读尺寸收口。筛选参数、标签、按钮和记录正文均以正常阅读为优先。 */
.log-live-state{font-size:12.5px}
.log-panel-head p{font-size:13px;line-height:1.65}
.log-filter-grid.rich label{font-size:13px;gap:7px}
.log-filter-grid.rich input,.log-filter-grid.rich select{min-height:42px;padding:9px 11px;font-size:14px}
.log-filter-grid.rich .log-filter-actions .button{min-height:42px;font-size:13px;padding:8px 14px}
.log-view-summary{gap:12px}.log-view-summary strong{font-size:15px}.log-view-summary span{font-size:13px}
.log-view-actions .button{min-height:36px;font-size:13px;padding:7px 12px}.log-autoscroll{font-size:13px;gap:7px}
.activity-time{font:12.5px/1.55 "Microsoft YaHei","微软雅黑",sans-serif}
.activity-meta{gap:7px;margin-bottom:7px}.activity-meta span{padding:4px 8px;font-size:12px}
.activity-title{font-size:15px!important;line-height:1.5}.activity-subline{margin-top:5px;font-size:13px;line-height:1.55}
.activity-detail-button{min-height:36px;padding:7px 12px;font-size:13px}
.activity-detail pre{max-height:360px;padding:13px 15px;color:#a8bacd;font:13px/1.65 "Microsoft YaHei","微软雅黑",sans-serif}
.log-footer-status{font-size:12.5px;line-height:1.6}
.hub-activity-row{padding-top:16px;padding-bottom:16px}
@media(max-width:760px){.log-filter-grid.rich label{font-size:13px}.activity-time{font-size:12px}.activity-title{white-space:normal}.activity-subline{white-space:normal}.activity-meta span{font-size:11.5px}}

/* Project Hub R19：Signed ZIP 选择器、发布包管理与实时执行日志工具栏。 */
.package-picker{gap:8px!important;font-size:13px!important}.package-picker-label{color:#9eb0c3;font-size:13px;font-weight:650}.package-file-control{position:relative;display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:12px;align-items:center;min-height:58px;padding:9px 11px;border:1px solid rgba(116,166,226,.18);border-radius:13px;background:linear-gradient(145deg,rgba(111,168,255,.055),rgba(255,255,255,.018));cursor:pointer;transition:border-color .16s ease,background .16s ease,transform .16s ease}.package-file-control:hover{border-color:rgba(116,166,226,.34);background:linear-gradient(145deg,rgba(111,168,255,.085),rgba(255,255,255,.025))}.package-file-control:focus-within{outline:2px solid rgba(111,168,255,.24);outline-offset:2px}.package-file-icon{display:grid;width:42px;height:42px;place-items:center;border-radius:11px;color:#a9c9ef;background:rgba(111,168,255,.10)}.package-file-icon svg{width:23px;height:23px}.package-file-copy{display:flex;min-width:0;flex-direction:column;gap:4px}.package-file-copy strong{overflow:hidden;color:#d3dfec;font-size:13.5px;text-overflow:ellipsis;white-space:nowrap}.package-file-copy small{color:#71859c;font-size:11.5px;line-height:1.35}.package-file-browse{padding:7px 10px;border:1px solid rgba(255,255,255,.08);border-radius:9px;color:#a9bdd3;background:rgba(255,255,255,.035);font-size:12px;font-weight:700}.package-file-input{position:absolute!important;width:1px!important;height:1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;clip-path:inset(50%)!important;white-space:nowrap!important}.package-table-wrap .responsive-data-table td,.package-table-wrap .responsive-data-table th{font-size:12px}.package-table-wrap code,.package-table-wrap .hash-cell{font-size:11.5px}.package-size,.package-upload-time{color:#9eb0c3;font-size:12px}.package-actions-cell{white-space:nowrap}.package-delete-form{margin:0}.compact-button{min-height:32px;padding:6px 9px;font-size:12px}.package-delete-button{display:inline-flex;align-items:center;gap:6px;color:#d9a3a2}.package-delete-button svg{width:16px;height:16px}.package-delete-button:hover{color:#f0b5b3;border-color:rgba(224,105,101,.25);background:rgba(224,105,101,.07)}
.ops-log-head{align-items:flex-start}.ops-log-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}.ops-log-count{min-width:54px;color:#7e91a7;font-size:12px;text-align:right}.ops-log-limit{display:flex;align-items:center;gap:5px;color:#75899f;font-size:11.5px}.ops-log-limit select{min-height:32px;padding:4px 25px 4px 8px;border-radius:8px;font-size:12px}.ops-log-autoscroll{display:flex;align-items:center;gap:6px;color:#8498ae;font-size:11.5px;white-space:nowrap}.ops-log-autoscroll input{width:15px;height:15px;margin:0}.ops-live-log{max-height:560px;font-size:13px}.ops-log-entry{display:block}.ops-log-entry+.ops-log-entry{border-top:1px solid rgba(255,255,255,.018)}.ops-log-line{grid-template-columns:78px 58px minmax(0,1fr);gap:10px;padding:5px 16px;font-size:13px;line-height:1.55}.ops-log-detail{margin-top:3px;margin-bottom:8px;color:#a7b6c6;font-size:12.5px;line-height:1.58}.ops-log-state{font-size:11.5px}
@media(max-width:760px){.release-upload-layout{grid-template-columns:1fr}.package-file-control{grid-template-columns:38px minmax(0,1fr) auto;min-height:56px}.package-file-icon{width:38px;height:38px}.package-file-copy strong{font-size:13px}.package-file-copy small{font-size:11px}.ops-log-head{flex-direction:column}.ops-log-toolbar{width:100%;justify-content:flex-start}.ops-log-count{min-width:0;text-align:left}.ops-log-line{grid-template-columns:64px 50px minmax(0,1fr);font-size:12.5px}.ops-log-detail{font-size:12px}.package-actions-cell .button{width:auto!important}}
@media(max-width:480px){.package-file-control{grid-template-columns:36px minmax(0,1fr)}.package-file-browse{display:none}.ops-log-toolbar{gap:6px}.ops-log-limit span,.ops-log-autoscroll{font-size:11px}.ops-live-log{max-height:520px}.ops-log-line{grid-template-columns:58px 46px minmax(0,1fr);gap:6px;padding:5px 9px}.ops-log-detail{margin-left:9px;margin-right:9px;padding:9px 10px}}


/* Project Hub R20：上传区顶线对齐；验证卡片在右上，提交按钮固定在其下。 */
.release-upload-layout.compact-release-upload{display:block!important}
.package-upload-inline.package-upload-grid{display:grid!important;grid-template-columns:minmax(0,1fr) minmax(190px,230px);align-items:start;gap:12px 16px;padding:12px!important}
.package-upload-picker{align-self:start;margin:0!important}
.package-upload-side{display:flex;min-width:0;flex-direction:column;align-self:start;gap:10px}
.package-upload-side .release-verify-hint{width:100%;min-height:58px;box-sizing:border-box;margin:0!important;align-self:stretch}
.package-upload-submit{width:100%;min-height:42px;margin:0!important;font-size:13.5px}
.package-upload-status-row{grid-column:1/-1;margin-top:0!important}
@media(max-width:760px){.package-upload-inline.package-upload-grid{grid-template-columns:1fr}.package-upload-side{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:stretch}.package-upload-side .release-verify-hint{min-height:52px}.package-upload-submit{width:auto;min-width:122px}.package-upload-status-row{grid-column:1}}
@media(max-width:520px){.package-upload-side{grid-template-columns:1fr}.package-upload-submit{width:100%}}

/* NO21T R21：系统运维控制面，沿用现有深色视觉，不提供任意命令输入。 */
.system-hero{margin-bottom:14px}.system-tabs{display:flex;gap:7px;margin:0 0 14px;padding:6px;overflow:auto;border:1px solid rgba(255,255,255,.06);border-radius:13px;background:rgba(255,255,255,.018)}.system-tab{flex:0 0 auto;padding:8px 11px;border-radius:9px;color:#8498ae;font-size:12.5px;font-weight:680;text-decoration:none}.system-tab:hover,.system-tab.active{color:#d6e3f0;background:rgba(111,168,255,.09)}.system-panel{padding:18px}.system-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.system-panel-head h2{margin:2px 0 0;font-size:19px}.system-metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:14px}.system-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.info-tip{display:inline-grid;width:18px;height:18px;place-items:center;border:1px solid rgba(135,167,201,.32);border-radius:50%;color:#9eb4ca;font-size:11px;font-weight:800;cursor:help}.system-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.system-form label{display:flex;flex-direction:column;gap:7px;color:#9badc0;font-size:12.5px}.system-form input,.system-inline-form input,.system-inline-form select{min-height:40px}.system-wide{grid-column:1/-1}.system-inline-form{display:grid;grid-template-columns:minmax(180px,1fr) minmax(180px,1fr) auto;gap:9px;align-items:end;margin-top:12px}.system-result{margin-top:18px;border:1px solid rgba(255,255,255,.06);border-radius:12px;overflow:hidden;background:rgba(0,0,0,.12)}.system-result-head{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border-bottom:1px solid rgba(255,255,255,.05);color:#9fb2c6;font-size:12px}.system-result pre{min-height:180px;max-height:520px;margin:0;padding:13px 14px;overflow:auto;color:#a8bacd;font:12px/1.6 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap;word-break:break-word}.footer a{color:inherit;text-decoration:none}.footer a:hover{color:#a9bdd3}.login-copyright{margin-left:8px;color:#687b91}
@media(max-width:900px){.system-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.system-inline-form{grid-template-columns:1fr 1fr}.system-inline-form .button{grid-column:1/-1;width:100%}}
@media(max-width:640px){.system-panel{padding:14px}.system-form{grid-template-columns:1fr}.system-wide{grid-column:auto}.system-inline-form{grid-template-columns:1fr}.system-metric-grid{grid-template-columns:1fr 1fr}.system-tabs{margin-left:-4px;margin-right:-4px}.footer{flex-wrap:wrap;justify-content:center;text-align:center}}
.system-compact-form{display:inline-flex;margin:0}.system-result-tools{display:flex;gap:7px;align-items:center}


/* R23：移动端登录焦点/软键盘与缓存迁移稳健性。 */
.login-card:before{pointer-events:none}
.login-form,.login-field,.login-field input{position:relative;z-index:1}
.login-field input{pointer-events:auto;touch-action:manipulation;-webkit-user-select:text;user-select:text}
@media(max-width:760px){.login-field input{font-size:16px}}

/* R24：系统运维 UI 统一、结构化结果与紧凑 Footer。 */
.system-console-hero{margin-bottom:18px}.system-console-hero h1{font-size:clamp(30px,5vw,46px)}.system-console-hero .hero-description{max-width:820px;margin-top:14px}
.system-tabs{display:flex;gap:6px;margin:0 0 16px;padding:5px;overflow-x:auto;border:1px solid var(--border);border-radius:14px;background:rgba(255,255,255,.02);scrollbar-width:thin}.system-tab{flex:0 0 auto;min-height:34px;padding:8px 12px;border-radius:10px;color:#8295aa;font-size:12.5px;font-weight:700;text-decoration:none;white-space:nowrap}.system-tab:hover{color:#c9d8e8;background:rgba(111,168,255,.06)}.system-tab.active{color:#dce9f7;background:rgba(111,168,255,.13);box-shadow:inset 0 0 0 1px rgba(111,168,255,.14)}
.system-admin-panel{padding:22px}.system-page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:20px;padding-bottom:18px;border-bottom:1px solid rgba(255,255,255,.055)}.system-page-head h2{margin:2px 0 7px;font-size:21px}.system-page-head .section-description{max-width:760px;margin:0;color:#8496aa;font-size:12.5px;line-height:1.7}
.system-metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px;margin-bottom:16px}.system-metric-card{position:relative;min-width:0;padding:16px 17px;border:1px solid rgba(255,255,255,.075);border-radius:15px;background:linear-gradient(145deg,rgba(255,255,255,.035),rgba(255,255,255,.012));overflow:hidden}.system-metric-card:after{content:"";position:absolute;inset:auto -25px -34px auto;width:88px;height:88px;border-radius:50%;background:rgba(111,168,255,.045)}.system-metric-card span{display:block;color:#7f92a8;font-size:11.5px}.system-metric-card strong{display:block;margin-top:8px;overflow:hidden;color:#d8e4f1;font-size:23px;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.system-metric-card small{display:block;margin-top:7px;overflow:hidden;color:#60758c;font-size:10.5px;line-height:1.45;text-overflow:ellipsis;white-space:nowrap}.system-metric-card.good{border-color:rgba(97,208,149,.16)}.system-metric-card.good strong{color:#a9dfbf}.system-metric-card.warn{border-color:rgba(229,181,103,.18)}.system-metric-card.warn strong{color:#dfc18b}
.system-control-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}.system-control-grid.one-column{grid-template-columns:1fr}.system-control-card{min-width:0;padding:17px 18px;border:1px solid rgba(255,255,255,.07);border-radius:15px;background:rgba(255,255,255,.018)}.system-control-card.danger-zone{border-color:rgba(223,119,119,.14);background:rgba(223,119,119,.018)}.system-control-span{grid-column:1/-1}.system-control-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.system-control-card-head h3{margin:0 0 6px;color:#d3deea;font-size:14.5px}.system-control-card-head p{margin:0;color:#778ba1;font-size:11.5px;line-height:1.65}.system-control-card .actions{margin-top:12px}
.system-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px}.system-form-grid .field.full{grid-column:1/-1}.system-card-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px;margin-top:10px}.system-card-form>.actions{grid-column:1/-1;margin-top:1px}.system-card-form-secondary{margin-top:16px;padding-top:15px;border-top:1px solid rgba(255,255,255,.055)}.system-publish-form{grid-template-columns:minmax(180px,.7fr) minmax(220px,1fr)}.system-admin-panel .field{gap:7px}.system-admin-panel .field label{display:flex;align-items:center;gap:6px;color:#a9b8c7;font-size:12px}.system-admin-panel .field input,.system-admin-panel .field select{min-height:42px;padding:9px 11px;border-radius:11px;font-size:13px}.system-compact-form{display:inline-flex;margin:0}
.system-result{margin-top:18px;overflow:hidden;border:1px solid rgba(255,255,255,.065);border-radius:15px;background:rgba(4,8,14,.34)}.system-result-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.055);background:rgba(255,255,255,.018)}.system-result-head>div{display:flex;align-items:center;gap:10px;min-width:0}.system-result-head strong{color:#bdcad7;font-size:12.5px}.system-result-head [data-system-result-summary]{overflow:hidden;color:#63778e;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.system-result-tools{display:flex;gap:7px;align-items:center}.system-structured-result{display:flex;flex-direction:column;gap:13px;padding:14px}.system-raw-result{margin:0;border-top:1px solid rgba(255,255,255,.045)}.system-raw-result summary{padding:10px 14px;color:#64788f;font-size:11.5px;cursor:pointer;user-select:none}.system-raw-result pre{max-height:360px;margin:0;padding:13px 14px;overflow:auto;border-top:1px solid rgba(255,255,255,.04);background:#05080d;color:#7f93a9;font:11px/1.55 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap;word-break:break-word}
.system-empty-state{padding:24px;border:1px dashed rgba(255,255,255,.075);border-radius:12px;color:#63778e;font-size:12px;text-align:center}.system-empty-state.compact{padding:12px}
.system-object-block{min-width:0}.system-object-title{margin:0 0 10px;color:#9dafc1;font-size:12.5px}.system-kv-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.system-kv-card{min-width:0;padding:11px 12px;border:1px solid rgba(255,255,255,.055);border-radius:11px;background:rgba(255,255,255,.014)}.system-kv-label{display:block;color:#667b91;font-size:10.5px}.system-kv-value{margin-top:5px;overflow-wrap:anywhere;color:#b9c7d5;font-size:12px;line-height:1.55}.system-value-pill{display:inline-flex;padding:3px 7px;border-radius:999px;background:rgba(255,255,255,.05);color:#a7b7c7;font-size:10.5px;font-weight:700}.system-value-pill.good{color:#92d6ad;background:rgba(97,208,149,.10)}.system-value-pill.bad{color:#e1a3a3;background:rgba(223,119,119,.10)}
.system-list-block{min-width:0}.system-list-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.system-list-head h3{margin:0;color:#9dafc1;font-size:12.5px}.system-list-head span{color:#5e738b;font-size:10.5px}.system-list-items{display:flex;flex-direction:column;overflow:hidden;border:1px solid rgba(255,255,255,.055);border-radius:11px}.system-list-item{padding:10px 12px;background:rgba(255,255,255,.012)}.system-list-item+.system-list-item{border-top:1px solid rgba(255,255,255,.045)}.system-list-primary{display:block;overflow-wrap:anywhere;color:#c1cedb;font-size:11.5px}.system-list-meta{display:flex;align-items:center;gap:7px;margin-top:5px;flex-wrap:wrap}.system-list-meta span{color:#6f8399;font-size:10.5px}.system-list-meta .mono{font-family:"Microsoft YaHei","微软雅黑",sans-serif}.system-inline-detail{max-height:220px;margin:8px 0 0;padding:9px 10px;overflow:auto;border-left:2px solid rgba(111,168,255,.25);border-radius:0 8px 8px 0;background:rgba(0,0,0,.18);color:#899caf;font:10.5px/1.55 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap;word-break:break-word}
.system-diagnostic-banner{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:12px 14px;border:1px solid rgba(229,181,103,.16);border-radius:12px;background:rgba(229,181,103,.04)}.system-diagnostic-banner strong{flex:0 0 auto;color:#d7bd88;font-size:12px}.system-diagnostic-banner span{color:#7e91a6;font-size:11px;line-height:1.6;text-align:right}.system-diagnostic-banner.good{border-color:rgba(97,208,149,.16);background:rgba(97,208,149,.035)}.system-diagnostic-banner.good strong{color:#91d4ad}.system-diagnostic-banner.bad{border-color:rgba(223,119,119,.18);background:rgba(223,119,119,.035)}.system-diagnostic-banner.bad strong{color:#dfa1a1}.system-diagnostic-banner.neutral{border-color:rgba(111,168,255,.15);background:rgba(111,168,255,.035)}.system-diagnostic-banner.neutral strong{color:#a5c4eb}
.system-health-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:7px}.system-health-card{padding:9px 10px;border:1px solid rgba(255,255,255,.055);border-radius:10px;background:rgba(255,255,255,.014)}.system-health-card span{display:block;color:#687d93;font-size:10px}.system-health-card strong{display:block;margin-top:5px;color:#b0bfce;font-size:11px}.system-health-card.good{border-color:rgba(97,208,149,.13)}.system-health-card.good strong{color:#8fd1aa}.system-health-card.bad{border-color:rgba(223,119,119,.14)}.system-health-card.bad strong{color:#d99b9b}
.system-log-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 14px;border:1px solid rgba(255,255,255,.065);border-radius:13px;background:rgba(255,255,255,.016)}.system-log-toolbar>div:first-child{display:flex;flex-direction:column;gap:4px}.system-log-toolbar strong{color:#c1cedb;font-size:12.5px}.system-log-toolbar span{color:#687d93;font-size:10.5px}.system-log-actions{display:flex!important;align-items:center;gap:8px;flex-direction:row!important}.system-log-actions label{display:flex;align-items:center;gap:7px;color:#72879d;font-size:11px}.system-log-actions select{min-height:34px;padding:5px 28px 5px 9px;border:1px solid var(--border);border-radius:9px;background:rgba(4,8,14,.55);color:#c4d0dc;font:inherit;font-size:11.5px}
.system-log-unit{overflow:hidden;border:1px solid rgba(255,255,255,.06);border-radius:12px;background:rgba(255,255,255,.012)}.system-log-unit+ .system-log-unit{margin-top:9px}.system-log-unit-head{padding:10px 12px;cursor:pointer;list-style:none}.system-log-unit-head::-webkit-details-marker{display:none}.system-log-unit-head>span{display:flex;align-items:center;justify-content:space-between;gap:12px}.system-log-unit-head strong{color:#afbdcb;font-size:11.5px}.system-log-unit-head small{color:#5e7389;font-size:10px}.system-log-lines{max-height:470px;overflow:auto;border-top:1px solid rgba(255,255,255,.045);font-family:"Microsoft YaHei","微软雅黑",sans-serif}.system-log-row{display:grid;grid-template-columns:152px 150px minmax(0,1fr);gap:10px;padding:5px 10px;color:#8598ac;font-size:10.5px;line-height:1.55}.system-log-row+.system-log-row{border-top:1px solid rgba(255,255,255,.018)}.system-log-row time{color:#52677e}.system-log-source{overflow:hidden;color:#657b91;text-overflow:ellipsis;white-space:nowrap}.system-log-message{overflow-wrap:anywhere}.system-log-row.error{background:rgba(223,119,119,.035);color:#d9a0a0}.system-log-row.warning{background:rgba(229,181,103,.025);color:#cdb17d}.system-log-row.success .system-log-message{color:#8fbba2}
.system-execution-block{min-width:0}.system-execution-list{overflow:hidden;border:1px solid rgba(255,255,255,.055);border-radius:11px}.system-execution-row{padding:9px 11px}.system-execution-row+.system-execution-row{border-top:1px solid rgba(255,255,255,.035)}.system-execution-meta{display:flex;align-items:center;gap:9px;margin-bottom:4px}.system-execution-meta time,.system-execution-meta span{color:#5c7188;font-size:9.5px}.system-execution-row>strong{color:#aab9c8;font-size:11px;font-weight:650}.system-execution-row.success>strong{color:#8fc3a5}.system-execution-row.warning>strong{color:#cbb17f}.system-execution-row.error>strong{color:#d79a9a}
.footer{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:38px;padding-top:20px;border-top:1px solid rgba(255,255,255,.055);color:#667385;font-size:11px}.footer-legal{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.footer-sep{color:#3f4d5d}.footer-session{flex:0 0 auto;color:#556477}.footer a{color:inherit;text-decoration:none}.footer a:hover{color:#a9bdd3}
@media(max-width:900px){.system-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.system-health-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.system-kv-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.system-admin-panel{padding:15px}.system-page-head{align-items:flex-start;flex-direction:column}.system-control-grid,.system-form-grid,.system-card-form,.system-publish-form{grid-template-columns:1fr}.system-control-span,.system-form-grid .field.full,.system-card-form>.actions{grid-column:auto}.system-diagnostic-banner{align-items:flex-start;flex-direction:column;gap:6px}.system-diagnostic-banner span{text-align:left}.system-log-toolbar{align-items:flex-start;flex-direction:column}.system-log-actions{width:100%;flex-wrap:wrap}.system-log-row{grid-template-columns:112px minmax(0,1fr)}.system-log-source{display:none}.footer{align-items:center;justify-content:center;flex-direction:column;gap:7px;text-align:center}.footer-legal{justify-content:center}}
@media(max-width:480px){.system-metric-grid{grid-template-columns:1fr 1fr}.system-metric-card{padding:13px}.system-metric-card strong{font-size:19px}.system-health-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.system-kv-grid{grid-template-columns:1fr}.system-log-row{grid-template-columns:1fr;gap:2px}.system-log-row time{font-size:9px}.system-tabs{margin-left:-3px;margin-right:-3px}.footer-legal{gap:5px}.footer-sep{font-size:9px}}
.system-result .system-inline-detail{min-height:0;max-height:220px;margin:8px 0 0;padding:9px 10px;overflow:auto;border:0;border-left:2px solid rgba(111,168,255,.25);border-radius:0 8px 8px 0;background:rgba(0,0,0,.18);color:#899caf;font:10.5px/1.55 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap;word-break:break-word}

/* R25：系统运维中文化、紧凑状态卡、日志单窗口与浏览器自动填充隔离。 */
.system-console-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:14px;padding-bottom:2px}.system-console-hero>div:first-child{min-width:0}.system-console-hero .eyebrow{margin-bottom:8px}.system-console-hero h1{margin:0;font-size:clamp(28px,4.6vw,42px);line-height:1.08}.system-console-hero .hero-description{max-width:860px;margin:10px 0 0;line-height:1.65}.system-console-hero .project-console-status{align-self:center;flex:0 0 auto}.system-page-head{margin-bottom:16px;padding-bottom:14px}.system-page-head .section-kicker{margin-bottom:5px}.system-page-head h2{margin:0 0 5px;font-size:20px}.system-page-head .section-description{line-height:1.55}
.system-control-grid.compact-controls{margin-top:0}.system-control-card{padding:15px 16px}.system-control-card-head{margin-bottom:10px}.system-control-card-head h3{margin-bottom:4px}.system-control-card .actions{margin-top:9px}.system-card-form{gap:9px;margin-top:8px}.system-card-form.single-row-form{grid-template-columns:minmax(220px,1fr) auto;align-items:end}.system-card-form.single-row-form>.actions{grid-column:auto;margin:0}.system-form-grid{gap:11px}.system-admin-panel .field{min-width:0}.system-admin-panel .field input,.system-admin-panel .field select{width:100%;box-sizing:border-box}.stepup-field input[data-reauth]{background:rgba(5,9,15,.72)}
.system-result{margin-top:14px}.system-result-head{padding:9px 12px}.system-structured-result{gap:10px;padding:11px}.system-object-title{margin-bottom:7px}.system-kv-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.system-kv-card{padding:9px 10px}.system-kv-label{font-size:10px}.system-kv-value{margin-top:3px;font-size:11.5px;line-height:1.4}.system-list-head{margin-bottom:6px}.system-list-item{padding:8px 10px}.system-diagnostic-banner{align-items:center;gap:12px;padding:9px 11px}.system-diagnostic-banner span{line-height:1.45}.system-inline-collapsible{overflow:hidden;border:1px solid rgba(255,255,255,.055);border-radius:10px;background:rgba(255,255,255,.012)}.system-inline-collapsible summary{padding:8px 10px;color:#71859a;font-size:10.5px;cursor:pointer}.system-inline-collapsible .system-inline-detail{margin:0;border-top:1px solid rgba(255,255,255,.04);border-left:0;border-radius:0}
.system-summary-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.system-summary-card{display:grid;grid-template-columns:minmax(84px,.72fr) minmax(0,1fr);align-items:center;gap:8px;min-width:0;min-height:48px;padding:9px 10px;border:1px solid rgba(255,255,255,.06);border-radius:10px;background:rgba(255,255,255,.014)}.system-summary-card.wide{grid-column:span 2}.system-summary-label{overflow:hidden;color:#687d93;font-size:10.5px;text-overflow:ellipsis;white-space:nowrap}.system-summary-value{min-width:0;overflow:hidden;color:#bdcad7;font-size:11.5px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.system-summary-value.mono{font-family:"Microsoft YaHei","微软雅黑",sans-serif;font-size:10.5px}.system-summary-hint{grid-column:2;min-width:0;overflow:hidden;margin-top:-3px;color:#526980;font-size:9.5px;text-overflow:ellipsis;white-space:nowrap}.system-summary-card.good{border-color:rgba(97,208,149,.13)}.system-summary-card.good .system-summary-value{color:#96cfad}.system-summary-card.warn{border-color:rgba(229,181,103,.15)}.system-summary-card.warn .system-summary-value{color:#d0b47e}.system-summary-card.bad{border-color:rgba(223,119,119,.15)}.system-summary-card.bad .system-summary-value{color:#d69b9b}.python-runtime-grid .system-summary-card:nth-child(4){grid-column:span 2}.python-runtime-grid .system-summary-card:nth-child(4) .system-summary-label{min-width:92px}.python-runtime-grid .system-summary-card:nth-child(4) .system-summary-value{font-size:11px}.certificate-grid .system-summary-card:last-child{grid-column:span 2}.overview-core-grid,.certificate-grid,.nginx-status-grid,.https-check-grid{align-items:stretch}
.system-log-toolbar{padding:10px 12px}.system-log-actions{gap:7px}.system-log-actions label{white-space:nowrap}.system-log-actions select{min-width:112px}.system-log-panel{overflow:hidden;border:1px solid rgba(255,255,255,.06);border-radius:11px;background:rgba(255,255,255,.012)}.system-log-panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;border-bottom:1px solid rgba(255,255,255,.045)}.system-log-panel-head strong{color:#b6c5d4;font-size:11.5px}.system-log-panel-head span{color:#5f748a;font-size:10px}.system-log-lines{max-height:560px}.system-log-row{padding:4px 9px;line-height:1.45}
.top-actions{align-items:center}.top-actions .user-chip{order:0}.top-actions a[href="/admin/projects"]{order:1}.top-actions a[href="/admin/system"]{order:2}.top-actions a[href="/logs"]{order:3}.top-actions a[href="/admin/accounts"]{order:4}.top-actions form[action="/hub/api/auth/logout"]{order:5}
@media(max-width:1050px){.system-summary-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.system-summary-card.wide,.python-runtime-grid .system-summary-card:nth-child(4),.certificate-grid .system-summary-card:last-child{grid-column:span 2}}
@media(max-width:760px){.system-console-hero{align-items:flex-start;flex-direction:column;gap:10px}.system-console-hero .project-console-status{align-self:flex-start}.system-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.system-summary-card.wide,.python-runtime-grid .system-summary-card:nth-child(4),.certificate-grid .system-summary-card:last-child{grid-column:1/-1}.system-card-form.single-row-form{grid-template-columns:1fr}.system-card-form.single-row-form>.actions{grid-column:auto}.system-log-actions{width:100%;display:grid!important;grid-template-columns:1fr 1fr auto!important}.system-log-actions label{display:grid;grid-template-columns:auto 1fr}.system-log-actions .info-tip{display:none}.system-kv-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:480px){.system-summary-card{grid-template-columns:minmax(76px,.72fr) minmax(0,1fr);padding:8px}.system-summary-grid{gap:6px}.system-log-actions{grid-template-columns:1fr 1fr!important}.system-log-actions .button{grid-column:1/-1;width:100%}.system-kv-grid{grid-template-columns:1fr}}


/* R26：系统运维间距、完整依赖路径、统一提示框、日志字号与登录页舒展中文化。 */
.system-summary-card.path-card{grid-column:1/-1!important;display:block;min-height:64px;padding:10px 12px}
.system-summary-card.path-card .system-summary-label{display:block;margin:0 0 7px;overflow:visible;color:#7890a8;text-overflow:clip;white-space:normal}
.system-summary-card.path-card .system-summary-value{display:block;width:100%;overflow:visible;color:#c3d0dc;font-size:11.5px!important;line-height:1.55;overflow-wrap:anywhere;word-break:break-all;white-space:normal;text-overflow:clip}
.python-runtime-grid .system-summary-card.path-card:nth-child(4){grid-column:1/-1!important}
.system-control-card .actions{align-items:center;gap:8px}
.info-tip[data-tooltip]{position:relative;z-index:8;display:inline-grid;flex:0 0 18px;margin:0;vertical-align:middle;outline:none}
.info-tip[data-tooltip]::before{content:attr(data-tooltip);position:absolute;z-index:80;left:50%;bottom:calc(100% + 9px);width:max-content;max-width:min(280px,72vw);padding:8px 10px;border:1px solid rgba(122,164,210,.25);border-radius:9px;background:rgba(11,17,25,.98);box-shadow:0 12px 32px rgba(0,0,0,.36);color:#b8c8d9;font-size:11px;font-weight:500;line-height:1.55;letter-spacing:0;white-space:normal;opacity:0;pointer-events:none;transform:translate(-50%,4px);transition:opacity .12s,transform .12s}
.info-tip[data-tooltip]::after{content:"";position:absolute;z-index:81;left:50%;bottom:calc(100% + 4px);width:7px;height:7px;border-right:1px solid rgba(122,164,210,.25);border-bottom:1px solid rgba(122,164,210,.25);background:rgba(11,17,25,.98);opacity:0;pointer-events:none;transform:translateX(-50%) rotate(45deg);transition:opacity .12s}
.info-tip[data-tooltip]:hover::before,.info-tip[data-tooltip]:focus-visible::before{opacity:1;transform:translate(-50%,0)}
.info-tip[data-tooltip]:hover::after,.info-tip[data-tooltip]:focus-visible::after{opacity:1}
.system-log-row{padding:6px 10px;font-size:12px;line-height:1.58}
.system-log-row time{font-size:10.8px}.system-log-source{font-size:11.2px}.system-log-message{font-size:12px}
.system-log-panel-head strong{font-size:12.5px}.system-log-panel-head span{font-size:11px}
.login-shell{padding:40px 20px}
.login-card{width:min(100%,520px);padding:42px 44px 32px;border-radius:30px}
.login-brand{gap:15px}.login-brand-mark{width:50px;height:50px;border-radius:16px}.login-brand-core{width:29px;height:29px}
.login-brand-name{font-size:13px;letter-spacing:.1em}.login-brand-version{font-size:11px;letter-spacing:.02em}
.login-heading{margin:38px 0 30px}.login-kicker{margin-bottom:10px;font-size:11px;letter-spacing:.12em}.login-card h1{font-size:40px}.login-subtitle{margin-top:12px;font-size:14px}
.login-form{gap:19px}.login-field{gap:9px}.login-field label{font-size:13px;letter-spacing:0}.login-field input{min-height:54px;padding:13px 15px;border-radius:14px}
.login-submit{min-height:54px;margin-top:3px;font-size:14px!important}
.login-footer{gap:8px;margin-top:28px;padding-top:21px;flex-wrap:wrap;font-size:10px;line-height:1.5;letter-spacing:.06em}.login-copyright{margin-left:2px}
@media(max-width:700px){.info-tip[data-tooltip]::before{left:auto;right:-6px;max-width:min(260px,78vw);transform:translateY(4px)}.info-tip[data-tooltip]::after{left:auto;right:4px;transform:rotate(45deg)}.info-tip[data-tooltip]:hover::before,.info-tip[data-tooltip]:focus-visible::before{transform:translateY(0)}.login-shell{padding:24px 14px}.login-card{width:min(100%,500px);padding:34px 26px 26px}.login-heading{margin:32px 0 27px}.login-card h1{font-size:35px}.login-field input{min-height:52px}.login-footer{justify-content:flex-start;text-align:left}}
@media(max-width:420px){.login-card{padding:30px 20px 24px;border-radius:24px}.login-brand-version{font-size:10px}.login-card h1{font-size:32px}.login-footer{font-size:9.5px}.system-log-row{font-size:11.5px}.system-log-message{font-size:11.5px}}

/* R28：项目备份/缓存管理 + Step-Up 明确输入态。 */
.project-maintenance-panel{margin-top:18px}.maintenance-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(280px,.75fr);gap:16px}.maintenance-card{border:1px solid var(--border);border-radius:16px;background:rgba(255,255,255,.025);padding:18px;min-width:0}.maintenance-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:14px}.maintenance-card-head h3{margin:0 0 5px;font-size:14px}.maintenance-card-head p{margin:0;color:var(--muted);font-size:12px;line-height:1.7}.maintenance-meta{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}.maintenance-chip{display:inline-flex;align-items:center;min-height:28px;padding:5px 9px;border:1px solid var(--border);border-radius:999px;color:#cbd6e2;font-size:11px;background:rgba(255,255,255,.025)}.maintenance-list{display:grid;gap:8px}.maintenance-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:rgba(0,0,0,.12)}.maintenance-row-main{min-width:0}.maintenance-row-main strong{display:block;font-size:12px;overflow-wrap:anywhere}.maintenance-row-main small{display:block;margin-top:4px;color:var(--muted);font-size:10.5px}.maintenance-size{font-size:11px;color:#cbd6e2;white-space:nowrap}.maintenance-empty{padding:14px;border:1px dashed var(--border);border-radius:12px;color:var(--muted);font-size:12px;text-align:center}.maintenance-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.maintenance-cache-status{display:grid;gap:10px}.maintenance-cache-path{padding:10px 12px;border:1px solid var(--border);border-radius:12px;color:#cbd6e2;font-size:11px;overflow-wrap:anywhere;background:rgba(0,0,0,.12)}.stepup-explicit{display:grid;gap:8px}.stepup-explicit .stepup-input-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:end}.stepup-explicit input[disabled]{opacity:.6;cursor:not-allowed}.stepup-helper{color:var(--muted);font-size:10.5px;line-height:1.55}.maintenance-message{margin-top:10px;font-size:11px;color:var(--muted)}.maintenance-message.good{color:var(--success)}.maintenance-message.bad{color:#f0b5b5}@media(max-width:760px){.maintenance-grid{grid-template-columns:1fr}.maintenance-row{grid-template-columns:minmax(0,1fr) auto}.maintenance-size{grid-column:1/2}.stepup-explicit .stepup-input-row{grid-template-columns:1fr}}

/* R29：账号与安全双卡、备案页脚、备份单列与 Step-Up 对齐。 */
.account-security-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:18px}.account-security-grid .panel{margin:0}.account-security-card{height:100%}.account-security-card .form-grid{height:calc(100% - 36px);align-content:start}.account-security-card .actions{margin-top:auto}.compact-heading{align-items:center}.compact-heading form{margin:0}
.site-legal-footer{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;text-align:center}.site-legal-footer .footer-legal{justify-content:center}.site-legal-footer .footer-session{margin:0;text-align:center}
.login-page{display:flex;min-height:100vh;flex-direction:column}.login-shell{flex:1 0 auto}.login-site-footer{flex:0 0 auto;width:100%;padding:0 20px 24px;color:#708297;font-size:11px;line-height:1.7;text-align:center}.login-site-legal{display:flex;align-items:center;justify-content:center;gap:7px;flex-wrap:wrap}.login-site-footer a,.site-legal-footer a{text-decoration:none;color:#8398ae}.login-site-footer a:hover,.site-legal-footer a:hover{color:#b8cbe0;text-decoration:underline;text-underline-offset:3px}
.project-maintenance-panel .maintenance-grid{grid-template-columns:1fr}.maintenance-card.full-width{grid-column:1/-1}.maintenance-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:0 0 12px}.maintenance-selection-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.maintenance-selection-state{color:var(--muted);font-size:11px}.maintenance-row{grid-template-columns:auto minmax(0,1fr) auto auto}.maintenance-check{display:grid;place-items:center}.maintenance-check input{width:16px;height:16px;margin:0}.maintenance-row-actions{display:flex;align-items:center;gap:6px}.backup-detail-dialog{width:min(900px,calc(100vw - 28px));max-height:min(82vh,820px);padding:0;border:1px solid var(--border);border-radius:18px;background:#0b1119;color:var(--text);box-shadow:0 28px 80px rgba(0,0,0,.55)}.backup-detail-dialog::backdrop{background:rgba(2,6,11,.72);backdrop-filter:blur(3px)}.backup-detail-shell{display:grid;grid-template-rows:auto minmax(0,1fr);max-height:min(82vh,820px)}.backup-detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:16px 18px;border-bottom:1px solid var(--border)}.backup-detail-head h3{margin:0 0 5px;font-size:15px}.backup-detail-head p{margin:0;color:var(--muted);font-size:11px;overflow-wrap:anywhere}.backup-tree{overflow:auto;padding:12px 14px 16px}.backup-tree-row{display:grid;grid-template-columns:minmax(260px,1.5fr) 88px 104px 160px 86px;gap:10px;align-items:center;padding:7px 9px;border-bottom:1px solid rgba(255,255,255,.045);font-size:11px}.backup-tree-row.header{position:sticky;top:0;z-index:2;border:1px solid var(--border);border-radius:9px;background:#101722;color:#7f93aa;font-weight:700}.backup-tree-path{overflow-wrap:anywhere}.backup-tree-kind,.backup-tree-size,.backup-tree-time,.backup-tree-mode{color:#aab9c8}.maintenance-capability-note{margin-top:8px;color:var(--muted);font-size:10.5px;line-height:1.55}
.stepup-explicit .stepup-input-row{align-items:center}.stepup-explicit .stepup-input-row .button{align-self:center}.stepup-explicit .stepup-input-row input{align-self:center}
.system-hub-backup-card{grid-column:1/-1}.system-hub-backup-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.system-hub-backup-list{display:grid;gap:8px;margin-top:12px}.system-hub-backup-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:rgba(0,0,0,.12)}.system-hub-backup-row strong{display:block;font-size:12px;overflow-wrap:anywhere}.system-hub-backup-row small{display:block;margin-top:4px;color:var(--muted);font-size:10.5px}
@media(max-width:760px){.account-security-grid{grid-template-columns:1fr}.maintenance-row{grid-template-columns:auto minmax(0,1fr) auto}.maintenance-size{grid-column:2/3}.maintenance-row-actions{grid-column:3/4;grid-row:1/3;flex-direction:column}.backup-tree-row{grid-template-columns:minmax(220px,1fr) 74px 90px}.backup-tree-time,.backup-tree-mode{display:none}.login-site-footer{padding:0 14px 18px}.system-hub-backup-row{grid-template-columns:minmax(0,1fr) auto}}

/* R29：备份详情改为层级卡片，只展示元数据，不展示文件内容。 */
.backup-tree{display:grid;gap:8px}.backup-tree-card{--tree-depth:0;display:grid;grid-template-columns:minmax(240px,1.35fr) minmax(360px,1fr);gap:14px;align-items:center;margin-left:min(calc(var(--tree-depth) * 12px),144px);padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:rgba(255,255,255,.022)}
.backup-tree-card.directory{background:rgba(255,255,255,.035)}.backup-tree-card-main{display:flex;align-items:center;gap:9px;min-width:0}.backup-tree-icon{flex:0 0 auto;min-width:38px;padding:3px 6px;border:1px solid var(--border);border-radius:7px;color:#8fa6bd;font-size:9.5px;text-align:center}.backup-tree-path{min-width:0;font-size:11.5px;line-height:1.55;overflow-wrap:anywhere}.backup-tree-card-meta{display:grid;grid-template-columns:72px 90px minmax(150px,1fr) 65px;gap:8px}.backup-tree-card-meta span{min-width:0}.backup-tree-card-meta small{display:block;color:var(--muted);font-size:9px;margin-bottom:2px}.backup-tree-card-meta b{display:block;color:#b8c6d5;font-size:10.5px;font-weight:600;overflow-wrap:anywhere}
@media(max-width:820px){.backup-tree-card{grid-template-columns:1fr;margin-left:min(calc(var(--tree-depth) * 7px),70px)}.backup-tree-card-meta{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* R29：备案 Footer 固定在短页面可视底部；长页面自然跟随内容之后。 */
.page{min-height:100vh;display:flex;flex-direction:column}
.page>.site-legal-footer{margin-top:auto}
.login-page{overflow-x:hidden;overflow-y:auto}
.login-page .login-shell{min-height:0;flex:1 1 auto}


/* R30：项目备份折叠、账号动作对齐、会话按钮与日期控件统一字体。 */
.project-backups-collapse{margin-top:14px;padding:0;overflow:visible}
.project-backups-collapse>summary{display:flex;align-items:center;gap:6px;padding:13px 15px;cursor:pointer;list-style:none;color:#a4b5c8;font-size:13px;font-weight:650;user-select:none}
.project-backups-collapse>summary::-webkit-details-marker{display:none}
.project-backups-collapse>summary::before{content:"▼";display:inline-block;flex:0 0 auto;color:#6e8198;font-size:9px;transform:rotate(-90deg);transition:transform .15s ease}
.project-backups-collapse[open]>summary::before{transform:rotate(0deg)}
.project-backups-collapse>summary [data-backup-count]{margin-left:2px;color:#60758e;font-weight:500}
.project-backups-collapse[open]>summary{border-bottom:1px solid rgba(255,255,255,.055)}
.project-backups-body{padding:14px 15px 16px}
.project-backups-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:12px}
.project-backups-head>div{display:flex;min-width:0;flex-direction:column;gap:8px}
.project-backups-head .maintenance-chip{width:fit-content;max-width:100%;overflow-wrap:anywhere}
.account-security-card .form-grid{grid-template-columns:1fr}
.account-security-card .actions{width:100%;justify-content:flex-end;align-items:center;margin-top:2px}
.account-security-card .actions .button{margin-left:auto}
.session-table th,.session-table td{vertical-align:middle}
.session-table td form{display:flex;align-items:center;justify-content:flex-start;margin:0}
.session-table td .button{align-self:center;line-height:1.2}
.log-filter-grid input[type="datetime-local"],.log-filter-grid input[type="date"],.log-filter-grid input[type="time"]{font-family:"Microsoft YaHei","微软雅黑","PingFang SC",Arial,sans-serif!important;font-style:normal!important;font-variant:normal!important;font-feature-settings:normal!important;letter-spacing:0!important}
.log-filter-grid input[type="datetime-local"]::-webkit-datetime-edit,.log-filter-grid input[type="datetime-local"]::-webkit-datetime-edit-fields-wrapper,.log-filter-grid input[type="datetime-local"]::-webkit-datetime-edit-text,.log-filter-grid input[type="datetime-local"]::-webkit-datetime-edit-month-field,.log-filter-grid input[type="datetime-local"]::-webkit-datetime-edit-day-field,.log-filter-grid input[type="datetime-local"]::-webkit-datetime-edit-year-field,.log-filter-grid input[type="datetime-local"]::-webkit-datetime-edit-hour-field,.log-filter-grid input[type="datetime-local"]::-webkit-datetime-edit-minute-field,.log-filter-grid input[type="datetime-local"]::-webkit-datetime-edit-ampm-field{font-family:"Microsoft YaHei","微软雅黑","PingFang SC",Arial,sans-serif!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;font-feature-settings:normal!important;letter-spacing:0!important}
@media(max-width:760px){.project-backups-head{align-items:stretch;flex-direction:column}.project-backups-head>.button{width:100%}}

/* R31: table actions and log time filters use deterministic YaHei layout. */
.package-table-wrap .responsive-data-table td{vertical-align:middle}
.package-actions-cell{vertical-align:middle!important}
.package-delete-form{display:flex;align-items:center;justify-content:flex-start;min-height:32px;margin:0}
.package-delete-button{align-self:center;line-height:1.2}
.log-filter-grid .log-datetime-text{font-family:"Microsoft YaHei","微软雅黑","PingFang SC",Arial,sans-serif!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;font-feature-settings:normal!important;letter-spacing:0!important;font-kerning:none!important}
.python-env-relations{display:grid;gap:8px;margin-top:12px}.python-env-relation{display:grid;grid-template-columns:minmax(220px,1.25fr) minmax(120px,.55fr) minmax(0,1fr);gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:rgba(0,0,0,.12)}.python-env-relation strong{overflow-wrap:anywhere;font-size:11.5px}.python-env-relation .env-role{font-size:11px;color:#9fb0c2}.python-env-relation .env-refs{font-size:10.5px;color:var(--muted);overflow-wrap:anywhere}.python-env-relation.orphan{border-color:rgba(229,181,103,.18)}.python-env-relation.protected{border-color:rgba(97,208,149,.12)}@media(max-width:760px){.python-env-relation{grid-template-columns:1fr}.package-delete-form{justify-content:flex-end}}

/* R32：Project Ops Contract v2 / 统一 env GC / Hub 备份 / 本地中文日期时间选择器。 */
.system-hub-backup-card{grid-column:1/-1;padding:0}.system-hub-backup-card>summary{padding:13px 15px}.system-hub-backup-card .project-backups-body{padding:14px 15px 16px}.system-hub-backup-stepup{max-width:560px;margin:0 0 12px}.system-hub-backup-stepup .stepup-input-row{align-items:center}.system-hub-backup-stepup input{min-width:0}.system-hub-backup-list{display:grid;gap:8px;margin-top:10px}
.dependency-env-body{padding:13px 14px 15px}.dependency-env-list{display:grid;gap:8px;margin:10px 0}.dependency-env-card{display:grid;grid-template-columns:minmax(240px,1.35fr) minmax(260px,1fr);gap:12px;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:rgba(0,0,0,.12)}.dependency-env-card.reclaimable{border-color:rgba(97,208,149,.25)}.dependency-env-card.protected{border-color:rgba(229,181,103,.16)}.dependency-env-main{min-width:0}.dependency-env-main strong{display:block;font-size:11.5px}.dependency-env-main small{display:block;margin-top:4px;color:var(--muted);font-size:10px;overflow-wrap:anywhere}.dependency-env-meta{display:grid;grid-template-columns:minmax(120px,1fr) 90px auto;gap:8px;align-items:center;font-size:10.5px;color:#aab9c8}.dependency-env-gc{margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.055)}.dependency-env-gc>.actions{justify-content:flex-start}.dependency-env-gc>.actions>span{color:var(--muted);font-size:10.5px}.dependency-env-gc-confirm{display:grid;grid-template-columns:minmax(180px,.7fr) minmax(300px,1.3fr) auto;gap:10px;align-items:end;margin-top:10px}.dependency-env-gc-confirm>label{display:grid;gap:6px;color:var(--muted);font-size:10.5px}.dependency-env-gc-confirm .stepup-input-row{align-items:center}
.log-datetime-control{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center}.log-calendar-button{height:38px;padding:0 11px;border:1px solid var(--border);border-radius:9px;background:#121a25;color:#aebfd1;font-family:"Microsoft YaHei","微软雅黑","PingFang SC",Arial,sans-serif;font-size:11px;cursor:pointer}.log-calendar-button:hover{border-color:#49617a;color:#d5e1ed}.local-datetime-popover{position:absolute;right:0;top:calc(100% + 7px);z-index:80;width:286px;padding:12px;border:1px solid #29384a;border-radius:13px;background:#0c131d;color:#d9e4ef;box-shadow:0 18px 48px rgba(0,0,0,.48);font-family:"Microsoft YaHei","微软雅黑","PingFang SC",Arial,sans-serif}.calendar-head{display:grid;grid-template-columns:34px 1fr 34px;gap:6px;align-items:center}.calendar-head strong{text-align:center;font-size:12px}.calendar-head button,.calendar-day,.calendar-actions button{border:0;border-radius:8px;background:transparent;color:#aebfd1;font-family:inherit;cursor:pointer}.calendar-head button{height:30px;font-size:20px}.calendar-weekdays,.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.calendar-weekdays{margin:9px 0 4px}.calendar-weekdays span{text-align:center;color:#6f839a;font-size:9.5px}.calendar-day,.calendar-blank{height:30px}.calendar-day{font-size:10.5px}.calendar-day:hover{background:#182434}.calendar-day.selected{background:#2a425d;color:#f0f6fc;font-weight:700}.calendar-time{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:10px;padding-top:10px;border-top:1px solid rgba(255,255,255,.06)}.calendar-time select{width:68px;height:34px;font-family:inherit}.calendar-actions{display:flex;justify-content:flex-end;gap:7px;margin-top:10px}.calendar-actions button{padding:7px 10px;background:#131d29;font-size:10.5px}.calendar-actions button.primary{background:#28425e;color:#f2f7fc}
@media(max-width:760px){.dependency-env-card{grid-template-columns:1fr}.dependency-env-meta{grid-template-columns:1fr 80px auto}.dependency-env-gc-confirm{grid-template-columns:1fr}.local-datetime-popover{left:0;right:auto;width:min(286px,calc(100vw - 38px))}}

/* R37：Dependency 环境与项目维护卡片/表单统一；长保护原因不再塞入状态徽标。 */
.dependency-envs.project-backups-collapse{margin-top:12px;border-color:rgba(255,255,255,.07);background:rgba(255,255,255,.012)}
.dependency-envs.project-backups-collapse>summary{font-size:13px;color:#a9b9ca}
.dependency-envs.project-backups-collapse>summary [data-dependency-env-count]{margin-left:2px;color:#667b92;font-weight:500}
.dependency-env-body.project-backups-body{padding:14px 15px 16px}
.dependency-env-note{margin:0 0 12px;max-width:none;overflow-wrap:anywhere}
.dependency-env-list{gap:9px;margin:0}
.dependency-env-card{grid-template-columns:minmax(0,1fr) minmax(190px,.62fr) auto;gap:10px 14px;align-items:center;padding:12px 13px}
.dependency-env-main{align-self:center}
.dependency-env-main strong{font-size:12.5px;line-height:1.45}
.dependency-env-main small{margin-top:5px;font-size:11px;line-height:1.55;word-break:break-all}
.dependency-env-meta{display:grid;grid-template-columns:minmax(0,1fr) 86px;gap:8px;align-items:center;min-width:0;font-size:11px}
.dependency-env-role{min-width:0;overflow-wrap:anywhere;color:#aab9c8}
.dependency-env-size{text-align:right;white-space:nowrap;color:#889cb1}
.dependency-env-status{justify-self:end;margin:0!important}
.dependency-env-reason{grid-column:1/-1;margin:0;padding-top:9px;border-top:1px solid rgba(255,255,255,.045);color:#8f9fb0;font-size:10.5px;line-height:1.65;overflow-wrap:anywhere;word-break:break-word}
.dependency-env-gc.maintenance-card{margin-top:12px;padding:14px;border-color:rgba(255,255,255,.06);background:rgba(0,0,0,.10)}
.dependency-env-toolbar{margin:0;padding:0 0 11px;border-bottom:1px solid rgba(255,255,255,.05);align-items:center}
.dependency-env-toolbar .maintenance-selection-actions{align-items:center}
.dependency-env-gc-state{display:flex;min-height:30px;align-items:center;margin-left:auto;text-align:right;line-height:1.45}
.dependency-env-gc-confirm{display:grid;grid-template-columns:minmax(220px,1fr) minmax(320px,1fr) auto;gap:11px;align-items:end;margin-top:12px}
.dependency-env-gc-confirm>.field{min-width:0;gap:7px}
.dependency-env-gc-confirm>.field>label{display:flex;min-height:18px;align-items:center;color:#a9b8c7;font-size:12px}
.dependency-env-gc-confirm input{width:100%;min-width:0;min-height:42px;padding:9px 11px;border:1px solid var(--border);border-radius:11px;background:rgba(4,8,14,.55);color:var(--text);font:inherit;font-size:13px;outline:none}
.dependency-env-gc-confirm input:focus{border-color:var(--border-hover)}
.dependency-env-password-field .stepup-input-row{grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
.dependency-env-password-field .stepup-input-row input,.dependency-env-password-field .stepup-input-row .button{min-height:42px}
.dependency-env-password-field .stepup-input-row .button{padding-inline:12px}
.dependency-env-execute{display:flex;align-items:flex-end;justify-content:flex-end;min-height:67px}
.dependency-env-execute .button{min-height:42px;white-space:nowrap}
@media(max-width:860px){.dependency-env-card{grid-template-columns:minmax(0,1fr) auto}.dependency-env-meta{grid-column:1/2;grid-row:2;grid-template-columns:minmax(0,1fr) 86px}.dependency-env-status{grid-column:2/3;grid-row:1/3}.dependency-env-gc-confirm{grid-template-columns:1fr 1fr}.dependency-env-execute{grid-column:1/-1;min-height:0;justify-content:flex-end}.dependency-env-execute .button{min-width:150px}}
@media(max-width:620px){.dependency-env-body.project-backups-body{padding:12px}.dependency-env-card{grid-template-columns:1fr;gap:8px;padding:11px}.dependency-env-meta{grid-column:auto;grid-row:auto;grid-template-columns:minmax(0,1fr) auto}.dependency-env-status{grid-column:auto;grid-row:auto;justify-self:start}.dependency-env-reason{padding-top:8px}.dependency-env-toolbar{align-items:stretch;flex-direction:column}.dependency-env-toolbar .maintenance-selection-actions{width:100%}.dependency-env-toolbar .maintenance-selection-actions .button{width:100%}.dependency-env-gc-state{width:100%;min-height:auto;margin:0;text-align:left}.dependency-env-gc-confirm{grid-template-columns:1fr}.dependency-env-password-field .stepup-input-row{grid-template-columns:1fr}.dependency-env-password-field .stepup-input-row .button,.dependency-env-execute .button{width:100%}.dependency-env-execute{grid-column:auto}}
/* v2.1.3 · 管理员可调旧版本保留策略。 */
.release-retention-settings{margin:0 0 14px;padding:14px;background:rgba(0,0,0,.10)}
.release-retention-grid{display:grid;grid-template-columns:minmax(150px,.55fr) minmax(190px,.75fr) minmax(300px,1.25fr) auto;gap:10px;align-items:end}
.release-retention-grid .field{min-width:0}.release-retention-grid input{min-height:42px}
.retention-password-field .stepup-input-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
.retention-password-field .stepup-input-row input,.retention-password-field .stepup-input-row .button{min-height:42px}
.release-retention-save{display:flex;align-items:end}.release-retention-save .button{min-height:42px;white-space:nowrap}
@media(max-width:900px){.release-retention-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.retention-password-field{grid-column:1/-1}.release-retention-save{grid-column:1/-1}.release-retention-save .button{width:100%}}
@media(max-width:620px){.release-retention-grid{grid-template-columns:1fr}.retention-password-field,.release-retention-save{grid-column:auto}.retention-password-field .stepup-input-row{grid-template-columns:1fr}.retention-password-field .stepup-input-row .button{width:100%}}

/* v2.1.6 hotfix: unified ops proportions + configurable session policy */
.ops-action-field{grid-column:span 1}.ops-package-field{grid-column:span 2;min-width:0}.ops-package-field select{display:block;width:100%;max-width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.session-policy-form .notice.compact{margin:0}.session-policy-note{margin-top:2px}@media(max-width:1050px){.ops-package-field{grid-column:span 1}}@media(max-width:760px){.ops-action-field,.ops-package-field{grid-column:auto}}

/* Hotfix5：系统 Python 业务项目环境总览复用 Dependency 环境的折叠/详情视觉契约。 */
.python-project-env-details{margin:0;border-color:rgba(255,255,255,.065);background:rgba(0,0,0,.10)}
.python-project-env-details>summary.python-project-env-summary{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 14px}
.python-project-env-summary-main{display:grid;min-width:0;gap:3px}.python-project-env-summary-main strong{font-size:12px;color:#c1cedb}.python-project-env-summary-main small{font-size:10.5px;color:var(--muted)}
.python-project-env-summary-state{flex:0 0 auto;color:#8ea2b7;font-size:10.5px}.python-project-env-body{padding:12px 13px 14px}.python-project-env-metrics{margin-bottom:10px}.python-project-env-list{margin:0}.python-project-legacy-list{display:grid;gap:6px;margin-top:10px;padding:10px 12px;border:1px solid rgba(229,181,103,.14);border-radius:11px;background:rgba(229,181,103,.025)}.python-project-legacy-list strong{font-size:10.5px;color:#b9a172}.python-project-legacy-list span{font-size:10px;color:var(--muted);overflow-wrap:anywhere}
@media(max-width:620px){.python-project-env-details>summary.python-project-env-summary{align-items:flex-start;flex-direction:column}.python-project-env-summary-state{white-space:normal}}

/* Hotfix6：系统 Python / 单项目 Dependency 共用同一信息对齐契约。 */
.dependency-summary-card{text-align:left}
.dependency-summary-card>span{display:block;text-align:left}
.dependency-summary-card>strong{display:block;text-align:left}
.dependency-env-card,.dependency-env-main,.dependency-env-meta,.dependency-env-reason{text-align:left}
.dependency-env-meta{justify-items:stretch}
.dependency-env-size{text-align:right}
.dependency-env-status{justify-self:end;white-space:nowrap}
.dependency-env-section-head{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:2px 0 10px;padding-bottom:9px;border-bottom:1px solid rgba(255,255,255,.05)}
.dependency-env-section-head>strong{font-size:11.5px;color:#b9c7d5;text-align:left}
.python-project-env-jump{flex:0 0 auto;text-decoration:none}
.python-project-env-summary-main,.python-project-env-summary-main strong,.python-project-env-summary-main small{text-align:left}
.python-project-env-summary-state{margin-left:auto;text-align:right;white-space:nowrap}
.python-runtime-hub-envs{margin-top:12px}
.python-runtime-binding{margin-top:0}
@media(max-width:620px){.dependency-env-section-head{align-items:flex-start;flex-direction:column}.python-project-env-jump{width:100%;text-align:center}.python-project-env-summary-state{margin-left:0;text-align:left;white-space:normal}.dependency-env-status{justify-self:start}}

.python-runtime-grid .dependency-summary-card:nth-child(4){grid-column:1/-1}.python-runtime-grid .dependency-summary-card:nth-child(4)>strong{overflow:visible;overflow-wrap:anywhere;word-break:break-all;white-space:normal;text-overflow:clip}


/* Hotfix8：顶部导航固定；只有正文区域纵向滚动。 */
.page{height:100vh;height:100dvh;min-height:0;padding:22px 0 0;display:flex;flex-direction:column;overflow:hidden}
.page>.topbar{flex:0 0 auto;margin-bottom:0;padding:0 4px 18px;border-bottom:1px solid rgba(255,255,255,.055)}
.page-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-gutter:stable;padding:30px 4px 56px;display:flex;flex-direction:column}
.page-scroll>.site-legal-footer{margin-top:auto}
#project-permissions{scroll-margin-top:20px}
/* Hotfix8：系统 Python 业务项目总览所有摘要文字统一从左侧连续排列。 */
.python-project-env-details>summary.python-project-env-summary{justify-content:flex-start;align-items:flex-start;flex-wrap:wrap}
.python-project-env-summary-state{margin-left:0!important;text-align:left!important;white-space:normal!important}
@media(max-width:760px){.page{width:min(100% - 22px,1120px);padding-top:14px}.page>.topbar{padding-bottom:12px}.page-scroll{padding-top:22px;padding-bottom:38px}.topbar{align-items:flex-start}}


/* Hotfix9：固定完整 Header；body 本身不滚动，所有继承 base.html 的登录后页面只滚动正文。 */
html,body{height:100%;max-height:100%;overflow:hidden!important}
body{height:100vh;height:100dvh;min-height:0!important}
.page{height:100%!important;max-height:100dvh;min-height:0!important;overflow:hidden!important}
.page>.topbar{position:relative;z-index:40;flex:0 0 auto}
.page-scroll{position:relative;z-index:1;flex:1 1 auto;min-height:0;overflow-y:auto!important;overflow-x:hidden!important;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain}
/* Dependency 卡片全局统一左侧信息流：名称/路径一行块；角色、占用、状态从左向右连续排列。 */
.dependency-env-card{grid-template-columns:auto auto minmax(0,1fr)!important;justify-content:start!important;align-items:start!important;text-align:left!important}
.dependency-env-main{grid-column:1/-1!important;text-align:left!important}
.dependency-env-meta{grid-column:1!important;grid-row:auto!important;display:flex!important;flex-wrap:wrap!important;justify-content:flex-start!important;justify-items:start!important;gap:6px 14px!important;width:max-content;max-width:100%;text-align:left!important}
.dependency-env-role,.dependency-env-size{display:inline-flex!important;text-align:left!important;white-space:normal!important}
.dependency-env-status{grid-column:2!important;grid-row:auto!important;justify-self:start!important;align-self:center!important;margin:0!important;text-align:left!important}
.dependency-env-reason{grid-column:1/-1!important;text-align:left!important}
.python-project-env-details>summary.python-project-env-summary{display:grid!important;grid-template-columns:auto auto minmax(0,1fr)!important;justify-content:start!important;justify-items:start!important;text-align:left!important}
.python-project-env-summary-main{grid-column:1!important;display:grid!important;width:auto!important;text-align:left!important}
.python-project-env-summary-state{grid-column:2!important;align-self:end!important;margin:0!important;padding-left:12px;text-align:left!important;white-space:normal!important}
.project-validity{font-weight:600;color:#c9d5e2;white-space:nowrap}
@media(max-width:620px){.dependency-env-card{grid-template-columns:1fr!important}.dependency-env-main,.dependency-env-meta,.dependency-env-status,.dependency-env-reason{grid-column:1!important}.dependency-env-meta{width:100%}.python-project-env-details>summary.python-project-env-summary{grid-template-columns:1fr!important}.python-project-env-summary-main,.python-project-env-summary-state{grid-column:1!important;padding-left:0!important}}

/* Hotfix10：当前授权权限标签可进入编辑态，不再表现为无响应的伪按钮。 */
.grant-edit-trigger{appearance:none;-webkit-appearance:none;width:100%;border:1px solid transparent;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:10px;padding:4px;transition:border-color .16s ease,background .16s ease}
.grant-edit-trigger:hover,.grant-edit-trigger:focus-visible{border-color:rgba(111,168,255,.28);background:rgba(111,168,255,.055);outline:none}
.grant-edit-label{color:#8fb8ed!important;border-color:rgba(111,168,255,.22)!important;background:rgba(111,168,255,.08)!important}
.grant-user-row.is-editing{background:rgba(111,168,255,.055);box-shadow:inset 3px 0 0 rgba(111,168,255,.55)}
.grant-save-actions [data-grant-edit-cancel][hidden]{display:none!important}


/* Hotfix11：全站统一滚动模型。
   浏览器页面负责纵向滚动；主 Header sticky；系统运维二级菜单 sticky。
   取消历史 100dvh + overflow:hidden + 内部 page-scroll 滚动链，避免部分页面失去纵向滚动。 */
html{height:auto!important;max-height:none!important;min-height:100%;overflow-x:hidden!important;overflow-y:auto!important;scroll-behavior:smooth}
body{height:auto!important;max-height:none!important;min-height:100vh!important;min-height:100dvh!important;overflow-x:hidden!important;overflow-y:auto!important}
body.login-page{overflow-y:auto!important}
.page{display:block!important;height:auto!important;max-height:none!important;min-height:100vh!important;min-height:100dvh!important;overflow:visible!important;padding:0 0 56px!important}
.page>.topbar{position:sticky!important;top:0;z-index:100;min-height:58px;margin:0!important;padding:14px 4px!important;border-bottom:1px solid rgba(255,255,255,.07)!important;background:rgba(7,10,15,.92);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 10px 28px rgba(0,0,0,.16)}
.page-scroll{display:block!important;height:auto!important;max-height:none!important;min-height:0!important;overflow:visible!important;padding:30px 4px 0!important;overscroll-behavior:auto!important;scrollbar-gutter:auto!important}
.page-scroll>.site-legal-footer{margin-top:42px!important}
#project-permissions{scroll-margin-top:calc(var(--hub-topbar-height,64px) + 18px)}

/* 系统运维导航不再横向滑动；固定在主 Header 下方。 */
.system-tabs{position:sticky!important;top:calc(var(--hub-topbar-height,64px) + 6px);z-index:90;display:grid!important;grid-template-columns:repeat(8,minmax(0,1fr));gap:6px!important;margin:0 0 16px!important;padding:6px!important;overflow:visible!important;scrollbar-width:none;background:rgba(10,15,23,.96)!important;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);box-shadow:0 10px 24px rgba(0,0,0,.16)}
.system-tabs::-webkit-scrollbar{display:none}
.system-tab{display:flex!important;align-items:center;justify-content:center;min-width:0!important;min-height:38px;text-align:center;white-space:normal!important;line-height:1.25}
@media(max-width:1020px){.system-tabs{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:620px){.page{width:min(100% - 20px,1120px)!important}.page>.topbar{padding:10px 2px!important}.page-scroll{padding-top:20px!important}.system-tabs{grid-template-columns:repeat(2,minmax(0,1fr));top:calc(var(--hub-topbar-height,58px) + 4px)}.system-tab{font-size:11.5px}}

/* Hotfix11：首次注册采用与项目管理/系统运维一致的中文结构化控制台。 */
.registration-console{overflow:visible!important}
.registration-heading{margin-bottom:14px}
.registration-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:4px 0 16px}
.registration-step{display:flex;min-width:0;align-items:center;gap:10px;padding:11px 12px;border:1px solid rgba(255,255,255,.06);border-radius:12px;background:rgba(255,255,255,.012)}
.registration-step>span{display:grid;flex:0 0 26px;width:26px;height:26px;place-items:center;border:1px solid rgba(111,168,255,.20);border-radius:8px;background:rgba(111,168,255,.055);color:#8db7ec;font-size:10px;font-weight:800}
.registration-step>div{min-width:0}.registration-step strong{display:block;color:#bdcad8;font-size:11.5px}.registration-step small{display:block;margin-top:3px;color:#65778c;font-size:9.5px;line-height:1.45}
.registration-step.active{border-color:rgba(111,168,255,.18);background:rgba(111,168,255,.035)}
.registration-upload-form{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;align-items:start;padding:14px;border:1px solid rgba(255,255,255,.065);border-radius:14px;background:rgba(0,0,0,.10)}
.registration-file-field{display:grid;min-width:0;gap:7px;color:#a9b8c8;font-size:11.5px}.registration-file-field input{width:100%;min-height:42px;padding:8px 10px;border:1px solid var(--border);border-radius:11px;background:rgba(4,8,14,.55);color:#aebed0;font:inherit;font-size:11px}.registration-file-field small{color:#66798f;font-size:9.5px;line-height:1.5}
.registration-preview-button{justify-self:start;min-width:220px;min-height:42px;white-space:nowrap}.registration-trust-note{flex:0 0 auto;white-space:nowrap}
.registration-preview{margin-top:16px;padding:16px;border:1px solid rgba(111,168,255,.14);border-radius:15px;background:rgba(111,168,255,.022)}
.registration-preview-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid rgba(255,255,255,.05)}.registration-preview-head h3{margin:2px 0 0;color:#d2dfec;font-size:14px}
.registration-summary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.registration-summary-item{min-width:0;padding:10px 11px;border:1px solid rgba(255,255,255,.055);border-radius:10px;background:rgba(0,0,0,.10)}.registration-summary-item.wide{grid-column:1/-1}.registration-summary-item>span{display:block;margin-bottom:5px;color:#657991;font-size:9.5px}.registration-summary-item>strong{display:block;overflow-wrap:anywhere;color:#b9c8d8;font-size:11.5px;line-height:1.55;font-weight:620}.registration-summary-item.mono>strong{font-family:"Microsoft YaHei","微软雅黑",sans-serif;font-size:10.5px}.registration-summary-item>pre{max-height:180px;margin:0;overflow:auto;color:#aebed0;font:10px/1.55 "Microsoft YaHei","微软雅黑",sans-serif;white-space:pre-wrap;overflow-wrap:anywhere}
.registration-safety-note{display:flex;flex-direction:column;gap:5px;margin-top:12px}.registration-safety-note b{color:#dec18e}.registration-commit-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px;padding-top:14px;border-top:1px solid rgba(255,255,255,.05)}.registration-commit-form .full-actions{grid-column:1/-1;margin-top:0}.registration-result{margin-top:12px;min-height:20px;color:#8799ad;font-size:11px;line-height:1.6}.registration-result.good{color:#91d5ad}.registration-result.bad{color:#e0a0a0}
@media(max-width:760px){.registration-steps{grid-template-columns:1fr}.registration-upload-form{grid-template-columns:1fr}.registration-preview-button{width:100%;min-width:0}.registration-summary-grid,.registration-commit-form{grid-template-columns:1fr}.registration-summary-item.wide,.registration-commit-form .full-actions{grid-column:auto}}

/* Hotfix16：主导航使用真实 fixed 定位，不再依赖根滚动容器对 sticky 的浏览器差异。 */
html{overflow-x:hidden!important;overflow-y:visible!important}
body{overflow-x:hidden!important;overflow-y:visible!important}
.page{padding-top:calc(var(--hub-topbar-height,70px) + 22px)!important}
.page>.topbar{position:fixed!important;top:0!important;left:50%!important;transform:translateX(-50%)!important;width:min(calc(100% - 32px),1120px)!important;z-index:200!important;min-height:0!important;margin:0!important;padding:18px 4px 14px!important;border-bottom:1px solid rgba(255,255,255,.065)!important;background:linear-gradient(180deg,rgba(16,22,32,.95) 0%,rgba(11,16,24,.93) 100%)!important;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 10px 28px rgba(0,0,0,.14),inset 0 -1px 0 rgba(111,168,255,.025)!important}
.page-scroll{padding-top:8px!important}
.system-tabs{top:calc(var(--hub-topbar-height,70px) + 6px)!important}
.registration-preview-button{justify-self:end!important}
.session-selection-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 10px;padding:9px 10px;border:1px solid rgba(255,255,255,.055);border-radius:11px;background:rgba(0,0,0,.09)}
.session-selection-toolbar .maintenance-selection-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.session-selection-state{color:#74869a;font-size:10.5px}
.session-select-col{width:58px;text-align:center!important}.session-select-col input{width:16px;height:16px;accent-color:#6fa8ff;cursor:pointer}.session-select-col input:disabled{cursor:not-allowed;opacity:.35}
.session-batch-result{margin-top:10px}.session-batch-result.good{color:#91d5ad}.session-batch-result.bad{color:#e0a0a0}
@media(max-width:760px){.page{padding-top:calc(var(--hub-topbar-height,92px) + 14px)!important}.page>.topbar{width:min(calc(100% - 22px),1120px)!important;padding:12px 2px 10px!important}.registration-preview-button{justify-self:stretch!important;width:100%}.session-selection-toolbar{align-items:stretch;flex-direction:column}.session-selection-toolbar .maintenance-selection-actions .button{flex:1 1 auto}}

/* Hotfix17：统一首次注册、站点设置、登录设置与证书续期表单对齐；注册预览支持服务端恢复。 */
.registration-upload-form{display:grid!important;grid-template-columns:1fr!important;gap:8px!important}
.registration-upload-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(210px,240px);gap:12px;align-items:end}
.registration-file-field{min-width:0}
.registration-file-field input,.registration-preview-button{height:42px;min-height:42px!important}
.registration-preview-button{width:100%;min-width:0!important;justify-self:stretch!important;white-space:nowrap}
.registration-upload-help{display:block;color:#66798f;font-size:9.5px;line-height:1.5}
.registration-commit-form .full-actions{justify-content:flex-end!important;align-items:center}
.registration-commit-form .full-actions .button{min-width:180px}

.system-form-grid[data-action="site_profile_publish"] .site-publish-action{align-self:end}
.system-form-grid[data-action="site_profile_publish"] .site-publish-action .actions{min-height:42px;margin:0;align-items:center;justify-content:flex-end}

.session-policy-form{display:grid!important;grid-template-columns:minmax(0,1fr)!important;gap:12px!important}
.session-policy-fields{display:grid;grid-template-columns:minmax(0,1fr);gap:12px}
.session-policy-fields .field{width:100%}
.session-policy-saved{margin:0}
.session-policy-action-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;align-items:center}
.session-policy-action-row .session-policy-note{margin:0;min-width:0}
.session-policy-save{justify-self:end;align-self:center;min-width:132px;white-space:nowrap}

.system-card-form.certificate-renew-form{grid-template-columns:minmax(0,1fr)!important;gap:10px!important}
.system-card-form.certificate-renew-form>.actions{grid-column:1!important;justify-content:flex-start!important;margin:0!important}
.system-card-form.certificate-renew-form .field{width:100%;min-width:0}
.system-card-form.certificate-renew-form .field input{width:100%;max-width:100%}

@media(max-width:760px){
  .registration-upload-row{grid-template-columns:1fr}
  .registration-preview-button{width:100%}
  .registration-commit-form .full-actions .button{width:100%}
  .system-form-grid[data-action="site_profile_publish"] .site-publish-action .actions{justify-content:stretch}
  .system-form-grid[data-action="site_profile_publish"] .site-publish-action .button{width:100%}
  .session-policy-action-row{grid-template-columns:1fr}
  .session-policy-save{justify-self:stretch;width:100%}
}


/* Hotfix19：修复 Hotfix18 字面量换行污染；系统表单与首次注册使用浏览器可解析的最终布局契约。 */
/* 站点设置：发布按钮位于右列（公安备案链接列）中央，宽度更舒展。 */
.system-form-grid[data-action="site_profile_publish"] .site-publish-action{align-self:end;min-width:0}
.system-form-grid[data-action="site_profile_publish"] .site-publish-action .actions{min-height:42px;margin:0;align-items:center;justify-content:center!important}
.system-form-grid[data-action="site_profile_publish"] .site-publish-button{width:min(92%,300px);min-width:220px;min-height:42px;justify-content:center}

/* 登录设置：三个字段 + 保存按钮同排，说明占下一整行并跟随整体宽度。 */
.session-policy-form{display:grid!important;grid-template-columns:minmax(0,1fr)!important;gap:14px!important}
.session-policy-fields{display:grid!important;grid-template-columns:minmax(145px,.72fr) minmax(175px,.9fr) minmax(220px,1.2fr) minmax(150px,.72fr)!important;gap:14px!important;align-items:end;width:100%}
.session-policy-fields .field{width:100%;min-width:0}
.session-policy-save-field{display:flex!important;flex-direction:column;justify-content:flex-end;min-width:0}
.session-policy-save-field>label{visibility:hidden}
.session-policy-save{width:100%;min-height:42px;justify-content:center;white-space:nowrap}
.session-policy-saved,.session-policy-note{width:100%;box-sizing:border-box;margin:0!important}

/* HTTPS：两张操作卡统一纵向结构，主按钮在卡片底部同一基线。 */
.certificate-action-card{display:flex!important;min-width:0;flex-direction:column}
.certificate-action-form{display:flex!important;flex:1 1 auto;min-width:0;flex-direction:column;gap:10px!important}
.certificate-action-form>.actions{display:flex!important;grid-column:auto!important;margin-top:auto!important;padding-top:10px;align-items:flex-end}
.certificate-action-form .field{width:100%;min-width:0}
.certificate-action-form .field input{width:100%;max-width:100%}

/* 首次注册：确认标识自动填入；批准后展示真实 Root Ops Job 日志。 */
.registration-ops-log{margin-top:16px}
.registration-ops-log[hidden]{display:none!important}
.registration-ops-log .ops-live-log{min-height:180px;max-height:420px}
.registration-ops-log .ops-log-head h3{margin-top:3px}

@media(max-width:1050px){
  .session-policy-fields{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .session-policy-save-field{align-self:end}
}
@media(max-width:700px){
  .system-form-grid[data-action="site_profile_publish"] .site-publish-button{width:100%;min-width:0}
  .session-policy-fields{grid-template-columns:1fr!important}
  .session-policy-save-field{width:100%}
  .certificate-action-form>.actions .button{width:100%}
}


/* Hotfix29：全站圆圈 i 提示统一 fixed viewport 定位；星期授权改为直接勾选，不暴露内部位掩码。 */
.info-tooltip-portal .info-tip[data-tooltip]::before,.info-tooltip-portal .info-tip[data-tooltip]::after{display:none!important;content:none!important}
.global-info-tooltip{position:fixed;z-index:10000;box-sizing:border-box;width:max-content;max-width:min(320px,calc(100vw - 20px));padding:8px 10px;border:1px solid rgba(122,164,210,.25);border-radius:9px;background:rgba(11,17,25,.985);box-shadow:0 12px 32px rgba(0,0,0,.42);color:#b8c8d9;font:500 11px/1.55 "Microsoft YaHei","微软雅黑","PingFang SC",Arial,sans-serif;white-space:normal;overflow-wrap:anywhere;pointer-events:none}
.global-info-tooltip[hidden]{display:none!important}
.weekday-field{grid-column:1/-1}.weekday-selector{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:7px}.weekday-option{display:flex!important;min-height:38px;align-items:center;justify-content:center;gap:6px;padding:7px 8px;border:1px solid var(--border);border-radius:10px;background:rgba(255,255,255,.018);color:#9fb1c4!important;cursor:pointer;user-select:none}.weekday-option input{width:15px!important;height:15px!important;min-height:0!important;margin:0;accent-color:#6fa8ff}.weekday-option:has(input:checked){border-color:rgba(111,168,255,.28);background:rgba(111,168,255,.08);color:#d0deed!important}.weekday-option span{font-size:11.5px;white-space:nowrap}
@media(max-width:760px){.weekday-selector{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:460px){.weekday-selector{grid-template-columns:repeat(2,minmax(0,1fr))}}


/* R30：安全项目信息编辑 + 当前项目授权视觉整理。 */
.registered-project-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.project-profile-panel{scroll-margin-top:88px}.project-profile-form{grid-template-columns:repeat(2,minmax(0,1fr));align-items:end}.project-profile-form textarea{min-height:92px;resize:vertical}.project-profile-boundary{margin-top:15px;border-top:1px solid rgba(255,255,255,.06);padding-top:12px}.project-profile-boundary>summary{cursor:pointer;color:#90a4ba;font-size:11px;font-weight:680}.project-profile-readonly-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:11px}.project-profile-readonly-grid>div{display:grid;gap:5px;padding:10px 11px;border:1px solid rgba(255,255,255,.055);border-radius:10px;background:rgba(0,0,0,.11);min-width:0}.project-profile-readonly-grid small{color:#708298;font-size:10px}.project-profile-readonly-grid code{overflow-wrap:anywhere;white-space:normal;color:#b8c9dc;font-size:10.5px}
.current-grants-panel .section-heading{align-items:flex-end;gap:16px}.current-grants-panel .section-heading h2{font-size:20px}.grant-view-tools{align-items:flex-end;gap:9px}.grant-view-tools .section-note{display:inline-flex;align-items:center;min-height:38px;padding:7px 11px;border:1px solid rgba(255,255,255,.07);border-radius:9px;background:rgba(255,255,255,.025);font-size:12px;font-weight:700;color:#9fb3c8}.grant-view-tools select{min-width:150px;min-height:38px;padding:7px 11px;font-size:12px}.grant-project-head{padding:14px 16px}.grant-project-title{display:flex!important;align-items:center!important;gap:11px!important}.grant-project-head h3{font-size:15px;margin-bottom:3px}.grant-project-head small{font-size:10.5px}.grant-count-badge{padding:6px 10px;font-size:11.5px}.grant-user-row{grid-template-columns:minmax(210px,.9fr) minmax(245px,1.05fr) minmax(360px,1.55fr);gap:16px;padding:15px 16px;align-items:center}.grant-user-identity{gap:8px}.grant-user-identity>b{font-size:13px;line-height:1.45;white-space:normal}.grant-user-badges{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.grant-user-badges .role-badge,.grant-user-badges .status-badge{min-height:26px;display:inline-flex;align-items:center;padding:5px 9px;font-size:10.5px}.grant-time{gap:5px}.grant-time small{font-size:10px}.grant-time b{font-size:12.5px}.grant-time span{font-size:11.5px;line-height:1.5;color:#8799ad}.grant-user-row .grant-edit-trigger.permission-tags{display:flex;flex-wrap:wrap;align-items:center;align-content:center;gap:7px;width:100%;padding:6px}.grant-user-row .permission-tags span{padding:6px 9px;font-size:11px;white-space:nowrap}.grant-user-row .grant-edit-label{margin-left:auto}.current-grants-panel .grant-project-card{border-color:rgba(255,255,255,.085)}
@media(max-width:1050px){.grant-user-row{grid-template-columns:minmax(190px,.9fr) minmax(230px,1.1fr)}.grant-user-row .grant-edit-trigger.permission-tags{grid-column:1/-1}.grant-user-row .grant-edit-label{margin-left:0}}
@media(max-width:760px){.project-profile-form,.project-profile-readonly-grid{grid-template-columns:1fr}.current-grants-panel .section-heading{align-items:stretch;flex-direction:column}.grant-view-tools{width:100%;align-items:center;justify-content:flex-start}.grant-view-tools .section-note{min-height:36px}.grant-view-tools select{flex:1;min-width:0}.grant-user-row{grid-template-columns:1fr}.grant-user-row .grant-edit-trigger.permission-tags{grid-column:auto}.registered-project-actions{justify-content:flex-start}}

/* R31 · 统一语义字号 / 横向菜单 / 紧凑布局 */
:root{--font-page-title:clamp(30px,4.5vw,48px);--font-section-title:20px;--font-subsection-title:15px;--font-body:13px;--font-label:12px;--font-meta:12px;--font-help:11.5px;--tab-height:44px}
.hero.admin-hero{margin-bottom:16px}.admin-hero h1{font-size:var(--font-page-title)}
.field label,.param-label{font-size:var(--font-label)!important;font-weight:650;color:#b9c8d8}.field-help,.section-description{font-size:var(--font-help);line-height:1.65}.summary-card span{font-size:var(--font-meta)!important}.summary-card b{font-size:18px}.section-heading h2{font-size:var(--font-section-title)}.section-heading h3,.settings-group h3{font-size:var(--font-subsection-title)}
.status-badge,.role-badge,.permission-tags span,.grant-count-badge{font-size:12px!important}.button.small,.compact-button{font-size:12px!important}.project-profile-readonly-grid .param-label,.project-profile-readonly-grid small{font-size:12px!important}.project-profile-readonly-grid code{font-size:12px!important;line-height:1.55}.grant-time small,.grant-project-head small{font-size:11.5px!important}.grant-time span{font-size:12px!important}.grant-user-badges .role-badge,.grant-user-badges .status-badge{font-size:12px!important}
.project-identity-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:-4px 0 12px;color:#92a5b9;font-size:12px}.project-identity-line code{color:#c1d0df}.status-inline.good{color:#89d6aa}
.horizontal-tabs,.subnav-tabs{position:sticky;top:calc(var(--hub-topbar-height,70px) + 6px);z-index:30;display:flex;align-items:stretch;gap:4px;min-height:var(--tab-height);margin:0 0 14px;padding:4px;border:1px solid var(--border);border-radius:13px;background:rgba(8,13,20,.92);backdrop-filter:blur(16px);overflow:auto hidden;scrollbar-width:thin}.horizontal-tabs button,.subnav-tabs button{flex:0 0 auto;min-height:36px;padding:7px 14px;border:0;border-radius:9px;background:transparent;color:#91a4b8;font:inherit;font-size:13px;font-weight:650;white-space:nowrap;cursor:pointer}.horizontal-tabs button:hover,.subnav-tabs button:hover{background:rgba(255,255,255,.04);color:#d7e4f0}.horizontal-tabs button.active,.subnav-tabs button.active{background:rgba(111,168,255,.14);color:#dcecff;box-shadow:inset 0 -2px 0 var(--accent)}
.tab-panel[hidden]{display:none!important}.tab-panel>.panel:first-child,.tab-panel>section:first-child,.tab-panel>details:first-child{margin-top:0}.project-detail-panels{min-height:260px}.compact-state-grid{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:0}.overview-kv{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;margin:0}.overview-kv>div{display:grid;grid-template-columns:140px minmax(0,1fr);gap:12px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.055)}.overview-kv dt{color:#8fa1b4;font-size:12px}.overview-kv dd{margin:0;color:#d6e0ea;font-size:13px;min-width:0;overflow-wrap:anywhere}
.settings-group{padding:16px 0;border-top:1px solid rgba(255,255,255,.065)}.settings-group:first-of-type{border-top:0;padding-top:0}.settings-group-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:13px}.settings-group-head h3{margin:0 0 5px}.settings-group-head p{max-width:820px;margin:0;color:var(--muted);font-size:12px;line-height:1.65}.security-level{display:inline-flex;align-items:center;min-height:28px;padding:5px 9px;border:1px solid var(--border);border-radius:999px;font-size:12px;white-space:nowrap}.security-level.level-a{color:#9eddb9;border-color:rgba(97,208,149,.25)}.security-level.level-b{color:#dec08b;border-color:rgba(229,181,103,.25)}.security-level.level-c{color:#aab8c8}.semantic-readonly-grid .wide{grid-column:1/-1}.config-preview{padding:11px 12px;border:1px solid rgba(111,168,255,.22);border-radius:10px;background:rgba(111,168,255,.06);color:#a9c8ef;font-size:12px;line-height:1.6}.config-actions{gap:8px}.project-config-form .ops-log-shell{margin-top:2px}.project-config-form .op-result{min-height:24px}
.account-summary-strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:0 0 14px}.account-summary-strip>div{min-width:0;padding:10px 12px;border:1px solid var(--border);border-radius:11px;background:rgba(255,255,255,.025)}.account-summary-strip span{display:block;color:#8295aa;font-size:11.5px}.account-summary-strip b{display:block;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.compact-account-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.registry-heading-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-left:auto;text-align:right}.project-registry-table .project-manage-cell,.project-registry-table td:last-child{text-align:center;vertical-align:middle}.project-registry-table td:last-child .button{min-width:74px}
.global-info-tooltip{max-width:min(360px,calc(100vw - 20px))!important;font-size:12px!important;line-height:1.6!important;overflow-wrap:anywhere}
@media(max-width:860px){.compact-state-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.account-summary-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.compact-account-grid{grid-template-columns:1fr}.overview-kv{grid-template-columns:1fr}.project-profile-readonly-grid{grid-template-columns:1fr}.semantic-readonly-grid .wide{grid-column:auto}}
@media(max-width:620px){.page{width:min(100% - 20px,1120px)}.horizontal-tabs,.subnav-tabs{top:calc(var(--hub-topbar-height,58px) + 4px);margin-left:-2px;margin-right:-2px}.horizontal-tabs button,.subnav-tabs button{padding-inline:12px}.compact-state-grid,.account-summary-strip{grid-template-columns:1fr}.form-grid,.project-profile-form{grid-template-columns:1fr}.field.full,.full-actions{grid-column:auto}.settings-group-head{flex-direction:column}.overview-kv>div{grid-template-columns:1fr;gap:4px}.project-identity-line{font-size:11.5px}}

/* R31：系统运维复用公共横向 Tab；全宽度保持单行横向滚动，禁止旧 Hotfix11 网格折行。 */
.system-tabs.horizontal-tabs{top:calc(var(--hub-topbar-height,70px) + 6px)!important;display:flex!important;grid-template-columns:none!important;align-items:stretch!important;gap:4px!important;min-height:var(--tab-height)!important;margin:0 0 14px!important;padding:4px!important;overflow:auto hidden!important;background:rgba(8,13,20,.92)!important;box-shadow:none!important}
.system-tabs.horizontal-tabs .system-tab{display:flex!important;flex:0 0 auto!important;min-width:max-content!important;min-height:36px!important;padding:7px 14px!important;border:0!important;white-space:nowrap!important;font-size:13px!important;line-height:1.3!important}
.system-tab-panels>.system-admin-panel[hidden]{display:none!important}
@media(max-width:620px){.system-tabs.horizontal-tabs{top:calc(var(--hub-topbar-height,58px) + 4px)!important;grid-template-columns:none!important}.system-tabs.horizontal-tabs .system-tab{font-size:13px!important;padding-inline:12px!important}}

/* R31 HOTFIX2：注册新项目固定置于项目清单上方；已登记项目数量右对齐。 */
.registry-editor-panel{margin-top:16px;margin-bottom:16px}.registry-overview-panel{margin-top:0}.registry-heading-actions .section-note{display:inline-flex;justify-content:flex-end;min-width:72px;text-align:right}

/* R31 HOTFIX7：主 Header 与页面统一使用黑蓝灰设计体系；避免独立纯黑/明显蓝灰色带。 */
.page>.topbar .nav-button{background:rgba(255,255,255,.018)!important;border-color:rgba(255,255,255,.065)!important;color:#b8c5d4!important}
.page>.topbar .nav-button:hover{background:rgba(111,168,255,.075)!important;border-color:rgba(111,168,255,.20)!important;color:#e1ebf7!important}
.page>.topbar .nav-button.active,.page>.topbar .nav-button[aria-current="page"]{background:rgba(111,168,255,.10)!important;border-color:rgba(111,168,255,.24)!important;color:#dceaff!important}
.page>.topbar .user-chip{background:rgba(255,255,255,.025)!important;border-color:rgba(255,255,255,.07)!important}
.page>.topbar .user-chip:hover{background:rgba(111,168,255,.055)!important;border-color:rgba(111,168,255,.18)!important}

/* R34 lifecycle unification: install/update Policy Delta Preview stays inside the single ops action. */
.ops-policy-preview{grid-column:1/-1;border:1px solid var(--border-subtle,#2f3744);border-radius:10px;padding:12px 14px;background:rgba(255,255,255,.025);display:grid;gap:10px}
.ops-policy-preview[hidden]{display:none!important}
.ops-policy-preview-head{display:flex;gap:12px;align-items:baseline;justify-content:space-between;flex-wrap:wrap}
.ops-policy-preview-head span{font-size:12px;color:var(--text-muted,#8d98a8)}
.ops-policy-preview p{margin:0;color:var(--text-muted,#9aa5b4);font-size:13px;line-height:1.55}
.ops-policy-delta-list{display:grid;gap:6px}
.ops-policy-delta-row,.ops-policy-delta-empty{display:grid;grid-template-columns:minmax(180px,.8fr) minmax(0,1.6fr);gap:12px;align-items:start;padding:8px 10px;border-radius:8px;background:rgba(255,255,255,.025);font-size:12px}
.ops-policy-delta-row span{overflow-wrap:anywhere;color:var(--text-secondary,#c3cad4)}
.ops-policy-confirm{max-width:420px}
@media (max-width:680px){.ops-policy-delta-row,.ops-policy-delta-empty{grid-template-columns:1fr}.ops-policy-preview-head{align-items:flex-start}}


/* R48：全站统一控件层级、深色下拉菜单与居中弹窗。 */
select,.field select,.system-log-actions select,.grant-view-tools select,.calendar-time select{color-scheme:dark;background-color:#0b1621!important;color:#dce8f4!important;border-color:rgba(125,158,194,.18)!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.025)}
select:hover,.field select:hover,.system-log-actions select:hover{border-color:rgba(111,168,255,.38)!important;background-color:#0e1b28!important}select:focus,.field select:focus{border-color:rgba(111,168,255,.58)!important;box-shadow:0 0 0 3px rgba(111,168,255,.08)!important}
select option,select optgroup{background:#0d1824!important;color:#d9e6f3!important}select option:checked{background:#1b3550!important;color:#f4f8fc!important}
.global-app-dialog{position:fixed;inset:0;width:min(520px,calc(100vw - 28px));max-height:min(78vh,620px);margin:auto;padding:0;border:1px solid rgba(125,158,194,.22);border-radius:18px;background:#0a121c;color:var(--text);box-shadow:0 30px 90px rgba(0,0,0,.62)}.global-app-dialog::backdrop{background:rgba(1,5,10,.72);backdrop-filter:blur(4px)}.global-app-dialog-card{display:grid;gap:14px;padding:20px}.global-app-dialog-head h3{margin:0;color:#e2ecf7;font-size:16px}.global-app-dialog-message{color:#9eb0c3;font-size:12.5px;line-height:1.7;white-space:pre-wrap;overflow-wrap:anywhere}.global-app-dialog-input-wrap{margin:0}.global-app-dialog-input-wrap input{min-height:42px}.global-app-dialog-actions{display:flex;justify-content:flex-end;gap:9px;padding-top:3px}.global-app-dialog[data-danger="1"] [data-global-dialog-confirm]{border-color:rgba(223,119,119,.34);background:rgba(223,119,119,.10);color:#f0b5b5}
.backup-detail-dialog{position:fixed;inset:0;margin:auto}.field{gap:8px}.field>small,.field-help,.stepup-helper,.maintenance-capability-note{margin:0;line-height:1.65}.ops-command-grid,.system-form-grid,.system-card-form{row-gap:12px}
.project-backups-head .maintenance-selection-actions{display:grid;grid-template-columns:repeat(2,112px);gap:8px}.project-backups-head .maintenance-selection-actions .button{width:112px;min-width:112px;white-space:nowrap}.project-backups-head>[data-hub-backup-refresh]{min-width:112px;white-space:nowrap}
.global-reauth-note{display:flex;align-items:center;gap:7px;color:#75899f;font-size:11px;line-height:1.55}.global-reauth-note .info-tip{flex:0 0 auto}

@media(max-width:760px){.global-app-dialog-actions .button{flex:1}.project-backups-head .maintenance-selection-actions{grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.project-backups-head .maintenance-selection-actions .button{width:100%;min-width:0}}

/* R48 · per-action Step-Up + uploaded NO21T mark + backup action layout */
.brand-mark{overflow:hidden;background:rgba(255,255,255,.018);border-color:rgba(118,140,164,.20)}
.brand-mark img{display:block;width:34px;height:34px;object-fit:contain}
.login-brand-mark{overflow:hidden;background:rgba(255,255,255,.018);border-color:rgba(118,140,164,.20)}
.login-brand-mark img{display:block;width:42px;height:42px;object-fit:contain}
.global-app-dialog [hidden]{display:none!important}
.global-app-dialog-password-wrap,.global-app-dialog-input-wrap{margin:0;gap:8px}
.global-app-dialog-password-wrap label,.global-app-dialog-input-wrap label{color:#aebed0;font-size:11px}
.global-app-dialog-password-wrap input,.global-app-dialog-input-wrap input{width:100%;min-height:43px;padding:9px 11px;border:1px solid rgba(125,158,194,.18);border-radius:11px;background:#08121c;color:#eef5fc;outline:none}
.global-app-dialog-password-wrap input:focus,.global-app-dialog-input-wrap input:focus{border-color:rgba(111,168,255,.58);box-shadow:0 0 0 3px rgba(111,168,255,.08)}
.global-app-dialog-error{padding:9px 11px;border:1px solid rgba(223,119,119,.24);border-radius:10px;background:rgba(223,119,119,.07);color:#efb0b0;font-size:11.5px;line-height:1.55}
/* 项目备份主操作固定上下两排，避免窄卡片中按钮越界。 */
.project-backups-head .backup-primary-actions{display:grid!important;grid-template-columns:minmax(0,1fr)!important;gap:8px!important;width:132px;min-width:132px}
.project-backups-head .backup-primary-actions .button{width:100%!important;min-width:0!important;white-space:nowrap}
/* 空选择时按钮仍可点击，点击后由统一弹窗明确说明，而不是无反馈。 */
[data-backup-delete-selected][data-empty-selection="1"],[data-hub-backup-delete-selected][data-empty-selection="1"]{opacity:.68}
@media(max-width:760px){.project-backups-head .backup-primary-actions{width:100%;min-width:0}.brand-mark img{width:32px;height:32px}.login-brand-mark img{width:40px;height:40px}}


/* R49: persistent public site assets and police filing badge. */
.police-record-link{display:inline-flex;align-items:center;gap:5px;vertical-align:middle;white-space:nowrap}
.police-record-icon{display:block;flex:0 0 auto;width:16px;height:17px;object-fit:contain}
.login-site-legal .police-record-icon{width:16px;height:17px}
.site-asset-settings{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}
.site-asset-setting-card{min-width:0;padding:14px;border:1px solid rgba(255,255,255,.065);border-radius:14px;background:rgba(0,0,0,.10)}
.site-asset-setting-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.site-asset-setting-head h3{margin:0 0 5px;color:#c9d6e4;font-size:13px}.site-asset-setting-head p{margin:0;color:#70849b;font-size:10.5px;line-height:1.6}
.site-asset-preview{display:grid;flex:0 0 76px;place-items:center;gap:5px;min-height:76px;padding:8px;border:1px solid rgba(255,255,255,.07);border-radius:12px;background:rgba(255,255,255,.018)}
.site-asset-preview img{display:block;max-width:44px;max-height:44px;object-fit:contain}.site-asset-preview.police-preview img{max-width:36px;max-height:40px}
.site-asset-preview span{color:#71869e;font-size:9px}.site-asset-preview.pending{border-color:rgba(111,168,255,.38);background:rgba(111,168,255,.055);box-shadow:0 0 0 3px rgba(111,168,255,.045)}.site-asset-preview.pending span{color:#a9c9ef}.site-asset-upload-form{display:grid;gap:9px;margin-top:12px}.site-asset-upload-form .actions{margin:0;justify-content:flex-start}
.site-asset-file{display:grid;gap:6px;color:#9eafc1;font-size:10.5px}.site-asset-file input[type=file]{width:100%;min-height:39px;padding:7px 9px;border:1px solid var(--border);border-radius:10px;background:rgba(4,8,14,.55);color:#9fb2c7;font:inherit}
.police-record-demo{display:inline-flex;align-items:center;gap:6px;margin-top:10px;padding:7px 10px;border:1px solid rgba(255,255,255,.055);border-radius:9px;color:#91a5bb;background:rgba(255,255,255,.014);font-size:10.5px}.police-record-demo img{width:16px;height:17px;object-fit:contain}
@media(max-width:760px){.site-asset-settings{grid-template-columns:1fr}.site-asset-setting-head{gap:10px}.site-asset-upload-form .actions{display:grid;grid-template-columns:1fr}.site-asset-upload-form .button{width:100%}}


/* R53: unified mobile topbar + right drawer for every authenticated page. */
.mobile-nav-toggle,.mobile-nav-layer{display:none}
@media(max-width:760px), (max-width:1366px) and (pointer:coarse){
  .page>.topbar{align-items:center!important;justify-content:space-between!important;gap:10px!important;min-height:58px!important;padding:9px 2px!important}
  .page>.topbar .topbar-left{display:flex!important;align-items:center!important;flex:1 1 auto!important;min-width:0!important;flex-wrap:nowrap!important;gap:8px!important}
  .page>.topbar .brand{min-width:0!important;gap:9px!important}
  .page>.topbar .brand-mark{width:38px!important;height:38px!important;border-radius:12px!important;flex:0 0 38px!important}
  .page>.topbar .brand-mark img{width:30px!important;height:30px!important}
  .page>.topbar .brand-text{display:block!important;min-width:0!important;max-width:calc(100vw - 104px)!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important;font-size:12px!important;letter-spacing:.055em!important}
  .page>.topbar .home-link{display:none!important}
  .desktop-top-actions{display:none!important}
  .mobile-nav-toggle{display:grid!important;flex:0 0 44px;width:44px;height:44px;place-content:center;gap:4px;padding:0;border:1px solid rgba(255,255,255,.09);border-radius:13px;background:rgba(255,255,255,.028);color:#d7e4f1;cursor:pointer;-webkit-tap-highlight-color:transparent}
  .mobile-nav-toggle span{display:block;width:18px;height:2px;border-radius:999px;background:currentColor;transition:transform .18s ease,opacity .18s ease}
  .mobile-nav-toggle:hover,.mobile-nav-toggle:focus-visible{border-color:rgba(111,168,255,.30);background:rgba(111,168,255,.075);outline:none}
  .mobile-nav-toggle[aria-expanded="true"] span:nth-child(1){transform:translateY(6px) rotate(45deg)}
  .mobile-nav-toggle[aria-expanded="true"] span:nth-child(2){opacity:0}
  .mobile-nav-toggle[aria-expanded="true"] span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}
  .mobile-nav-layer{display:block!important;position:fixed;inset:0;z-index:320}
  .mobile-nav-layer[hidden]{display:none!important}
  .mobile-nav-backdrop{position:absolute;inset:0;width:100%;height:100%;padding:0;border:0;background:rgba(1,5,10,.70);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);cursor:default}
  .mobile-nav-drawer{position:absolute;top:0;right:0;display:flex;flex-direction:column;width:min(84vw,320px);height:100vh;height:100dvh;padding:max(14px,env(safe-area-inset-top)) 14px max(16px,env(safe-area-inset-bottom));border-left:1px solid rgba(126,156,190,.14);background:linear-gradient(180deg,rgba(13,22,33,.99),rgba(7,13,21,.995));box-shadow:-24px 0 70px rgba(0,0,0,.48);overflow-y:auto;overscroll-behavior:contain;outline:none;animation:hubMobileDrawerIn .18s ease-out}
  @keyframes hubMobileDrawerIn{from{transform:translateX(20px);opacity:.75}to{transform:translateX(0);opacity:1}}
  .mobile-nav-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:4px 2px 15px;border-bottom:1px solid rgba(255,255,255,.07)}
  .mobile-nav-user{display:flex;align-items:center;gap:10px;min-width:0}
  .mobile-nav-avatar{width:34px;height:34px;border-radius:10px;font-size:13px}
  .mobile-nav-user-copy{display:flex;min-width:0;flex-direction:column;gap:3px}
  .mobile-nav-user-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#e3edf8;font-size:13px;font-weight:680}
  .mobile-nav-user-copy small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#71859c;font-size:10px}
  .mobile-nav-close{display:grid;flex:0 0 38px;width:38px;height:38px;place-items:center;padding:0;border:1px solid rgba(255,255,255,.075);border-radius:11px;background:rgba(255,255,255,.025);color:#9fb0c3;font:inherit;font-size:24px;line-height:1;cursor:pointer}
  .mobile-nav-close:hover,.mobile-nav-close:focus-visible{border-color:rgba(111,168,255,.28);background:rgba(111,168,255,.07);color:#e2edf8;outline:none}
  .mobile-nav-links{display:grid;gap:5px;padding:14px 0}
  .mobile-nav-links a{display:flex;align-items:center;min-height:46px;padding:10px 13px;border:1px solid transparent;border-radius:12px;color:#b9c8d8;font-size:13px;font-weight:620;text-decoration:none;-webkit-tap-highlight-color:transparent}
  .mobile-nav-links a:hover,.mobile-nav-links a:focus-visible{border-color:rgba(111,168,255,.18);background:rgba(111,168,255,.055);color:#e5eef8;outline:none}
  .mobile-nav-links a[aria-current="page"]{border-color:rgba(111,168,255,.25);background:rgba(111,168,255,.10);color:#dcecff;box-shadow:inset 3px 0 0 rgba(111,168,255,.62)}
  .mobile-nav-spacer{flex:1 1 auto;min-height:18px}
  .mobile-nav-logout{padding-top:14px;border-top:1px solid rgba(255,255,255,.07)}
  .mobile-nav-logout .button{width:100%;min-height:44px;border-radius:12px}
  body.mobile-nav-open{overflow:hidden!important;overscroll-behavior:none!important}
  .horizontal-tabs,.subnav-tabs,.system-tabs.horizontal-tabs{top:calc(var(--hub-topbar-height,58px) + 4px)!important}
}
@media(max-width:360px){
  .mobile-nav-drawer{width:min(88vw,306px)}
  .page>.topbar .brand-text{max-width:calc(100vw - 96px)!important;font-size:11.5px!important}
}
@media(prefers-reduced-motion:reduce){.mobile-nav-drawer{animation:none!important}.mobile-nav-toggle span{transition:none!important}}

/* R58：备份与恢复统一展示 backups / releases / packages 三类部署历史。 */
.maintenance-root-chips{display:flex;flex-wrap:wrap;gap:7px;align-items:center;min-width:0}
.maintenance-root-chips .maintenance-chip{width:auto;max-width:100%;overflow-wrap:anywhere}
.project-archive-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}
.project-archive-card.maintenance-card{padding:14px;margin:0;background:rgba(255,255,255,.018)}
.project-archive-card .maintenance-card-head{margin-bottom:10px}
.project-archive-card .maintenance-list.compact{max-height:330px;overflow:auto;overscroll-behavior:contain;padding-right:2px}
.project-archive-card .maintenance-list.compact .maintenance-row{grid-template-columns:minmax(0,1fr) auto;padding:9px 10px}
.project-archive-card .maintenance-row-main small{line-height:1.5}
.archive-row .status-badge{white-space:nowrap;justify-self:end}
@media(max-width:980px){.project-archive-grid{grid-template-columns:1fr}}
@media(max-width:760px){.maintenance-root-chips{display:grid;grid-template-columns:1fr}.maintenance-root-chips .maintenance-chip{width:100%;border-radius:10px}.project-archive-card .maintenance-card-head{flex-direction:column}.project-archive-card .maintenance-card-head .maintenance-selection-actions{width:100%}.project-archive-card .maintenance-card-head .maintenance-selection-actions .button{width:100%}}

/* R59：动作控件与状态标签保持完整词组；窄屏由外层 flex/grid 换行，不拆按钮文字。 */
.button,.pill,.badge,.status-badge,.role-badge,.section-note,.security-level,.dependency-load-state,.maintenance-selection-state,.grant-count-badge,.permission-tags span{white-space:nowrap}
.button>svg{flex:0 0 auto}
.actions,.top-actions,.maintenance-actions,.maintenance-selection-actions,.maintenance-row-actions{min-width:0;flex-wrap:wrap}
.horizontal-tabs button,.subnav-tabs button,.system-tabs button{white-space:nowrap;flex:0 0 auto}
.project-archive-card .maintenance-card-head>div:first-child{min-width:0}
.project-archive-card .maintenance-card-head .maintenance-selection-actions{justify-content:flex-end}
@media(max-width:760px){
  .project-archive-card .maintenance-card-head .maintenance-selection-actions{display:flex;flex-wrap:wrap;justify-content:flex-start}
  .project-archive-card .maintenance-card-head .maintenance-selection-actions .maintenance-chip{width:auto;max-width:100%}
  .project-archive-card .maintenance-card-head .maintenance-selection-actions .button{width:auto;max-width:100%}
}

/* R60 · Deployment-history retention editor and no-wrap control units. */
.maintenance-chip,.status-badge,.button,.tab-button{white-space:nowrap}
.retention-source-chip{flex:0 0 auto;white-space:nowrap!important;word-break:normal!important;overflow-wrap:normal!important}
.retention-card-head{align-items:center}.history-retention-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.retention-policy-group{min-width:0;padding:12px;border:1px solid var(--border);border-radius:12px;background:rgba(0,0,0,.11)}.retention-policy-group h4{margin:0 0 10px;font-size:12px}.retention-pair{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:9px}.retention-pair .field{min-width:0}.retention-pair label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.retention-pair input{width:100%;min-width:0;min-height:42px}.retention-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.retention-actions>.button{flex:0 0 auto}
@media(max-width:1050px){.history-retention-grid{grid-template-columns:1fr}.retention-policy-group{display:grid;grid-template-columns:130px minmax(0,1fr);gap:10px;align-items:end}.retention-policy-group h4{margin:0 0 11px}}
@media(max-width:620px){.retention-card-head{align-items:flex-start}.retention-card-head>div{min-width:0}.retention-policy-group{display:block}.retention-policy-group h4{margin-bottom:10px}.retention-pair{grid-template-columns:1fr}.retention-pair label{white-space:normal}.retention-actions{display:grid;grid-template-columns:1fr}.retention-actions>.button{width:100%}}

/* R64/R66：项目管理“发布包与版本”在平板/非全屏端改为卡片布局；触屏横屏设备放宽到 1366px，操作按钮始终就近可见。 */
@media(max-width:1050px), (max-width:1366px) and (pointer:coarse){
  .package-table-wrap{overflow:visible}
  .package-table-wrap .responsive-data-table{width:100%;min-width:0!important;border-collapse:separate;border-spacing:0}
  .package-table-wrap .responsive-data-table thead{display:none}
  .package-table-wrap .responsive-data-table,
  .package-table-wrap .responsive-data-table tbody,
  .package-table-wrap .responsive-data-table tr,
  .package-table-wrap .responsive-data-table td{display:block;width:100%}
  .package-table-wrap .responsive-data-table tbody{display:grid;gap:10px}
  .package-table-wrap .responsive-data-table tr{margin:0;padding:12px 14px;border:1px solid rgba(255,255,255,.065);border-radius:13px;background:rgba(255,255,255,.012)}
  .package-table-wrap .responsive-data-table td{display:grid;grid-template-columns:118px minmax(0,1fr);gap:12px;align-items:start;height:auto!important;padding:6px 0!important;border:0!important;text-align:left!important;min-width:0}
  .package-table-wrap .responsive-data-table td:before{content:attr(data-label);color:#60758d;font-size:10.5px;line-height:1.45}
  .package-table-wrap .responsive-data-table td>*{min-width:0;max-width:100%}
  .package-table-wrap .responsive-data-table td strong,
  .package-table-wrap .responsive-data-table td code,
  .package-table-wrap .responsive-data-table .hash-cell{overflow-wrap:anywhere;word-break:break-word;white-space:normal}
  .package-table-wrap .responsive-data-table td.empty-state{display:block;padding:24px!important}
  .package-table-wrap .package-actions-cell{display:grid!important;grid-template-columns:118px minmax(0,1fr)!important;align-items:center!important;white-space:normal!important}
  .package-table-wrap .package-delete-form{display:flex;width:100%;justify-content:flex-end;margin:0}
  .package-table-wrap .package-delete-button{width:auto!important;min-width:92px;white-space:nowrap}
}
@media(max-width:620px){
  .package-table-wrap .responsive-data-table tr{padding:11px 12px}
  .package-table-wrap .responsive-data-table td,
  .package-table-wrap .package-actions-cell{grid-template-columns:82px minmax(0,1fr)!important;gap:9px}
  .package-table-wrap .package-delete-form{justify-content:stretch}
  .package-table-wrap .package-delete-button{width:100%!important}
}

/* R65 · Project Hub Self-Update */

/* R66 · 三端响应式收口与全站微软雅黑统一。 */
:root{--hub-font-family:"Microsoft YaHei","微软雅黑",sans-serif}
html,body,body *,button,input,select,textarea,pre,code,kbd,samp,table,th,td{font-family:var(--hub-font-family)!important}

/* Project Hub 自更新：长说明必须在自己的卡片内换行，不能依赖窄屏断点兜底。 */

/* R64 卡片模式继续用于 1050px 及以下；触屏横屏至 1366px 也使用卡片，操作按钮不再被推到最右侧。 */
@media(max-width:1050px), (max-width:1366px) and (pointer:coarse){
  .package-table-wrap .package-delete-form{justify-content:flex-start!important}
  .package-table-wrap .package-actions-cell{align-items:center!important}
}
@media(max-width:620px){
  .package-table-wrap .package-delete-form{justify-content:stretch!important}
  .package-table-wrap .package-delete-button{width:100%!important}
  }

/* 账号授权 / 登录会话：移动端不再依赖 760px 宽表格横向滚动，操作就近可见。 */
@media(max-width:860px){
  .account-responsive-wrap{overflow:visible}
  .account-responsive-table{width:100%;min-width:0!important;border-collapse:separate;border-spacing:0}
  .account-responsive-table thead{display:none}
  .account-responsive-table,.account-responsive-table tbody,.account-responsive-table tr,.account-responsive-table td{display:block;width:100%}
  .account-responsive-table tbody{display:grid;gap:10px}
  .account-responsive-table tr{padding:11px 13px;border:1px solid rgba(255,255,255,.065);border-radius:13px;background:rgba(255,255,255,.012)}
  .account-responsive-table td{display:grid;grid-template-columns:104px minmax(0,1fr);gap:10px;align-items:center;min-width:0;padding:6px 0!important;border:0!important;text-align:left!important}
  .account-responsive-table td:before{content:attr(data-label);color:#60758d;font-size:11px;line-height:1.45}
  .account-responsive-table td>*{min-width:0;max-width:100%;overflow-wrap:anywhere}
  .account-responsive-table td form{justify-content:flex-start!important}
  .account-responsive-table .session-select-col{width:100%!important}
  .account-responsive-table .status-badge{margin-left:0}
}
@media(max-width:620px){
  .account-responsive-table td{grid-template-columns:78px minmax(0,1fr);gap:8px}
  .session-history-panel .section-heading{align-items:stretch;flex-direction:column}
  .session-history-panel .section-heading>form,.session-history-panel .section-heading>form .button{width:100%}
}

/* R67 · 触屏横竖屏主导航与统一 Dialog 视口收口。 */
@media (max-width:1366px) and (pointer:coarse){
  .page{padding-top:calc(var(--hub-topbar-height,58px) + 14px)!important}
  .page>.topbar{width:min(calc(100% - 22px),1120px)!important}
}

/* 长确认文案不得越过 Dialog 边界；说明区独立滚动，输入与最终操作始终留在框内。 */
.global-app-dialog{overflow:hidden}
.global-app-dialog-card{
  grid-template-rows:auto minmax(0,1fr) auto auto auto auto;
  max-height:min(78vh,620px);
  overflow:hidden;
}
.global-app-dialog-message{min-height:0;overflow-y:auto;overscroll-behavior:contain;padding-right:2px}
@media(max-height:560px){
  .global-app-dialog{max-height:calc(100dvh - 20px)}
  .global-app-dialog-card{max-height:calc(100dvh - 22px);gap:10px;padding:16px}
}

/* R70: Project Hub 更新页外层不再套 System panel 皮肤；内部直接复用“发布与运维”的标准 panel 结构。 */
.system-update-panel{padding:0!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important}
.system-update-panel>.panel:first-child{margin-top:0}
.system-update-panel>.project-ops-panel{margin-top:18px}

.self-update-package-grid{grid-template-columns:minmax(0,1fr)}.self-update-package-grid .ops-package-field{grid-column:1/-1}
