/* 门户主题覆盖：保留卡片图片与平台业务色，外壳使用后台主题变量。 */
.portal { background: var(--tyt-bg-page); color: var(--tyt-text-1); }
.portal-top { background: var(--tyt-bg-card); border-color: var(--tyt-border); min-height: 64px; height: auto; padding-top: 10px; padding-bottom: 10px; gap: 20px; }
.portal-top .brand-name, .p-card h3 { color: var(--tyt-text-1); }
/* 文件名代表字色：浅底使用深色字，暗底使用浅色字。 */
.portal-model-logo { display: block; flex: 0 0 auto; }
.portal-model-logo .logo-img { width: 180px; height: auto; }
.portal-model-logo .logo-on-dark { display: none; }
html[data-theme="dark"] .portal-model-logo .logo-on-light { display: none; }
html[data-theme="dark"] .portal-model-logo .logo-on-dark { display: block; }
.portal .avatar .uname, .p-card .desc { color: var(--tyt-text-3); }
.portal .btn-logout { color: var(--tyt-text-2); background: var(--tyt-bg-soft); border-color: var(--tyt-border); white-space: nowrap; }
.portal .btn-logout:hover { color: var(--tyt-primary); background: var(--tyt-bg-hover); }
.portal .p-card { background: var(--tyt-bg-card); border-color: var(--tyt-border); }
.portal .p-card.locked { filter: grayscale(.65); }
.portal .p-card.locked .enter-btn { color: var(--tyt-text-4); border-color: var(--tyt-border); background: var(--tyt-bg-soft); }
.portal-foot { color: var(--tyt-text-4); }
html:lang(en) .portal .enter-btn, html:lang(en) .portal-transition .txt { letter-spacing: normal; }
html:lang(en) .portal-top .brand-name { letter-spacing: normal; }
html[data-theme="light"] .portal .p-card .tags span { color: var(--tyt-primary-dark); background: var(--tyt-bg-soft); border-color: var(--tyt-border); }
html[data-theme="light"] .portal .p-card:not(.locked) .enter-btn { color: var(--tyt-primary); background: var(--tyt-bg-soft); border-color: var(--tyt-border); }
html[data-theme="light"] .portal .p-card.clickable:hover .enter-btn { color: var(--tyt-bg-card); background: var(--tyt-primary); }
.portal-preferences { display: flex; align-items: center; gap: 10px; }
.portal-icon-button { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; padding: 0; border: 0; border-radius: 4px; background: transparent; color: var(--tyt-text-3); cursor: pointer; }
.portal-icon-button .iconfont { font-size: 20px; }
.portal-icon-button:hover, .portal-icon-button:focus-visible { background: var(--tyt-bg-hover); color: var(--tyt-primary); }
.portal-preferences .dropdown-menu { min-width: 160px; padding: 6px; border: 1px solid var(--tyt-border); border-radius: 8px; background: var(--tyt-bg-elevated); }
.portal-preferences .dropdown-menu > li > a { display: flex; align-items: center; gap: 10px; padding: 10px; color: var(--tyt-text-2); border-radius: 4px; }
.portal-preferences .dropdown-menu > li > a:hover, .portal-preferences .dropdown-menu > li.active > a, .portal-preferences .dropdown-menu a.active { color: var(--tyt-primary); background: var(--tyt-bg-soft); }
.portal-theme-icon { display: none; }
html[data-theme-mode="auto"] .portal-theme-icon.icon-auto, html[data-theme-mode="light"] .portal-theme-icon.icon-light, html[data-theme-mode="dark"] .portal-theme-icon.icon-dark { display: block; }
.portal-error-card { width: 600px; max-width: 100%; padding: 40px; background: var(--tyt-bg-card); border: 1px solid var(--tyt-border); border-radius: 10px; text-align: center; }
.portal-error-code { font-size: 72px; line-height: 1.1; font-weight: 700; color: var(--tyt-primary); }
.portal-error-card h1 { font-size: 22px; line-height: 1.5; margin: 20px 0 10px; color: var(--tyt-text-1); overflow-wrap: anywhere; }
.portal-error-message { color: var(--tyt-text-3); line-height: 1.8; overflow-wrap: anywhere; }
.portal-error-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 20px; margin-top: 30px; }
.portal-error-link { color: var(--tyt-primary); }
@media (max-width: 768px) {
    .portal-top { flex-wrap: wrap; padding: 10px 20px; }
    .portal-top .left { min-width: 0; }
    .portal-top .brand-name { font-size: 15px; overflow-wrap: anywhere; }
    .portal-top .right { gap: 10px; margin-left: auto; flex-wrap: wrap; }
    .portal-error-card { padding: 30px 20px; }
}
