:root{--portal-ink:#18334b;--portal-muted:#526677;--portal-line:#d9e2e9;--portal-blue:#075b83;--portal-bg:#f3f6f9}
body.portal{font-family:system-ui,-apple-system,"Segoe UI","Microsoft YaHei",sans-serif;background:var(--portal-bg);color:var(--portal-ink);margin:0;line-height:1.5}
.portal *{box-sizing:border-box}.portal main{max-width:1320px;margin:auto;padding:28px}.portal h1{font-size:28px;margin:0 0 12px}.portal h2{font-size:20px}.portal h3{font-size:16px}.portal p{color:var(--portal-muted)}
.portal-header{display:flex;justify-content:space-between;align-items:center;padding:18px 28px;background:#fff;border-bottom:1px solid var(--portal-line);gap:20px;flex-wrap:wrap}.portal-brand{font-size:21px;font-weight:750}.environment{font-size:11px;letter-spacing:.1em;border:1px solid #99acbb;padding:4px 8px;border-radius:4px;margin-left:12px}
.language-switch{display:inline-flex;align-items:center;gap:8px;font-size:12px}.portal input,.portal select,.portal button{font:inherit}.portal input,.portal select{padding:9px 11px;border:1px solid #9baebb;border-radius:6px;max-width:100%;background:#fff;color:var(--portal-ink)}
.portal label{display:grid;gap:6px}.portal button{border:1px solid #8c9faf;border-radius:6px;padding:9px 14px;background:white;color:var(--portal-ink);cursor:pointer}.portal button.primary,.portal button[type=submit]{background:var(--portal-blue);border-color:var(--portal-blue);color:white}.portal button.danger{color:#a02132;border-color:#b78d95}.portal button:disabled{opacity:.45;cursor:not-allowed}.portal :focus-visible{outline:3px solid #ebaa3b;outline-offset:2px}
.portal .staff-login{width:min(460px,calc(100% - 32px));margin:6vh auto;padding:32px;background:white;box-shadow:0 8px 32px #14344d0d;border:1px solid var(--portal-line);border-radius:12px}.portal .staff-login input{width:100%}.portal .staff-login form>label{margin:16px 0}.portal .staff-login button[type=submit]{width:100%;margin-top:18px}.password-control{display:flex;gap:6px;align-items:center}.password-control input{min-width:0;flex:1}.password-control button{white-space:nowrap;font-size:12px!important;margin:0!important;background:#eef4f7!important;color:#18334b!important}.password-help{font-size:13px}
.portal-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px}.portal-card{background:white;border:1px solid var(--portal-line);border-radius:10px;padding:22px;margin:18px 0}.portal-toolbar{display:flex;gap:12px;align-items:end;flex-wrap:wrap}.portal-toolbar label{flex:1;min-width:120px}.portal-toolbar .search{flex:2}.portal-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(135px,1fr));gap:12px}.portal-stat{background:white;border:1px solid var(--portal-line);border-radius:8px;padding:15px}.portal-stat strong{display:block;font-size:26px}
.table-scroll{overflow:auto}.portal table{width:100%;border-collapse:collapse;font-size:13px}.portal th{background:#eef3f7;color:#486072;font-weight:600;white-space:nowrap}.portal th,.portal td{text-align:left;padding:13px 12px;border-bottom:1px solid var(--portal-line)}.portal td{max-width:250px;overflow-wrap:anywhere}.portal .person-name{font-weight:650}.portal .secondary{font-size:12px;color:var(--portal-muted)}.badge{display:inline-block;border-radius:20px;padding:3px 9px;background:#edf2f6;color:#35506a;white-space:nowrap}.badge.ACTIVE{background:#e4f3eb;color:#1c6643}.badge.DISABLED{background:#f3e9eb;color:#8e3541}.badge.PENDING_ACTIVATION,.badge.PENDING_APPROVAL{background:#fff2d9;color:#795314}
.portal dialog{width:min(880px,calc(100% - 32px));max-height:90vh;border:1px solid var(--portal-line);border-radius:12px;padding:26px;box-shadow:0 18px 80px #102a4340;color:var(--portal-ink)}.portal dialog::backdrop{background:#102a4370}.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:16px}.portal-tabs{display:flex;gap:6px;border-bottom:1px solid var(--portal-line);padding:10px 0;flex-wrap:wrap}.portal-tabs button[aria-selected=true]{background:#e0eef5;border-color:var(--portal-blue)}.portal dl{display:grid;grid-template-columns:minmax(130px,1fr) 2fr;gap:12px}.portal dd{margin:0;overflow-wrap:anywhere}.portal fieldset{border:1px solid var(--portal-line);border-radius:6px;padding:14px}.choice-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;max-height:240px;overflow:auto}.choice-grid label{display:flex;gap:8px;align-items:center}.choice-grid input{width:auto}.portal #message{color:#8b2639;min-height:24px}.portal .actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}.portal .notice{background:#eaf2f7;border-left:3px solid var(--portal-blue);padding:14px;margin:15px 0}.portal [hidden]{display:none!important}
.cleanup-entry{display:grid;grid-template-columns:minmax(200px,1fr) minmax(140px,.5fr) 2fr;gap:14px;align-items:center;border-bottom:1px solid var(--portal-line);padding:12px 0}.cleanup-entry label{display:flex;align-items:center;gap:9px}.cleanup-entry small{color:var(--portal-muted)}
.grant-flow{display:grid;grid-template-columns:repeat(2,minmax(240px,1fr));gap:18px;margin-bottom:18px}.grant-flow fieldset{min-width:0}.access-levels label{align-items:flex-start}.access-levels span{display:grid}.access-levels small{color:var(--portal-muted);font-size:12px}.grant-summary{display:grid;gap:10px;margin:14px 0}.grant-summary p{margin:0}.grant-summary ul{margin:0;padding-left:22px}.grant-summary .grant-scope{padding:10px 12px;background:#eef5f8;border-radius:6px}.technical-preview{margin-top:16px;border-top:1px solid var(--portal-line);padding-top:12px}.technical-preview summary{cursor:pointer;font-weight:650}.grant-success{background:#e4f3eb;border-left:3px solid #1c6643;padding:14px;color:#1c6643}
@media(max-width:760px){.portal main{padding:16px}.portal-header{padding:14px 16px}.portal .staff-login{padding:24px}.portal dialog{padding:18px}.portal dl{grid-template-columns:1fr}.portal dd{margin-bottom:8px}.portal-toolbar>*{flex:1}.portal-stats{grid-template-columns:repeat(2,1fr)}.cleanup-entry{grid-template-columns:1fr}}
@media(max-width:760px){.grant-flow{grid-template-columns:1fr}}
.portal .matrix-dialog{width:min(1100px,calc(100% - 32px))}.matrix-dialog section+section{margin-top:24px}.matrix-table select{min-width:110px}.matrix-readonly{font-weight:650;min-width:92px;text-align:center}.matrix-table th:first-child,.matrix-table td:first-child{position:sticky;left:0;background:white;z-index:1}.matrix-identity{font-weight:650}
