From b38336b5e85cc57251f41454a6a0079cc12d9678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Thu, 16 Apr 2026 09:23:33 +0200 Subject: [PATCH] css fixes --- backend/requirements.txt | 8 +- frontend/src/styles/layout.css | 1 - frontend/src/styles/pages.css | 2420 ++++++++++++++++---------------- reverse-proxy/default.conf | 16 +- 4 files changed, 1191 insertions(+), 1254 deletions(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index 89bc6e1..535d0b5 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,14 +1,14 @@ -fastapi[standard]==0.135.2 +fastapi[standard]==0.135.3 sqlalchemy==2.0.49 -pydantic==2.12.5 +pydantic==2.13.0 pydantic-settings==2.13.1 python-jose[cryptography]==3.5.0 passlib==1.7.4 python-multipart==0.0.20 paramiko==3.5.1 -apscheduler==3.11.0 +apscheduler==3.11.2 requests==2.32.3 -alembic==1.15.2 +alembic==1.16.5 email-validator==2.2.0 pytest==8.3.5 httpx==0.28.1 diff --git a/frontend/src/styles/layout.css b/frontend/src/styles/layout.css index 06e7a55..e033a19 100644 --- a/frontend/src/styles/layout.css +++ b/frontend/src/styles/layout.css @@ -151,7 +151,6 @@ body.dark-theme .topbar__lang-select option, body.dark-theme .auth-toolbar__sele background: #1c2631; } - @media (max-width: 991px) { .layout-shell, .layout-shell--collapsed{ padding-left: 0; diff --git a/frontend/src/styles/pages.css b/frontend/src/styles/pages.css index dda82cc..bcedbe9 100644 --- a/frontend/src/styles/pages.css +++ b/frontend/src/styles/pages.css @@ -1,4 +1,7 @@ -:root{ +/* ========================================================= + TOKENS AND THEME + ========================================================= */ +:root { --bg-page: #ecece8; --bg-grid: radial-gradient(circle at 10% 10%, rgba(159, 115, 84, 0.08), transparent 24%), radial-gradient(circle at 85% 14%, rgba(19, 24, 28, 0.05), transparent 18%); --surface-0: rgba(250, 250, 247, 0.82); @@ -32,37 +35,14 @@ --primary-contrast: #ffffff; } -body.dark-theme{ - --bg-page: #17212b; - --bg-grid: linear-gradient(180deg, rgba(91, 119, 145, 0.05), transparent 32%), radial-gradient(circle at 18% 12%, rgba(63, 130, 196, 0.08), transparent 18%); - --surface-0: rgba(29, 39, 51, 0.9); - --surface-1: #1d2733; - --surface-2: #222d3a; - --surface-3: #2d3947; - --surface-4: #3a4858; - --text-main: #dae4ec; - --text-soft: #93a5b6; - --text-faint: #708295; - --border-color: rgba(146, 170, 194, 0.16); - --border-strong: rgba(146, 170, 194, 0.25); - --primary: #edf2f7; - --primary-soft: #bccada; - --accent: #4b90d9; - --accent-2: #4fb593; - --blue: #4b90d9; - --success: #4fb593; - --warning: #f0b45b; - --danger: #e37a7a; - --shadow-lg: 0 22px 48px rgba(0, 0, 0, 0.24); - --shadow-md: 0 10px 24px rgba(0, 0, 0, 0.18); - --primary-contrast: #101316; -} - -*{ +/* ========================================================= + BASE / RESET + ========================================================= */ +* { box-sizing: border-box; } -html, body{ +html, body { min-height: 100%; font-size: 0.90rem; margin: 0; @@ -74,7 +54,7 @@ html, body{ -moz-osx-font-smoothing: grayscale; } -body::before{ +body::before { content: ""; position: fixed; inset: 0; @@ -84,73 +64,56 @@ body::before{ opacity: 0.14; } -body.dark-theme::before{ +body.dark-theme::before { background-image: linear-gradient(rgba(218, 228, 236, 0.02) 1px, transparent 1px), linear-gradient(90deg, rgba(218, 228, 236, 0.02) 1px, transparent 1px); opacity: 0.15; } -body, .p-component, .p-inputtext, .p-button, .p-card, .p-tag, .p-table{ +body, .p-component, .p-inputtext, .p-button, .p-card, .p-tag, .p-table { font-family: var(--font-body); } -pre, code, .page-header__title, .topbar__headline, .sidebar-brand__text h2, .stat-card__value, .stat-card__label, .section-card__title, .table-primary{ +pre, code, .page-header__title, .topbar__headline, .sidebar-brand__text h2, .stat-card__value, .stat-card__label, .section-card__title, .table-primary { font-family: var(--font-title); } -img{ +img { max-width: 100%; } -a{ +a { color: inherit; text-decoration: none; } -small{ +small { color: var(--text-soft); } -.layout-shell{ +/* ========================================================= + APP LAYOUT + ========================================================= */ +.layout-shell { min-height: 100vh; padding-left: var(--sidebar-width); transition: padding-left 0.2s ease; } -.layout-shell--collapsed{ +.layout-shell--collapsed { padding-left: var(--sidebar-collapsed-width); } -.layout-sidebar{ - position: fixed; - left: 0; - top: 0; - bottom: 0; - width: var(--sidebar-width); - background: linear-gradient(180deg, #151d26 0%, #19222d 100%); - border-right: 1px solid rgba(255, 255, 255, 0.08); - color: #d7e1eb; - padding: 1.15rem 1rem; - z-index: 100; - transition: width 0.2s ease, transform 0.2s ease; - overflow: hidden; -} - -.layout-shell--collapsed .layout-sidebar{ +.layout-shell--collapsed .layout-sidebar { width: var(--sidebar-collapsed-width); } -.layout-main{ +.layout-main { min-height: 100vh; display: flex; flex-direction: column; } -.layout-content{ - flex: 1; - padding: 0 2rem 2rem; -} - -.layout-footer{ +.layout-footer { display: flex; align-items: center; justify-content: space-between; @@ -163,7 +126,7 @@ small{ text-transform: uppercase; } -.layout-overlay{ +.layout-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.4); @@ -173,223 +136,104 @@ small{ transition: opacity 0.2s ease; } -.layout-overlay.is-visible{ +.layout-overlay.is-visible { opacity: 1; visibility: visible; } -.topbar{ - min-height: var(--topbar-height); - margin: 0; - padding: 1rem 2rem; - display: flex; - justify-content: space-between; - align-items: center; - gap: 1rem; - border-bottom: 1px solid var(--border-color); - background: rgba(255, 255, 255, 0.18); - backdrop-filter: blur(10px); - position: sticky; - top: 0; - z-index: 90; -} - -body.dark-theme .topbar{ - background: rgba(23, 33, 43, 0.82); -} - -.topbar__left, .topbar__right, .header-actions-row, .table-actions, .inline-tags, .filters-actions, .dialog-actions, .sidebar-brand, .topbar__user{ +.topbar__left, .topbar__right, .header-actions-row, .table-actions, .inline-tags, .filters-actions, .dialog-actions, .sidebar-brand, .topbar__user { display: flex; align-items: center; gap: 0.8rem; } -.topbar__left, .topbar__right, .header-actions-row, .table-actions, .inline-tags, .filters-actions, .dialog-actions, .topbar__caption, .page-header__eyebrow, .sidebar-section__label, .stat-card__label, .layout-footer span{ +.topbar__left, .topbar__right, .header-actions-row, .table-actions, .inline-tags, .filters-actions, .dialog-actions, .topbar__caption, .page-header__eyebrow, .sidebar-section__label, .stat-card__label, .layout-footer span { font-size: 0.72rem; letter-spacing: 0.16em; text-transform: uppercase; } -.topbar__caption, .page-header__eyebrow, .sidebar-section__label, .layout-footer, .stat-card__hint, .section-card__subtitle, .page-header__subtitle, .metric-tile span, .table-secondary, .form-field label, .topbar__user-meta small{ +.topbar__caption, .page-header__eyebrow, .sidebar-section__label, .layout-footer, .stat-card__hint, .section-card__subtitle, .page-header__subtitle, .metric-tile span, .table-secondary, .form-field label, .topbar__user-meta small { color: var(--text-soft); } -.topbar__headline{ - font-size: 1.02rem; - letter-spacing: 0.12em; - text-transform: uppercase; -} - -.topbar__user-meta{ +.topbar__user-meta { display: flex; flex-direction: column; line-height: 1.2; } -.topbar__logout-btn.p-button{ - min-width: auto; -} - -.sidebar-brand{ - align-items: center; - padding-bottom: 1.25rem; - margin-bottom: 1rem; - border-bottom: 1px solid rgba(255, 255, 255, 0.08); -} - -.sidebar-brand__logo{ - width: 42px; - height: 42px; - border: 1px solid rgba(255, 255, 255, 0.24); - border-radius: 12px; - display: grid; - place-items: center; - font-family: var(--font-title); - font-size: 0.86rem; - letter-spacing: 0.12em; - color: #fff; -} - -.sidebar-brand__text h2, .sidebar-brand__text p, .sidebar-section__label, .page-header__title, .page-header__subtitle, .section-card__title, .section-card__subtitle, .stat-card__label, .stat-card__value, .stat-card__hint, .metric-tile span, .form-field label{ +.sidebar-brand__text h2, .sidebar-brand__text p, .sidebar-section__label, .page-header__title, .page-header__subtitle, .section-card__title, .section-card__subtitle, .stat-card__label, .stat-card__value, .stat-card__hint, .metric-tile span, .form-field label { margin: 0; } -.sidebar-brand__text h2{ - font-size: 1.02rem; - color: #fff; - text-transform: lowercase; - letter-spacing: 0.18em; -} - -.sidebar-brand__text p, .sidebar-section__label{ +.sidebar-brand__text p, .sidebar-section__label { color: rgba(215, 225, 235, 0.64); } -.sidebar-section{ +.sidebar-section { padding: 0.25rem 0 0.5rem; } -.sidebar-nav{ +.sidebar-nav { display: grid; gap: 0.35rem; } -.sidebar-nav__item{ - display: flex; - align-items: center; - gap: 0.85rem; - min-height: 44px; - padding: 0.75rem 0.85rem; - border-radius: 14px; - color: rgba(230, 238, 245, 0.84); - border: 1px solid transparent; - transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease; -} - -.sidebar-nav__item:hover{ +.sidebar-nav__item:hover { background: rgba(255, 255, 255, 0.06); border-color: rgba(255, 255, 255, 0.08); } -.sidebar-nav__item.is-active{ +.sidebar-nav__item.is-active { background: rgba(75, 144, 217, 0.18); border-color: rgba(75, 144, 217, 0.42); color: #fff; } -.sidebar-nav__item i{ - font-size: 1rem; - width: 1rem; -} - -.page-header{ - display: flex; - justify-content: space-between; - align-items: flex-end; - gap: 1rem; - padding: 2rem 0 1.25rem; - border-bottom: 1px solid var(--border-color); - margin-bottom: 1.5rem; -} - -.page-header__title{ - font-size: clamp(2rem, 4vw, 3.2rem); - line-height: 1; - letter-spacing: 0.06em; - text-transform: uppercase; -} - -.page-header__subtitle{ +.page-header__subtitle { max-width: 56rem; margin-top: 0.9rem; font-size: 0.98rem; line-height: 1.7; } -.stats-grid, .dashboard-grid, .metric-grid-2, .form-grid-2{ +.stats-grid, .dashboard-grid, .metric-grid-2, .form-grid-2 { display: grid; gap: 1rem; } -.stats-grid{ +.stats-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); margin-bottom: 1rem; } -.compact-grid{ +.compact-grid { margin-bottom: 1rem; } -.dashboard-grid{ +.dashboard-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } -.metric-grid-2, .form-grid-2{ +.metric-grid-2, .form-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } -.section-card.p-card, .stat-card.p-card{ - border-radius: 20px; - border: 1px solid var(--border-color); - background: linear-gradient(180deg, var(--surface-1) 0%, var(--surface-0) 100%); - box-shadow: var(--shadow-md); - overflow: hidden; -} - -.section-card .p-card-body, .stat-card .p-card-body{ +.section-card .p-card-body, .stat-card .p-card-body { padding: 0; } -.section-card .p-card-content, .stat-card .p-card-content{ - padding: 1.2rem 1.25rem; -} - -.section-card__header{ - display: flex; - justify-content: space-between; - gap: 1rem; - align-items: flex-start; - padding-bottom: 1rem; - margin-bottom: 1rem; - border-bottom: 1px solid var(--border-color); -} - -.section-card__title{ - font-size: 1.05rem; - letter-spacing: 0.08em; - text-transform: uppercase; -} - -.section-card__subtitle{ +.section-card__subtitle { margin-top: 0.35rem; line-height: 1.6; } -.stat-card{ +.stat-card { position: relative; } -.stat-card::before{ +.stat-card::before { content: ""; position: absolute; left: 0; @@ -399,7 +243,7 @@ body.dark-theme .topbar{ background: linear-gradient(90deg, var(--accent), var(--blue)); } -.stat-card__row{ +.stat-card__row { display: flex; justify-content: space-between; gap: 1rem; @@ -407,22 +251,16 @@ body.dark-theme .topbar{ margin-bottom: 1rem; } -.stat-card__label{ +.stat-card__label { margin-bottom: 0.55rem; } -.stat-card__value{ - font-size: clamp(1.6rem, 3vw, 2.1rem); - line-height: 1; - letter-spacing: 0.04em; -} - -.stat-card__hint{ +.stat-card__hint { margin-top: 0.6rem; font-size: 0.92rem; } -.stat-card__icon{ +.stat-card__icon { width: 48px; height: 48px; border-radius: 14px; @@ -433,43 +271,47 @@ body.dark-theme .topbar{ font-size: 1.05rem; } -.icon-blue{ color: var(--blue); } -.icon-emerald{ color: var(--success); } -.icon-amber{ color: var(--warning); } -.icon-violet{ color: var(--accent); } +.icon-blue { + color: var(--blue); +} -body.dark-theme .settings-actions{ +.icon-emerald { + color: var(--success); +} + +.icon-amber { + color: var(--warning); +} + +.icon-violet { + color: var(--accent); +} + +body.dark-theme .settings-actions { display: flex; flex-direction: column; } -body.dark-theme .metric-tile, .empty-state{ +body.dark-theme .metric-tile, .empty-state { justify-content: space-between; } -.metric-grid-2{ +.metric-grid-2 { margin-top: 0.2rem; } -.metric-tile{ - padding: 1rem; - border: 1px solid var(--border-color); - border-radius: 16px; - background: var(--surface-2); -} - -.metric-tile strong{ +.metric-tile strong { font-family: var(--font-title); font-size: 1rem; letter-spacing: 0.06em; } -.table-primary{ +.table-primary { font-size: 0.96rem; letter-spacing: 0.04em; } -.code-preview{ +.code-preview { margin: 0; padding: 1rem; border-radius: 16px; @@ -481,214 +323,126 @@ body.dark-theme .metric-tile, .empty-state{ font-size: 0.86rem; } -.form-field{ - display: flex; - flex-direction: column; - gap: 0.5rem; -} - -.form-field label{ - font-size: 0.8rem; - letter-spacing: 0.12em; - text-transform: uppercase; -} - -.form-field--full{ +.form-field--full { grid-column: 1 / -1; } -.form-error, .form-success{ +.form-error, .form-success { font-size: 0.88rem; } -.form-error{ color: var(--danger); } -.form-success{ color: var(--success); } - -.p-button{ - border-radius: 12px; - border-width: 1px; - font-size: 0.82rem; - font-weight: 600; - letter-spacing: 0.14em; - text-transform: uppercase; - padding: 0.8rem 1rem; - background: var(--primary); - border-color: var(--primary); - color: #fff; - box-shadow: none; +.form-error { + color: var(--danger); } -.p-button:not(.p-disabled):hover{ - filter: brightness(1.06); +.form-success { + color: var(--success); } -.p-button.p-button-secondary, .p-button.p-button-help, .p-button.p-button-outlined, .p-button.p-button-text{ - background: color-mix(in srgb, var(--surface-1) 88%, white 12%); - color: var(--text-main); - border-color: color-mix(in srgb, var(--border-strong) 86%, transparent); -} - -.p-button.p-button-secondary:not(.p-disabled):hover, .p-button.p-button-help:not(.p-disabled):hover, .p-button.p-button-outlined:not(.p-disabled):hover{ +.p-button.p-button-secondary:not(.p-disabled):hover, .p-button.p-button-help:not(.p-disabled):hover, .p-button.p-button-outlined:not(.p-disabled):hover { background: color-mix(in srgb, var(--surface-2) 82%, white 18%); border-color: color-mix(in srgb, var(--border-strong) 96%, transparent); } -.p-button.p-button-text{ - border-color: transparent; - background: transparent; -} - -body.dark-theme .p-button.p-button-secondary, body.dark-theme .p-button.p-button-help, body.dark-theme .p-button.p-button-outlined, body.dark-theme .p-button.p-button-text{ - color: var(--text-main); -} - -body.dark-theme .p-button.p-button-secondary, body.dark-theme .p-button.p-button-help, body.dark-theme .p-button.p-button-outlined{ +body.dark-theme .p-button.p-button-secondary, body.dark-theme .p-button.p-button-help, body.dark-theme .p-button.p-button-outlined { background: color-mix(in srgb, var(--surface-1) 90%, white 10%); border-color: rgba(146, 170, 194, 0.22); } -body.dark-theme .p-button.p-button-secondary:not(.p-disabled):hover, body.dark-theme .p-button.p-button-help:not(.p-disabled):hover, body.dark-theme .p-button.p-button-outlined:not(.p-disabled):hover{ +body.dark-theme .p-button.p-button-secondary:not(.p-disabled):hover, body.dark-theme .p-button.p-button-help:not(.p-disabled):hover, body.dark-theme .p-button.p-button-outlined:not(.p-disabled):hover { background: color-mix(in srgb, var(--surface-1) 84%, white 16%); border-color: rgba(146, 170, 194, 0.34); } -.p-button.p-button-danger{ +.p-button.p-button-danger { background: transparent; border-color: rgba(194, 70, 70, 0.5); color: var(--danger); } -.p-inputtext, .p-inputtextarea, textarea.p-inputtextarea{ - width: 100%; - border-radius: 12px; - border: 1px solid var(--border-strong); - background: rgba(255, 255, 255, 0.5); - color: var(--text-main); - padding: 0.82rem 0.9rem; - box-shadow: none; -} - -body.dark-theme .p-inputtext, body.dark-theme .p-inputtextarea, body.dark-theme textarea.p-inputtextarea{ +body.dark-theme .p-inputtext, body.dark-theme .p-inputtextarea, body.dark-theme textarea.p-inputtextarea { background: rgba(255, 255, 255, 0.03); } -.p-inputtext:enabled:focus, .p-inputtextarea:enabled:focus, textarea.p-inputtextarea:enabled:focus{ +.p-inputtext:enabled:focus, .p-inputtextarea:enabled:focus, textarea.p-inputtextarea:enabled:focus { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent); } -.p-input-icon-left{ +.p-input-icon-left { position: relative; display: block; } -.p-input-icon-left > i{ +.p-input-icon-left > i { left: 0.9rem; color: var(--text-soft); } -.p-input-icon-left > .p-inputtext{ +.p-input-icon-left > .p-inputtext { padding-left: 2.45rem; } -.p-tag{ - border-radius: 999px; - font-size: 0.6rem; - font-weight: 700; - letter-spacing: 0.04em; - text-transform: uppercase; - line-height: 1.15; - padding: 0.28rem 0.72rem; - min-width: max-content; - max-width: 100%; -} - -.app-table{ - border: 1px solid var(--border-color); - border-radius: 18px; - overflow: hidden; -} - -.app-table .p-datatable-wrapper{ - border-radius: 18px; -} - -.app-table .p-datatable-table{ +.app-table .p-datatable-table { min-width: 100%; } -.app-table .p-datatable-thead > tr > th{ - background: var(--surface-2); - color: var(--text-soft); - border-bottom: 1px solid var(--border-color); - font-size: 0.76rem; - font-weight: 700; - letter-spacing: 0.12em; - text-transform: uppercase; - padding: 0.95rem 1rem; -} - -.app-table .p-datatable-tbody > tr{ +.app-table .p-datatable-tbody > tr { background: transparent; } -.app-table .p-datatable-tbody > tr > td{ - padding: 0.95rem 1rem; - border-bottom: 1px solid var(--border-color); -} - -.app-table .p-datatable-tbody > tr:hover > td{ +.app-table .p-datatable-tbody > tr:hover > td { background: rgba(255, 255, 255, 0.35); } -body.dark-theme .app-table .p-datatable-thead > tr > th{ +body.dark-theme .app-table .p-datatable-thead > tr > th { background: #202a36; } -body.dark-theme .app-table .p-datatable-tbody > tr:hover > td{ +body.dark-theme .app-table .p-datatable-tbody > tr:hover > td { background: rgba(255, 255, 255, 0.03); } -.table-secondary{ +.table-secondary { display: inline-block; margin-top: 0.3rem; } -.p-paginator{ +.p-paginator { border-top: 1px solid var(--border-color); background: var(--surface-1); } -.p-component-overlay{ +.p-component-overlay { backdrop-filter: blur(10px); } -.p-avatar{ +.p-avatar { background: var(--primary); color: #fff; font-family: var(--font-title); } -.p-dialog{ +.p-dialog { border-radius: 20px; overflow: hidden; border: 1px solid var(--border-color); } -.p-dialog .p-dialog-header, .p-dialog .p-dialog-content, .p-dialog .p-dialog-footer{ +.p-dialog .p-dialog-header, .p-dialog .p-dialog-content, .p-dialog .p-dialog-footer { background: var(--surface-1); color: var(--text-main); } -.p-dialog .p-dialog-header{ +.p-dialog .p-dialog-header { border-bottom: 1px solid var(--border-color); } -.p-dialog .p-dialog-footer{ +.p-dialog .p-dialog-footer { border-top: 1px solid var(--border-color); } -.empty-state, .compact-empty{ +.empty-state, .compact-empty { padding: 1.2rem; border: 1px dashed var(--border-strong); border-radius: 14px; @@ -696,198 +450,120 @@ body.dark-theme .app-table .p-datatable-tbody > tr:hover > td{ background: var(--surface-2); } -.settings-actions{ +.settings-actions { justify-content: flex-end; grid-column: 1 / -1; } +/* ========================================================= + RESPONSIVE + ========================================================= */ + +/* <= 1300px */ @media (max-width: 1300px) { - .stats-grid{ + .stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .dashboard-grid{ + .dashboard-grid { grid-template-columns: 1fr; } } -@media (max-width: 991px) { - .layout-shell, .layout-shell--collapsed{ - padding-left: 0; - } - - .layout-sidebar{ - transform: translateX(-100%); - width: min(88vw, var(--sidebar-width)); - } - - .layout-sidebar.is-open{ - transform: translateX(0); - } - - .topbar, .layout-content, .layout-footer{ - padding-left: 1rem; - padding-right: 1rem; - } - - .page-header{ - align-items: flex-start; - } -} - -@media (max-width: 720px) { - .page-header, .topbar, .stats-grid, .metric-grid-2, .form-grid-2{ - grid-template-columns: 1fr; - } - - .topbar, .page-header{ - flex-direction: column; - align-items: flex-start; - } - - .topbar__right{ - width: 100%; - } - -} - -.layout-content{ - padding-bottom: 2.5rem; -} - -.topbar{ - min-height: 72px; - padding-top: 0.9rem; - padding-bottom: 0.9rem; - background: rgba(249, 249, 246, 0.86); - border-bottom-color: rgba(17, 20, 23, 0.1); -} - -body.dark-theme .topbar{ - background: rgba(21, 29, 38, 0.92); - border-bottom-color: rgba(146, 170, 194, 0.12); -} - -.topbar__caption{ - letter-spacing: 0.18em; -} - -.topbar__headline{ - font-family: var(--font-title); - font-size: 1rem; - letter-spacing: 0.1em; -} - -.topbar__icon-btn.p-button, .topbar__logout-btn.p-button{ - min-width: 2.75rem; - height: 2.75rem; -} - -.topbar__icon-btn.p-button{ +.topbar__icon-btn.p-button { border: 1px solid var(--border-color); background: var(--surface-1); } -body.dark-theme .topbar__icon-btn.p-button{ +body.dark-theme .topbar__icon-btn.p-button { background: rgba(255, 255, 255, 0.03); } -.topbar__logout-btn.p-button{ - padding-inline: 1rem; -} - -.sidebar-brand__logo{ - border-radius: 12px; - background: rgba(255, 255, 255, 0.04); -} - -.sidebar-brand__text h2{ - font-size: 0.96rem; - text-transform: uppercase; -} - -.sidebar-brand__text p{ +.sidebar-brand__text p { color: rgba(215, 225, 235, 0.64); } -.p-button{ - min-height: 2.8rem; - border-radius: 10px; - border-width: 1px; - letter-spacing: 0.12em; - transition: transform 0.12s ease, filter 0.12s ease, border-color 0.12s ease, background-color 0.12s ease; -} - -.p-button:not(.p-disabled):hover{ - transform: translateY(-1px); -} - -.p-button.p-button-secondary, .p-button.p-button-help, .p-button.p-button-outlined, .p-button.p-button-text{ - background: var(--surface-1); -} - -body.dark-theme .p-button.p-button-secondary, body.dark-theme .p-button.p-button-help, body.dark-theme .p-button.p-button-outlined, body.dark-theme .p-button.p-button-text{ +body.dark-theme .p-button.p-button-secondary, body.dark-theme .p-button.p-button-help, body.dark-theme .p-button.p-button-outlined, body.dark-theme .p-button.p-button-text { + color: var(--text-main); background: rgba(255, 255, 255, 0.03); } -.p-button.p-button-text{ +.p-button.p-button-text { + border-color: transparent; background: transparent; } -.p-button.table-action-btn{ - width: 2.35rem; - min-width: 2.35rem; - height: 2.35rem; - padding: 0; - border-radius: 10px; -} - -.header-number-input{ +.header-number-input { max-width: 6rem; } -.settings-toggle-grid{ +.settings-toggle-grid { display: grid; gap: 0.85rem; margin-bottom: 1rem; } -.settings-toggle{ - display: flex; - align-items: center; - justify-content: space-between; - gap: 1rem; - padding: 0.95rem 1rem; - border: 1px solid var(--border-color); - border-radius: 16px; - background: color-mix(in srgb, var(--surface-1) 86%, transparent); -} - -.settings-toggle strong, .settings-toggle small{ +.settings-toggle strong, .settings-toggle small { display: block; } -.settings-toggle strong{ +.settings-toggle strong { font-family: var(--font-title); font-size: 0.9rem; letter-spacing: 0.06em; text-transform: uppercase; } -.settings-toggle small{ +.settings-toggle small { margin-top: 0.3rem; color: var(--text-soft); line-height: 1.5; } +/* <= 991px */ @media (max-width: 991px) { - .topbar__right{ - justify-content: space-between; + .layout-shell, .layout-shell--collapsed { + padding-left: 0; } + .layout-sidebar { + transform: translateX(-100%); + width: min(88vw, var(--sidebar-width)); + } + + .layout-sidebar.is-open { + transform: translateX(0); + } + + .topbar, .layout-content, .layout-footer { + padding-left: 1rem; + padding-right: 1rem; + } + + .page-header { + align-items: flex-start; + } + + .topbar__right { + justify-content: space-between; + } } -body.dark-theme{ +/* ========================================================= + DARK THEME OVERRIDES + ========================================================= */ +body.dark-theme { + --bg-page: #17212b; + --bg-grid: linear-gradient(180deg, rgba(91, 119, 145, 0.05), transparent 32%), radial-gradient(circle at 18% 12%, rgba(63, 130, 196, 0.08), transparent 18%); + --primary: #edf2f7; + --primary-soft: #bccada; + --accent: #4b90d9; + --accent-2: #4fb593; + --blue: #4b90d9; + --success: #4fb593; + --warning: #f0b45b; + --danger: #e37a7a; + --primary-contrast: #101316; --surface-0: rgba(28, 38, 49, 0.94); --surface-1: #1c2631; --surface-2: #202b36; @@ -902,275 +578,322 @@ body.dark-theme{ --shadow-md: 0 8px 20px rgba(0, 0, 0, 0.14); } -.topbar{ - min-height: 64px; - padding: 0.8rem 1.5rem; - background: rgba(248, 248, 245, 0.74); - backdrop-filter: blur(8px); -} - -body.dark-theme .topbar{ - background: rgba(19, 27, 35, 0.88); -} - -.topbar__caption, .page-header__eyebrow, .sidebar-section__label, .stat-card__label, .layout-footer span{ +.topbar__caption, .page-header__eyebrow, .sidebar-section__label, .stat-card__label, .layout-footer span { font-size: 0.68rem; letter-spacing: 0.14em; } -.topbar__headline{ - font-size: 0.94rem; - letter-spacing: 0.08em; -} - - - -.topbar__icon-btn.p-button, .topbar__logout-btn.p-button{ +.topbar__icon-btn.p-button, .topbar__logout-btn.p-button { height: 2.45rem; min-width: 2.45rem; } -.sidebar-brand{ +.sidebar-brand { + align-items: center; + margin-bottom: 1rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.08); padding-bottom: 1rem; } -.sidebar-nav__item{ - min-height: 40px; - padding: 0.62rem 0.75rem; - border-radius: 10px; -} - -.sidebar-nav__item i{ +.sidebar-nav__item i { + width: 1rem; font-size: 0.92rem; } -.page-header{ +/* ========================================================= + SHARED PAGE HEADER / CARDS / TYPOGRAPHY + ========================================================= */ +.page-header { + display: flex; + justify-content: space-between; + align-items: flex-end; + gap: 1rem; + border-bottom: 1px solid var(--border-color); padding: 1.6rem 0 1rem; margin-bottom: 1.2rem; } -.page-header__title{ - font-size: clamp(1.65rem, 3vw, 2.6rem); - letter-spacing: 0.05em; -} - -.page-header__subtitle, .section-card__subtitle{ +.page-header__subtitle, .section-card__subtitle { font-size: 0.92rem; line-height: 1.65; } -.section-card.p-card, .stat-card.p-card{ +.section-card.p-card, .stat-card.p-card { + border: 1px solid var(--border-color); + background: linear-gradient(180deg, var(--surface-1) 0%, var(--surface-0) 100%); + overflow: hidden; border-radius: 18px; box-shadow: var(--shadow-md); } -.section-card .p-card-content, .stat-card .p-card-content{ +.section-card .p-card-content, .stat-card .p-card-content { padding: 1rem 1.05rem; } -.section-card__header{ +.section-card__header { + display: flex; + justify-content: space-between; + gap: 1rem; + align-items: flex-start; + border-bottom: 1px solid var(--border-color); padding-bottom: 0.8rem; margin-bottom: 0.8rem; } -.section-card__title{ +.section-card__title { + text-transform: uppercase; font-size: 0.96rem; letter-spacing: 0.06em; } -.stat-card__value{ +.stat-card__value { + line-height: 1; + letter-spacing: 0.04em; font-size: clamp(1.35rem, 2.2vw, 1.8rem); } -.stat-card__hint, .metric-tile span, .table-secondary, .form-field label, .topbar__user-meta small, .settings-toggle small{ +.stat-card__hint, .metric-tile span, .table-secondary, .form-field label, .topbar__user-meta small, .settings-toggle small { font-size: 0.78rem; } - - -.metric-tile strong, .settings-toggle strong{ +.metric-tile strong, .settings-toggle strong { font-size: 0.88rem; } -.metric-tile, .settings-toggle{ +.metric-tile, .settings-toggle { border-radius: 12px; } -.p-button{ - min-height: 2.55rem; - padding: 0.66rem 0.9rem; - font-size: 0.74rem; - font-weight: 600; - letter-spacing: 0.1em; - border-radius: 9px; -} - -.p-button:not(.p-disabled):hover{ +.p-button:not(.p-disabled):hover { transform: none; filter: brightness(1.04); } -.p-button.p-button-secondary, .p-button.p-button-help, .p-button.p-button-outlined, .p-button.p-button-text{ - background: color-mix(in srgb, var(--surface-1) 92%, transparent); -} - -.p-button.table-action-btn{ +.p-button.table-action-btn { + padding: 0; width: 2.15rem; min-width: 2.15rem; height: 2.15rem; border-radius: 8px; } -.p-inputtext, .p-inputtextarea, textarea.p-inputtextarea{ +.p-inputtext, .p-inputtextarea, textarea.p-inputtextarea { + width: 100%; + border: 1px solid var(--border-strong); + color: var(--text-main); + box-shadow: none; border-radius: 10px; padding: 0.72rem 0.82rem; font-size: 0.92rem; background: color-mix(in srgb, var(--surface-1) 88%, transparent); } - - - - -.p-tag{ +.p-tag { + border-radius: 999px; + font-weight: 700; + letter-spacing: 0.04em; + text-transform: uppercase; + line-height: 1.15; + padding: 0.28rem 0.72rem; + min-width: max-content; + max-width: 100%; font-size: 0.6rem; } -.app-table{ +.app-table { + border: 1px solid var(--border-color); + overflow: hidden; border-radius: 14px; } -.app-table .p-datatable-wrapper{ +.app-table .p-datatable-wrapper { border-radius: 14px; } -.app-table .p-datatable-thead > tr > th{ +.app-table .p-datatable-thead > tr > th { + background: var(--surface-2); + color: var(--text-soft); + border-bottom: 1px solid var(--border-color); + font-weight: 700; + text-transform: uppercase; font-size: 0.7rem; letter-spacing: 0.1em; padding: 0.8rem 0.9rem; } -.app-table .p-datatable-tbody > tr > td{ +.app-table .p-datatable-tbody > tr > td { + border-bottom: 1px solid var(--border-color); padding: 0.82rem 0.9rem; font-size: 0.9rem; } -.form-field{ +.form-field { + display: flex; + flex-direction: column; gap: 0.4rem; } -.form-field label{ - font-size: 0.72rem; - letter-spacing: 0.12em; -} - -.layout-content{ +.layout-content { + flex: 1; + padding-bottom: 2.5rem; padding: 0 1.5rem 1.5rem; } -.topbar{ +.topbar { + margin: 0; + display: flex; + justify-content: space-between; + align-items: center; + gap: 1rem; + border-bottom: 1px solid var(--border-color); + position: sticky; + top: 0; + z-index: 90; + padding-top: 0.9rem; + padding-bottom: 0.9rem; + border-bottom-color: rgba(17, 20, 23, 0.1); + backdrop-filter: blur(8px); min-height: 68px; padding: 0.85rem 1.5rem; background: rgba(255, 255, 255, 0.12); } -body.dark-theme .topbar{ +body.dark-theme .topbar { + border-bottom-color: rgba(146, 170, 194, 0.12); background: rgba(23, 33, 43, 0.74); } -.topbar__headline{ +.topbar__headline { + text-transform: uppercase; + font-family: var(--font-title); font-size: 1.2rem; letter-spacing: 0.03em; } -.topbar__caption{ +.topbar__caption { + letter-spacing: 0.18em; font-size: 0.65rem; } -.topbar__user-meta strong{ +.topbar__user-meta strong { font-size: 0.86rem; } -.topbar__user-meta small{ +.topbar__user-meta small { font-size: 0.68rem; } -.layout-sidebar{ +.layout-sidebar { + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: var(--sidebar-width); + background: linear-gradient(180deg, #151d26 0%, #19222d 100%); + border-right: 1px solid rgba(255, 255, 255, 0.08); + color: #d7e1eb; + z-index: 100; + transition: width 0.2s ease, transform 0.2s ease; + overflow: hidden; padding: 1rem 0.9rem; } -.sidebar-brand__logo{ - width: 2.2rem; - height: 2.2rem; - font-size: 0.8rem; -} - -.sidebar-brand__text h2{ +.sidebar-brand__text h2 { + color: #fff; + letter-spacing: 0.18em; + text-transform: uppercase; font-size: 0.95rem; } -.sidebar-brand__text p, .sidebar-section__label, .sidebar-nav__item span{ +.sidebar-brand__text p, .sidebar-section__label, .sidebar-nav__item span { font-size: 0.78rem; } -.sidebar-nav__item{ +.sidebar-nav__item { + display: flex; + align-items: center; + gap: 0.85rem; + color: rgba(230, 238, 245, 0.84); + border: 1px solid transparent; + transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease; + padding: 0.62rem 0.75rem; min-height: 2.5rem; border-radius: 10px; } -.p-button{ - min-height: 2.45rem; - padding: 0.55rem 0.9rem; - border-radius: 10px; - font-size: 0.82rem; - box-shadow: none; -} - -.p-button .p-button-label{ +.p-button .p-button-label { font-weight: 500; } -.p-button.table-action-btn, .topbar__icon-btn.p-button{ +.p-button.table-action-btn, .topbar__icon-btn.p-button { min-height: 2.2rem; width: 2.2rem; padding: 0; } -.topbar__logout-btn.p-button{ +.topbar__logout-btn.p-button { + min-width: auto; + padding-inline: 1rem; min-height: 2.2rem; padding: 0.45rem 0.75rem; } -.form-field label{ +.form-field label { + text-transform: uppercase; + letter-spacing: 0.12em; font-size: 0.72rem; } -.p-inputtext{ +.p-inputtext { min-height: 2.5rem; font-size: 0.84rem; } -.page-header__title{ +.page-header__title { + line-height: 1; + text-transform: uppercase; + letter-spacing: 0.05em; font-size: 1.55rem; } -.section-card__title, .stat-card__value{ +.section-card__title, .stat-card__value { font-size: 0.95rem; } -.p-datatable .p-datatable-thead > tr > th, .p-datatable .p-datatable-tbody > tr > td{ +.p-datatable .p-datatable-thead > tr > th, .p-datatable .p-datatable-tbody > tr > td { font-size: 0.79rem; } -.p-button{ +/* ========================================================= + FORMS / BUTTONS / PRIME UI NORMALIZATION + ========================================================= */ +.p-button { + text-transform: uppercase; + background: var(--primary); + border-color: var(--primary); + border-width: 1px; + transition: transform 0.12s ease, filter 0.12s ease, border-color 0.12s ease, background-color 0.12s ease; + font-weight: 600; + letter-spacing: 0.1em; + min-height: 2.45rem; + padding: 0.55rem 0.9rem; + border-radius: 10px; + font-size: 0.82rem; + box-shadow: none; color: var(--primary-contrast); } -.p-button.p-button-secondary, .p-button.p-button-help, .p-button.p-button-outlined, .p-button.p-button-text{ +.p-button.p-button-secondary, .p-button.p-button-help, .p-button.p-button-outlined, .p-button.p-button-text { + border-color: color-mix(in srgb, var(--border-strong) 86%, transparent); + background: color-mix(in srgb, var(--surface-1) 92%, transparent); color: var(--text-main); } -.metric-tile{ +.metric-tile { + padding: 1rem; + border: 1px solid var(--border-color); + border-radius: 16px; + background: var(--surface-2); display: flex; flex-direction: column; align-items: flex-start; @@ -1179,126 +902,145 @@ body.dark-theme .topbar{ min-height: 6rem; } -.metric-tile span, .metric-tile strong{ +.metric-tile span, .metric-tile strong { white-space: normal; word-break: break-word; } -.repository-table .p-datatable-tbody > tr > td{ +.repository-table .p-datatable-tbody > tr > td { vertical-align: top; } -.table-actions--labels{ +.table-actions--labels { display: flex; flex-wrap: wrap; gap: 0.5rem; } -.p-button.table-action-btn--wide{ +.p-button.table-action-btn--wide { width: auto; min-width: auto; padding-inline: 0.8rem; } -.preview-dialog .p-dialog-header{ - align-items: center; -} - -.preview-dialog__actions{ +.preview-dialog__actions { margin-bottom: 0.85rem; justify-content: flex-end; } -.preview-dialog__content{ +.preview-dialog__content { max-height: 68vh; margin: 0; } -.change-password-form{ +.change-password-form { max-width: none; width: 100%; } -.p-toast{ +.p-toast { width: min(26rem, calc(100vw - 2rem)); } -.p-toast .p-toast-message{ +.p-toast .p-toast-message { border-radius: 16px; border: 1px solid var(--border-color); box-shadow: var(--shadow-md); overflow: hidden; } -.p-toast .p-toast-message-content{ +.p-toast .p-toast-message-content { gap: 0.8rem; } -.p-confirm-dialog .p-dialog-content{ - line-height: 1.65; -} - +/* <= 720px */ @media (max-width: 720px) { - .change-password-form{ + .page-header, .topbar, .stats-grid, .metric-grid-2, .form-grid-2 { grid-template-columns: 1fr; } - .table-actions--labels{ + .topbar, .page-header { + flex-direction: column; + align-items: flex-start; + } + + .topbar__right { + width: 100%; + } + + .change-password-form { + grid-template-columns: 1fr; + } + + .table-actions--labels { flex-direction: column; align-items: stretch; } - .router-modal-summary{ + .router-modal-summary { flex-direction: column; align-items: flex-start; } - .layout-footer__author{ + .layout-footer__author { width: 100%; justify-content: center; } - .beta-banner, .swos-beta-result__item{ + + .beta-banner, .swos-beta-result__item { flex-direction: column; align-items: flex-start; } - .router-dialog .p-dialog-header{ + .router-dialog .p-dialog-header { padding: 1rem 0.85rem 0.85rem; } - .router-dialog .p-dialog-content{ + .router-dialog .p-dialog-content { padding: 0 0.85rem 0.95rem; } - .router-dialog-header{ + .router-dialog-header { align-items: flex-start; } - .router-dialog-panel__header{ + .router-dialog-panel__header { flex-direction: column; } - .router-dialog-actions{ + .router-dialog-actions { flex-direction: column-reverse; align-items: stretch; } - .router-dialog-actions .p-button{ + .router-dialog-actions .p-button { width: 100%; min-width: 0; } - .device-toggle{grid-template-columns:auto auto auto minmax(0,1fr);align-items:start;} - .device-toggle__state{grid-column:2 / -1;justify-self:start;} + + .device-toggle { + grid-template-columns: auto auto auto minmax(0,1fr); + align-items: start; + } + + .device-toggle__state { + grid-column: 2 / -1; + justify-self: start; + } } - -.sidebar-brand__logo img{ +.sidebar-brand__logo img { width: 100%; height: 100%; object-fit: contain; } -.sidebar-brand__logo{ +.sidebar-brand__logo { + border: 1px solid rgba(255, 255, 255, 0.24); + font-family: var(--font-title); + letter-spacing: 0.12em; + color: #fff; + font-size: 0.8rem; width: 3.25rem; height: 3.25rem; border-radius: 22px; @@ -1309,65 +1051,71 @@ body.dark-theme .topbar{ box-shadow: inset 0 0 0 1px rgba(17, 20, 23, 0.08); } -.topbar__user{ +.topbar__user { padding: 0.35rem 0.65rem 0.35rem 0.35rem; border: 1px solid var(--border-color); border-radius: 999px; background: var(--surface-1); } -.topbar__avatar{ +.topbar__avatar { background: linear-gradient(135deg, var(--blue), var(--accent)); color: #fff; border: 2px solid rgba(255, 255, 255, 0.16); box-shadow: 0 10px 24px rgba(75, 144, 217, 0.22); } -body.dark-theme .topbar__avatar{ +body.dark-theme .topbar__avatar { color: #f8fbff; border-color: rgba(255, 255, 255, 0.18); } -app-section-card.dashboard-operations-card{ +app-section-card.dashboard-operations-card { display: block; margin-bottom: 0.5rem; } -.metric-tile--feature{ +.metric-tile--feature { min-height: 106px; justify-content: space-between; } -.repository-toolbar{ +/* ========================================================= + REPOSITORY / TABLE TOOLBAR + ========================================================= */ +.repository-toolbar { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 0.9rem; margin-bottom: 1rem; } -.repository-toolbar__search{ +.repository-toolbar__search { grid-column: span 4; } -.repository-toolbar .form-field, .compare-strip__slot{ +.repository-toolbar .form-field, .compare-strip__slot { grid-column: span 2; } -.repository-toolbar__actions, .compare-strip__actions{ +.repository-toolbar__actions, .compare-strip__actions { grid-column: span 2; align-self: end; } -.compare-strip__swap{ +.compare-strip__swap { align-self: end; } -.table-actions--stack{ +.table-actions--stack { flex-direction: column; align-items: stretch; } -.github-diff{ +/* ========================================================= + DIFF VIEW + ========================================================= */ +.github-diff { border: 1px solid var(--border-color); border-radius: 18px; overflow: hidden; @@ -1375,18 +1123,18 @@ app-section-card.dashboard-operations-card{ overflow-y: auto; } -.github-diff__row{ +.github-diff__row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } -.github-diff__cell{ +.github-diff__cell { display: grid; grid-template-columns: 56px minmax(0, 1fr); min-width: 0; } -.github-diff__number{ +.github-diff__number { padding: 0.65rem 0.45rem; border-right: 1px solid var(--border-color); text-align: right; @@ -1396,7 +1144,7 @@ app-section-card.dashboard-operations-card{ font-size: 0.78rem; } -.github-diff__cell pre{ +.github-diff__cell pre { margin: 0; padding: 0.65rem 0.85rem; white-space: pre-wrap; @@ -1405,15 +1153,15 @@ app-section-card.dashboard-operations-card{ line-height: 1.5; } -.github-diff__row[data-type="added"] .github-diff__cell--right, .github-diff__row[data-type="modified"] .github-diff__cell--right{ +.github-diff__row[data-type="added"] .github-diff__cell--right, .github-diff__row[data-type="modified"] .github-diff__cell--right { background: rgba(79, 181, 147, 0.12); } -.github-diff__row[data-type="removed"] .github-diff__cell--left, .github-diff__row[data-type="modified"] .github-diff__cell--left{ +.github-diff__row[data-type="removed"] .github-diff__cell--left, .github-diff__row[data-type="modified"] .github-diff__cell--left { background: rgba(227, 122, 122, 0.12); } -.diff-layout__summary{ +.diff-layout__summary { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto auto; gap: 1rem; @@ -1421,46 +1169,49 @@ app-section-card.dashboard-operations-card{ margin-bottom: 1rem; } -.diff-layout__summary-arrow{ +.diff-layout__summary-arrow { color: var(--text-faint); } -.diff-stats{ +.diff-stats { display: flex; gap: 0.5rem; flex-wrap: wrap; } -.diff-stats__pill{ +.diff-stats__pill { padding: 0.45rem 0.7rem; border-radius: 999px; font-family: var(--font-title); font-size: 0.78rem; } -.diff-stats__pill--added{ +.diff-stats__pill--added { background: rgba(79, 181, 147, 0.14); color: var(--success); } -.diff-stats__pill--removed{ +.diff-stats__pill--removed { background: rgba(227, 122, 122, 0.14); color: var(--danger); } -.diff-stats__pill--modified{ +.diff-stats__pill--modified { background: rgba(240, 180, 91, 0.14); color: var(--warning); } -.settings-status-grid{ +/* ========================================================= + SETTINGS + ========================================================= */ +.settings-status-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem; margin-bottom: 1.35rem; } -.settings-status-card{ +.settings-status-card { padding: 1rem; border: 1px solid var(--border-color); border-radius: 22px; @@ -1468,31 +1219,26 @@ app-section-card.dashboard-operations-card{ box-shadow: var(--shadow-md); } -.settings-status-card__header{ +.settings-status-card__header { display: flex; justify-content: space-between; gap: 1rem; margin-bottom: 0.75rem; } -.settings-status-card__description{ +.settings-status-card__description { font-family: var(--font-title); margin-bottom: 0.25rem; } -.settings-scheduler-stack{ - display: grid; - gap: 1rem; -} - -.scheduler-card{ +.scheduler-card { padding: 1rem; border-radius: 22px; border: 1px solid var(--border-color); background: linear-gradient(180deg, rgba(75, 144, 217, 0.05), rgba(75, 144, 217, 0.01)); } -.scheduler-card__header{ +.scheduler-card__header { display: flex; justify-content: space-between; gap: 1rem; @@ -1500,25 +1246,25 @@ app-section-card.dashboard-operations-card{ margin-bottom: 1rem; } -.scheduler-card__header small{ +.scheduler-card__header small { display: block; margin-top: 0.3rem; } -.scheduler-card__grid{ +.scheduler-card__grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.9rem; } -.time-picker{ +.time-picker { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 0.45rem; } -.settings-actions--sticky{ +.settings-actions--sticky { position: sticky; bottom: 1rem; justify-content: flex-end; @@ -1528,95 +1274,63 @@ app-section-card.dashboard-operations-card{ backdrop-filter: blur(10px); } -body.dark-theme .settings-actions--sticky{ +body.dark-theme .settings-actions--sticky { background: rgba(7, 12, 18, 0.45); } -.change-password-shell{ +.change-password-shell { display: grid; grid-template-columns: minmax(280px, 360px) minmax(0, 1fr); gap: 1.25rem; } -.password-insights{ +.password-insights { display: grid; gap: 1rem; } -.password-strength{ +.password-strength { display: flex; justify-content: space-between; gap: 1rem; align-items: center; } -.password-strength__track{ +.password-strength__track { height: 12px; border-radius: 999px; background: rgba(128, 145, 164, 0.14); overflow: hidden; } -.password-strength__track span{ +.password-strength__track span { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--danger), var(--warning), var(--success)); } -.password-checklist{ +.password-checklist { display: grid; gap: 0.75rem; } -.password-checklist__item{ +.password-checklist__item { display: flex; align-items: center; gap: 0.7rem; color: var(--text-soft); } -.password-checklist__item.is-ready{ +.password-checklist__item.is-ready { color: var(--text-main); } -.change-password-form--expanded{ +.change-password-form--expanded { align-items: start; } -@media (max-width: 1280px) { - .repository-toolbar__search, .repository-toolbar .form-field, .repository-toolbar__actions, .compare-strip__slot, .compare-strip__actions{ - grid-column: span 6; - } - - .settings-status-grid{ - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .scheduler-card__grid, .change-password-shell{ - grid-template-columns: 1fr; - } -} - -@media (max-width: 860px) { - .diff-layout__summary{ - grid-template-columns: 1fr; - } - - .github-diff__row{ - grid-template-columns: 1fr; - } - - .repository-toolbar__search, .repository-toolbar .form-field, .repository-toolbar__actions, .compare-strip__slot, .compare-strip__actions, .settings-status-grid{ - grid-column: span 12; - } - - .settings-status-grid{ - grid-template-columns: 1fr; - } -} - -.inline-summary{ +.inline-summary { display: flex; align-items: center; gap: 1rem; @@ -1628,44 +1342,44 @@ body.dark-theme .settings-actions--sticky{ background: linear-gradient(180deg, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0.18)); } -body.dark-theme .inline-summary{ +body.dark-theme .inline-summary { background: linear-gradient(180deg, rgba(255, 255, 255, 0.03), rgba(255, 255, 255, 0.01)); } -.inline-summary--soft{ +.inline-summary--soft { box-shadow: var(--shadow-md); } -.inline-summary--tight{ +.inline-summary--tight { margin-bottom: 1.2rem; } -.inline-summary__item{ +.inline-summary__item { display: flex; flex-direction: column; gap: 0.2rem; } -.inline-summary__item strong{ +.inline-summary__item strong { font-family: var(--font-title); font-size: 1rem; letter-spacing: 0.04em; } -.inline-summary__item span{ +.inline-summary__item span { color: var(--text-soft); font-size: 0.76rem; letter-spacing: 0.12em; text-transform: uppercase; } -.inline-summary__divider{ +.inline-summary__divider { width: 1px; align-self: stretch; background: var(--border-color); } -.settings-automation-intro{ +.settings-automation-intro { display: flex; justify-content: space-between; gap: 1rem; @@ -1677,66 +1391,48 @@ body.dark-theme .inline-summary{ background: rgba(75, 144, 217, 0.04); } -.settings-automation-intro strong, .repository-compare__header strong{ +.settings-automation-intro strong, .repository-compare__header strong { font-family: var(--font-title); font-size: 0.95rem; letter-spacing: 0.05em; } -.settings-automation-intro p, .repository-compare__header p, .scheduler-card__hint{ +.settings-automation-intro p, .repository-compare__header p, .scheduler-card__hint { margin: 0.25rem 0 0; color: var(--text-soft); line-height: 1.55; } -.scheduler-card__hint{ +.scheduler-card__hint { margin-bottom: 1rem; font-size: 0.84rem; } -.choice-toggle{ - display: inline-grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 0.35rem; - padding: 0.3rem; - border: 1px solid var(--border-color); - border-radius: 999px; - background: color-mix(in srgb, var(--surface-1) 92%, transparent); -} - -.choice-toggle__btn{ - min-width: 92px; - border: 0; - border-radius: 999px; - padding: 0.52rem 0.8rem; - background: transparent; - color: var(--text-soft); - font-family: var(--font-title); - font-size: 0.72rem; - letter-spacing: 0.12em; - text-transform: uppercase; - cursor: pointer; - transition: background 0.15s ease, color 0.15s ease, box-shadow 0.15s ease; -} - -.choice-toggle__btn.is-active{ +.choice-toggle__btn.is-active { background: var(--primary); color: #fff; box-shadow: var(--shadow-md); } -.settings-toggle{ +.settings-toggle { + display: flex; + justify-content: space-between; + gap: 1rem; + padding: 0.95rem 1rem; + border: 1px solid var(--border-color); + border-radius: 16px; + background: color-mix(in srgb, var(--surface-1) 86%, transparent); align-items: flex-start; } -.operations-center{ +.operations-center { display: grid; grid-template-columns: minmax(240px, 320px) minmax(0, 1fr); gap: 1rem; align-items: stretch; } -.operations-center__actions{ +.operations-center__actions { display: grid; gap: 0.85rem; padding: 1rem; @@ -1745,75 +1441,67 @@ body.dark-theme .inline-summary{ background: linear-gradient(180deg, rgba(75, 144, 217, 0.06), rgba(75, 144, 217, 0.015)); } -.operations-center__actions .p-button{ +.operations-center__actions .p-button { justify-content: center; } -.operations-center__actions .btn-binary-accent{ +.operations-center__actions .btn-binary-accent { background: rgba(141, 89, 58, 0.1); border-color: rgba(141, 89, 58, 0.34); color: #6f452d; } -.operations-center__actions .btn-binary-accent:not(.p-disabled):hover{ +.operations-center__actions .btn-binary-accent:not(.p-disabled):hover { background: rgba(141, 89, 58, 0.14); border-color: rgba(141, 89, 58, 0.42); } -body.dark-theme .operations-center__actions .btn-binary-accent{ +body.dark-theme .operations-center__actions .btn-binary-accent { background: rgba(75, 144, 217, 0.09); border-color: rgba(75, 144, 217, 0.3); color: #dbe8f5; } -body.dark-theme .operations-center__actions .btn-binary-accent:not(.p-disabled):hover{ +body.dark-theme .operations-center__actions .btn-binary-accent:not(.p-disabled):hover { background: rgba(75, 144, 217, 0.13); border-color: rgba(75, 144, 217, 0.4); } -.header-actions-row .btn-pushover-neutral{ +.header-actions-row .btn-pushover-neutral { background: rgba(75, 144, 217, 0.08); border-color: rgba(75, 144, 217, 0.26); color: #2f5f8f; } -.header-actions-row .btn-pushover-neutral:not(.p-disabled):hover{ +.header-actions-row .btn-pushover-neutral:not(.p-disabled):hover { background: rgba(75, 144, 217, 0.12); border-color: rgba(75, 144, 217, 0.34); } -body.dark-theme .header-actions-row .btn-pushover-neutral{ +body.dark-theme .header-actions-row .btn-pushover-neutral { background: rgba(75, 144, 217, 0.08); border-color: rgba(75, 144, 217, 0.28); color: #dbe8f5; } -body.dark-theme .header-actions-row .btn-pushover-neutral:not(.p-disabled):hover{ +body.dark-theme .header-actions-row .btn-pushover-neutral:not(.p-disabled):hover { background: rgba(75, 144, 217, 0.12); border-color: rgba(75, 144, 217, 0.38); } -.operations-center__stats{ +.operations-center__stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.85rem; } -.operations-center__stats .metric-tile small{ +.operations-center__stats .metric-tile small { margin-top: 0.35rem; color: var(--text-soft); line-height: 1.45; } -.repository-compare{ - margin-top: 1rem; - padding: 1rem; - border: 1px solid var(--border-color); - border-radius: 22px; - background: linear-gradient(180deg, rgba(75, 144, 217, 0.06), rgba(75, 144, 217, 0.02)); -} - -.repository-compare__header{ +.repository-compare__header { display: flex; justify-content: space-between; gap: 1rem; @@ -1821,84 +1509,72 @@ body.dark-theme .header-actions-row .btn-pushover-neutral:not(.p-disabled):hover align-items: flex-start; } -.repository-compare__status{ +.repository-compare__status { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 0.5rem; } -.repository-compare__grid{ - display: grid; - grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto; - gap: 0.9rem; - align-items: end; -} - -.repository-compare__slot{ +.repository-compare__slot { min-width: 0; } -.repository-compare__actions{ +.repository-compare__actions { display: grid; gap: 0.65rem; } -.repository-table .p-datatable-tbody > tr[data-compare-role="left"] > td{ +.repository-table .p-datatable-tbody > tr[data-compare-role="left"] > td { background: rgba(240, 180, 91, 0.07); } -.repository-table .p-datatable-tbody > tr[data-compare-role="right"] > td{ +.repository-table .p-datatable-tbody > tr[data-compare-role="right"] > td { background: rgba(79, 181, 147, 0.08); } -.repository-table .p-datatable-tbody > tr[data-compare-role="left"]:hover > td, .repository-table .p-datatable-tbody > tr[data-compare-role="right"]:hover > td{ +.repository-table .p-datatable-tbody > tr[data-compare-role="left"]:hover > td, .repository-table .p-datatable-tbody > tr[data-compare-role="right"]:hover > td { filter: brightness(1.01); } -.change-password-form .p-inputtext{ +.change-password-form .p-inputtext { width: 100%; } +/* <= 1280px */ @media (max-width: 1280px) { - .operations-center, .operations-center__stats, .repository-compare__grid{ + .repository-toolbar__search, .repository-toolbar .form-field, .repository-toolbar__actions, .compare-strip__slot, .compare-strip__actions { + grid-column: span 6; + } + + .settings-status-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .scheduler-card__grid, .change-password-shell { grid-template-columns: 1fr; } - .repository-compare__status{ + .operations-center, .operations-center__stats, .repository-compare__grid { + grid-template-columns: 1fr; + } + + .repository-compare__status { justify-content: flex-start; } } -@media (max-width: 860px) { - .settings-automation-intro, .repository-compare__header{ - flex-direction: column; - } - - .choice-toggle{ - width: 100%; - } - - .choice-toggle__btn{ - min-width: 0; - } - - .inline-summary__divider{ - display: none; - } -} - -.layout-footer a{ +.layout-footer a { color: var(--accent); } -.layout-footer__status{ +.layout-footer__status { display: inline-flex; align-items: center; gap: 0.45rem; } -.layout-footer__status::before{ +.layout-footer__status::before { content: ""; width: 0.6rem; height: 0.6rem; @@ -1907,22 +1583,22 @@ body.dark-theme .header-actions-row .btn-pushover-neutral:not(.p-disabled):hover box-shadow: 0 0 0 4px rgba(128, 145, 164, 0.12); } -.layout-footer__status--online::before{ +.layout-footer__status--online::before { background: var(--success); box-shadow: 0 0 0 4px rgba(79, 181, 147, 0.16); } -.layout-footer__status--offline::before{ +.layout-footer__status--offline::before { background: var(--danger); box-shadow: 0 0 0 4px rgba(195, 70, 70, 0.14); } -.layout-footer__status--checking::before{ +.layout-footer__status--checking::before { background: var(--warning); box-shadow: 0 0 0 4px rgba(240, 180, 91, 0.14); } -.api-connection-banner{ +.api-connection-banner { position: fixed; right: 1.5rem; bottom: 1.5rem; @@ -1938,29 +1614,29 @@ body.dark-theme .header-actions-row .btn-pushover-neutral:not(.p-disabled):hover box-shadow: var(--shadow-lg); } -body.dark-theme .api-connection-banner{ +body.dark-theme .api-connection-banner { background: rgba(29, 39, 51, 0.96); } -.api-connection-banner__content{ +.api-connection-banner__content { display: grid; gap: 0.25rem; } -.api-connection-banner__content strong{ +.api-connection-banner__content strong { font-size: 0.84rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--danger); } -.api-connection-banner__content span{ +.api-connection-banner__content span { color: var(--text-soft); font-size: 0.9rem; line-height: 1.5; } -.api-connection-banner__action{ +.api-connection-banner__action { flex-shrink: 0; border: 1px solid rgba(195, 70, 70, 0.2); border-radius: 999px; @@ -1975,24 +1651,23 @@ body.dark-theme .api-connection-banner{ cursor: pointer; } -.api-connection-banner__action:hover{ +.api-connection-banner__action:hover { background: rgba(195, 70, 70, 0.08); } -.router-detail-grid{ +/* ========================================================= + ROUTERS + ========================================================= */ +.router-detail-grid { align-items: start; } -.router-detail-grid--stack{ - grid-template-columns: 1fr; -} - -.router-status-panel{ +.router-status-panel { display: grid; gap: 0.9rem; } -.router-status-error{ +.router-status-error { display: grid; gap: 0.35rem; padding: 0.85rem 1rem; @@ -2001,37 +1676,37 @@ body.dark-theme .api-connection-banner{ background: rgba(217, 75, 91, 0.08); } -.table-actions--tight{ +.table-actions--tight { flex-wrap: nowrap; gap: 0.4rem; overflow-x: auto; padding-bottom: 0.15rem; } -.p-button.table-action-btn--compact{ +.p-button.table-action-btn--compact { min-height: 2rem; padding-inline: 0.6rem; font-size: 0.78rem; } -.settings-page-shell{ +.settings-page-shell { display: grid; gap: 1rem; } -.settings-page-columns{ +.settings-page-columns { display: grid; grid-template-columns: minmax(0, 1.65fr) minmax(320px, 0.95fr); gap: 1rem; align-items: start; } -.settings-page-main, .settings-page-side{ +.settings-page-main, .settings-page-side { display: grid; gap: 1rem; } -.settings-collapse{ +.settings-collapse { border: 1px solid var(--border-color); border-radius: 24px; background: linear-gradient(180deg, var(--surface-1) 0%, var(--surface-0) 100%); @@ -2039,7 +1714,7 @@ body.dark-theme .api-connection-banner{ overflow: hidden; } -.settings-collapse > summary{ +.settings-collapse > summary { position: relative; list-style: none; cursor: pointer; @@ -2048,22 +1723,22 @@ body.dark-theme .api-connection-banner{ gap: 0.2rem; } -.settings-collapse > summary::-webkit-details-marker{ +.settings-collapse > summary::-webkit-details-marker { display: none; } -.settings-collapse > summary span{ +.settings-collapse > summary span { font-family: var(--font-title); font-size: 1rem; letter-spacing: 0.08em; text-transform: uppercase; } -.settings-collapse > summary small{ +.settings-collapse > summary small { color: var(--text-soft); } -.settings-collapse > summary::after{ +.settings-collapse > summary::after { content: ""; font-family: "primeicons"; position: absolute; @@ -2074,53 +1749,55 @@ body.dark-theme .api-connection-banner{ transition: transform 0.2s ease; } -.settings-collapse[open] > summary::after{ +.settings-collapse[open] > summary::after { transform: translateY(-50%) rotate(180deg); } -.settings-collapse__body{ +.settings-collapse__body { padding: 0.85rem 1.15rem 1.15rem; border-top: 1px solid var(--border-color); } -.settings-collapse__body > :first-child, .section-card .p-card-content > :first-child{ +.settings-collapse__body > :first-child, .section-card .p-card-content > :first-child { margin-top: 0; } -.settings-collapse--sticky{ +.settings-collapse--sticky { position: sticky; top: 1rem; } -.settings-scheduler-stack{ +.settings-scheduler-stack { + display: grid; + gap: 1rem; margin-top: 1rem; } -.scheduler-card--subtle{ +.scheduler-card--subtle { background: linear-gradient(180deg, rgba(79, 181, 147, 0.08), rgba(79, 181, 147, 0.02)); } -.scheduler-card__grid--compact{ +.scheduler-card__grid--compact { grid-template-columns: minmax(0, 220px); } -.settings-ssh-panel{ +.settings-ssh-panel { display: grid; gap: 1rem; } -.settings-ssh-panel__header{ +.settings-ssh-panel__header { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; } -.settings-ssh-panel__header p, .settings-ssh-lock p, .settings-ssh-note{ +.settings-ssh-panel__header p, .settings-ssh-lock p, .settings-ssh-note { color: var(--text-soft); } -.settings-ssh-lock{ +.settings-ssh-lock { display: grid; gap: 0.85rem; padding: 1rem; @@ -2129,67 +1806,102 @@ body.dark-theme .api-connection-banner{ background: rgba(75, 144, 217, 0.05); } -.settings-ssh-actions{ +.settings-ssh-actions { justify-content: flex-end; } -app-page-header, app-section-card, app-stat-card, app-sidebar, app-topbar{ +app-page-header, app-section-card, app-stat-card, app-sidebar, app-topbar { display: block; } -app-page-header{ +app-page-header { margin-bottom: 1rem; } -.section-card__header + *, .page-header__actions + *{ +.section-card__header + *, .page-header__actions + * { margin-top: 0.25rem; } -.p-tag, .p-tag .p-tag-value{ +.p-tag, .p-tag .p-tag-value { max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +/* <= 1120px */ @media (max-width: 1120px) { - .settings-page-columns{ + .settings-page-columns { grid-template-columns: 1fr; } - .settings-collapse--sticky{ + .settings-collapse--sticky { position: static; } } +/* <= 860px */ @media (max-width: 860px) { - .table-actions--tight{ + .diff-layout__summary { + grid-template-columns: 1fr; + } + + .github-diff__row { + grid-template-columns: 1fr; + } + + .repository-toolbar__search, .repository-toolbar .form-field, .repository-toolbar__actions, .compare-strip__slot, .compare-strip__actions, .settings-status-grid { + grid-column: span 12; + } + + .settings-status-grid { + grid-template-columns: 1fr; + } + + .settings-automation-intro, .repository-compare__header { + flex-direction: column; + } + + .choice-toggle { + width: 100%; + } + + .choice-toggle__btn { + min-width: 0; + } + + .inline-summary__divider { + display: none; + } + + .table-actions--tight { flex-wrap: wrap; overflow-x: visible; } - .settings-collapse__body{ + .settings-collapse__body { padding-inline: 1rem; } } -.router-detail-grid--inspection{ +.router-detail-grid--inspection { grid-template-columns: minmax(0, 1.2fr) minmax(340px, 0.9fr); align-items: start; } -.router-detail-split-grid{ +.router-detail-split-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; margin-top: 1rem; } -.router-detail-grid--stack{ +.router-detail-grid--stack { + grid-template-columns: 1fr; margin-top: 1rem; } -.router-modal-summary{ +.router-modal-summary { display: flex; justify-content: space-between; gap: 1rem; @@ -2200,27 +1912,25 @@ app-page-header{ background: linear-gradient(180deg, rgba(75, 144, 217, 0.05), rgba(75, 144, 217, 0.015)); } -.router-modal-summary strong, .diff-pick-card__meta strong{ +.router-modal-summary strong, .diff-pick-card__meta strong { display: block; margin: 0; } -.router-modal-summary small, .diff-pick-card__meta small{ +.router-modal-summary small, .diff-pick-card__meta small { display: block; margin-top: 0.35rem; color: var(--text-soft); } -.repository-table, .dashboard-grid > app-section-card, .router-detail-inspection-stack > app-section-card{ +.repository-table, .dashboard-grid > app-section-card, .router-detail-inspection-stack > app-section-card { width: 100%; } -.diff-workspace{ - display: grid; - gap: 1rem; -} - -.diff-workspace__toolbar{ +/* ========================================================= + DIFF CONFIGS WORKSPACE + ========================================================= */ +.diff-workspace__toolbar { display: flex; justify-content: space-between; gap: 1rem; @@ -2228,28 +1938,21 @@ app-page-header{ flex-wrap: wrap; } -.diff-workspace__router{ +.diff-workspace__router { min-width: min(320px, 100%); } -.diff-workspace__actions{ +.diff-workspace__actions { display: flex; gap: 0.7rem; flex-wrap: wrap; } -.diff-workspace__pair{ - display: grid; - grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); - gap: 1rem; - align-items: center; -} - -.diff-workspace__swap.p-button{ +.diff-workspace__swap.p-button { align-self: center; } -.diff-pick-card{ +.diff-pick-card { display: grid; gap: 0.9rem; padding: 1rem; @@ -2258,58 +1961,48 @@ app-page-header{ background: linear-gradient(180deg, var(--surface-1), rgba(255,255,255,0.02)); } -.diff-pick-card.is-selected{ +.diff-pick-card.is-selected { border-color: rgba(75, 144, 217, 0.3); box-shadow: var(--shadow-md); } -.diff-pick-card__header{ +.diff-pick-card__header { display: flex; justify-content: space-between; gap: 1rem; align-items: center; } -.diff-pick-card__header strong{ +.diff-pick-card__header strong { font-family: var(--font-title); letter-spacing: 0.06em; } -.diff-pick-card__meta{ +.diff-pick-card__meta { padding-top: 0.3rem; border-top: 1px solid var(--border-color); } -@media (max-width: 980px) { - .diff-workspace__pair, .router-detail-grid--inspection, .router-detail-split-grid{ - grid-template-columns: 1fr; - } - - .diff-workspace__swap.p-button{ - justify-self: stretch; - } -} - -.repository-table-section, .diff-configs-table-section{ +.repository-table-section, .diff-configs-table-section { display: block; margin-top: 1rem; } -.repository-table.app-table{ +.repository-table.app-table { border-radius: 16px; } -.repository-table.app-table .p-datatable-thead > tr > th{ +.repository-table.app-table .p-datatable-thead > tr > th { padding: 0.72rem 0.8rem; font-size: 0.68rem; letter-spacing: 0.1em; } -.repository-table.app-table .p-datatable-tbody > tr > td{ +.repository-table.app-table .p-datatable-tbody > tr > td { padding: 0.68rem 0.8rem; } -.repository-table .table-primary{ +.repository-table .table-primary { font-size: 0.88rem; line-height: 1.35; min-width: 0; @@ -2319,37 +2012,26 @@ app-page-header{ word-break: break-word; } -.repository-table .table-secondary{ - margin-top: 0.18rem; - font-size: 0.74rem; - line-height: 1.35; - min-width: 0; - max-width: 100%; - white-space: normal; - overflow-wrap: anywhere; - word-break: break-word; -} - -.repository-table .p-tag{ +.repository-table .p-tag { font-size: 0.62rem; padding: 0.24rem 0.58rem; } -.repository-table .p-datatable-thead > tr > th:first-child{ +.repository-table .p-datatable-thead > tr > th:first-child { width: 2.6rem; padding-inline: 0.55rem; } -.repository-table .p-datatable-tbody > tr > td:first-child{ +.repository-table .p-datatable-tbody > tr > td:first-child { padding-inline: 0.55rem; } -.repository-table .table-actions--stack{ +.repository-table .table-actions--stack { gap: 0.38rem; min-width: 0; } -.repository-table .p-button.table-action-btn, .repository-table .p-button.table-action-btn--wide, .repository-table .p-button.table-action-btn--compact{ +.repository-table .p-button.table-action-btn, .repository-table .p-button.table-action-btn--wide, .repository-table .p-button.table-action-btn--compact { min-height: 1.9rem; min-width: 0; max-width: 100%; @@ -2358,64 +2040,83 @@ app-page-header{ letter-spacing: 0.09em; } -.repository-table .p-button .p-button-label{ +.repository-table .p-button .p-button-label { white-space: nowrap; overflow-wrap: normal; word-break: normal; } -.repository-table .p-column-title{ - display: none; -} - -.repository-table .p-button .p-button-icon{ +.repository-table .p-button .p-button-icon { font-size: 0.78rem; } -.repository-table .p-paginator{ +.repository-table .p-paginator { padding: 0.4rem 0.65rem; } -.repository-table .p-paginator .p-paginator-pages .p-paginator-page, .repository-table .p-paginator .p-paginator-next, .repository-table .p-paginator .p-paginator-prev{ +.repository-table .p-paginator .p-paginator-pages .p-paginator-page, .repository-table .p-paginator .p-paginator-next, .repository-table .p-paginator .p-paginator-prev { min-width: 2rem; height: 2rem; } -.repository-compare{ +.repository-compare { + padding: 1rem; + border: 1px solid var(--border-color); + border-radius: 22px; + background: linear-gradient(180deg, rgba(75, 144, 217, 0.06), rgba(75, 144, 217, 0.02)); margin-top: 1.15rem; } -.repository-compare__grid{ +.repository-compare__grid { + display: grid; + grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto; + gap: 0.9rem; + align-items: end; margin-top: 0.2rem; } -.diff-workspace{ +.diff-workspace { + display: grid; gap: 1.15rem; } -.diff-workspace__pair{ +.diff-workspace__pair { + display: grid; + grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); + gap: 1rem; + align-items: center; margin-top: 0.15rem; } -.preview-dialog .p-dialog-header{ +.preview-dialog .p-dialog-header { + align-items: center; padding-bottom: 0.9rem; } -.preview-dialog .p-dialog-content{ +.preview-dialog .p-dialog-content { padding-top: 1rem; } +/* <= 980px */ @media (max-width: 980px) { - .repository-table-section, .diff-configs-table-section{ + .diff-workspace__pair, .router-detail-grid--inspection, .router-detail-split-grid { + grid-template-columns: 1fr; + } + + .diff-workspace__swap.p-button { + justify-self: stretch; + } + + .repository-table-section, .diff-configs-table-section { margin-top: 0.85rem; } - .repository-table.app-table .p-datatable-thead > tr > th, .repository-table.app-table .p-datatable-tbody > tr > td{ + .repository-table.app-table .p-datatable-thead > tr > th, .repository-table.app-table .p-datatable-tbody > tr > td { padding-inline: 0.72rem; } } -.layout-footer__author{ +.layout-footer__author { display: inline-flex; align-items: center; gap: 0.55rem; @@ -2425,22 +2126,22 @@ app-page-header{ background: color-mix(in srgb, var(--surface-1) 90%, transparent); } -.layout-footer__author-label{ +.layout-footer__author-label { color: var(--text-soft); } -.layout-footer__author strong{ +.layout-footer__author strong { font-size: 0.82rem; text-transform: none; letter-spacing: 0.04em; } -.layout-footer__author a{ +.layout-footer__author a { font-size: 0.78rem; font-weight: 700; } -.settings-interface-intro, .settings-automation-intro{ +.settings-interface-intro, .settings-automation-intro { display: flex; align-items: center; justify-content: space-between; @@ -2452,71 +2153,90 @@ app-page-header{ background: rgba(75, 144, 217, 0.04); } -.settings-interface-intro strong, .settings-automation-intro strong, .repository-compare__header strong{ +.settings-interface-intro strong, .settings-automation-intro strong, .repository-compare__header strong { font-family: var(--font-title); font-size: 0.95rem; letter-spacing: 0.05em; } -.settings-interface-intro p, .settings-automation-intro p, .repository-compare__header p, .scheduler-card__hint{ +.settings-interface-intro p, .settings-automation-intro p, .repository-compare__header p, .scheduler-card__hint { margin: 0.25rem 0 0; color: var(--text-soft); line-height: 1.55; } -.choice-toggle{ +.choice-toggle { + display: inline-grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.35rem; + padding: 0.3rem; + border: 1px solid var(--border-color); + border-radius: 999px; + background: color-mix(in srgb, var(--surface-1) 92%, transparent); overflow: hidden; } -.choice-toggle__btn{ +.choice-toggle__btn { + min-width: 92px; + border: 0; + border-radius: 999px; + padding: 0.52rem 0.8rem; + background: transparent; + color: var(--text-soft); + font-family: var(--font-title); + font-size: 0.72rem; + letter-spacing: 0.12em; + text-transform: uppercase; + cursor: pointer; + transition: background 0.15s ease, color 0.15s ease, box-shadow 0.15s ease; font-weight: 700; } -body.dark-theme .choice-toggle{ +body.dark-theme .choice-toggle { background: rgba(8, 14, 22, 0.52); border-color: rgba(146, 170, 194, 0.24); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03); } -body.dark-theme .choice-toggle__btn{ +body.dark-theme .choice-toggle__btn { color: #b8c8d8; } -body.dark-theme .choice-toggle__btn:hover{ +body.dark-theme .choice-toggle__btn:hover { background: rgba(255, 255, 255, 0.06); color: #edf3f8; } -body.dark-theme .choice-toggle__btn.is-active{ +body.dark-theme .choice-toggle__btn.is-active { background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 82%, #fff 0%), color-mix(in srgb, var(--blue) 85%, #fff 0%)); color: #0f1720; } -.p-confirm-dialog{ +.p-confirm-dialog { border-radius: 24px; overflow: hidden; border: 1px solid var(--border-color); box-shadow: var(--shadow-lg); } -.p-confirm-dialog .p-dialog-header{ +.p-confirm-dialog .p-dialog-header { padding: 1rem 1.15rem 0.75rem; background: linear-gradient(180deg, color-mix(in srgb, var(--surface-1) 98%, transparent), color-mix(in srgb, var(--surface-0) 98%, transparent)); border-bottom: 1px solid var(--border-color); } -.p-confirm-dialog .p-dialog-title{ +.p-confirm-dialog .p-dialog-title { font-family: var(--font-title); letter-spacing: 0.08em; } -.p-confirm-dialog .p-dialog-content{ +.p-confirm-dialog .p-dialog-content { padding: 1rem 1.15rem 0.5rem; line-height: 1.65; background: color-mix(in srgb, var(--surface-0) 98%, transparent); } -.p-confirm-dialog .p-confirm-dialog-icon{ +.p-confirm-dialog .p-confirm-dialog-icon { width: 2.6rem; height: 2.6rem; display: inline-grid; @@ -2527,7 +2247,7 @@ body.dark-theme .choice-toggle__btn.is-active{ margin-right: 0.85rem; } -.p-confirm-dialog .p-dialog-footer{ +.p-confirm-dialog .p-dialog-footer { display: flex; justify-content: flex-end; gap: 0.65rem; @@ -2536,15 +2256,18 @@ body.dark-theme .choice-toggle__btn.is-active{ border-top: 1px solid var(--border-color); } -body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon{ +body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon { background: rgba(240, 180, 91, 0.14); } -.settings-actions, .settings-actions--sticky{ +.settings-actions, .settings-actions--sticky { justify-content: center; } -.beta-banner{ +/* ========================================================= + SWOS / BETA + ========================================================= */ +.beta-banner { display: flex; align-items: flex-start; justify-content: space-between; @@ -2555,28 +2278,28 @@ body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon{ background: linear-gradient(180deg, color-mix(in srgb, var(--warning) 10%, transparent), color-mix(in srgb, var(--surface-1) 94%, transparent)); } -.beta-banner p{ +.beta-banner p { margin: 0.45rem 0 0; color: var(--text-soft); line-height: 1.6; } -.swos-beta-grid{ +.swos-beta-grid { align-items: start; } -.swos-beta-actions{ +.swos-beta-actions { grid-column: 1 / -1; justify-content: flex-start; flex-wrap: wrap; } -.swos-beta-result{ +.swos-beta-result { display: grid; gap: 0.85rem; } -.swos-beta-result__item{ +.swos-beta-result__item { display: flex; align-items: center; justify-content: space-between; @@ -2587,63 +2310,43 @@ body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon{ background: color-mix(in srgb, var(--surface-1) 90%, transparent); } -.swos-beta-result__item span{ +.swos-beta-result__item span { color: var(--text-soft); font-size: 0.78rem; letter-spacing: 0.08em; text-transform: uppercase; } -.swos-beta-result__item strong{ +.swos-beta-result__item strong { text-align: right; } -.swos-beta-note, .beta-error{ +.swos-beta-note, .beta-error { padding: 0.9rem 1rem; border-radius: 14px; line-height: 1.6; } -.swos-beta-note{ +.swos-beta-note { border: 1px solid var(--border-color); color: var(--text-soft); background: color-mix(in srgb, var(--surface-1) 88%, transparent); } -.beta-error{ +.beta-error { border: 1px solid color-mix(in srgb, var(--danger) 38%, var(--border-color)); color: color-mix(in srgb, var(--danger) 82%, var(--text-main)); background: color-mix(in srgb, var(--danger) 8%, transparent); } -.router-dialog .p-dialog-header{ - padding: 1.15rem 1.2rem 1rem; - align-items: flex-start; - background: - linear-gradient(135deg, rgba(75, 144, 217, 0.16), rgba(79, 181, 147, 0.1)), - linear-gradient(180deg, rgba(255, 255, 255, 0.03), rgba(255, 255, 255, 0)), - var(--surface-1); - border-bottom: 1px solid rgba(75, 144, 217, 0.18); -} - -.router-dialog .p-dialog-header-icons{ - align-self: flex-start; - margin-top: 0.2rem; -} - -.router-dialog .p-dialog-content{ - padding: 0 1.2rem 1.2rem; - background: linear-gradient(180deg, rgba(75, 144, 217, 0.06) 0%, rgba(75, 144, 217, 0) 180px), var(--surface-1); -} - -.router-dialog-header{ +.router-dialog-header { display: flex; align-items: center; gap: 0.9rem; width: calc(100% - 0.5rem); } -.router-dialog-header__icon{ +.router-dialog-header__icon { width: 3rem; height: 3rem; border-radius: 18px; @@ -2656,15 +2359,15 @@ body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon{ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08); } -.router-dialog-header__icon .pi{ +.router-dialog-header__icon .pi { font-size: 1.05rem; } -.router-dialog-header__text{ +.router-dialog-header__text { min-width: 0; } -.router-dialog-header__eyebrow{ +.router-dialog-header__eyebrow { font-family: var(--font-title); font-size: 0.72rem; letter-spacing: 0.14em; @@ -2672,38 +2375,30 @@ body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon{ color: var(--text-soft); } -.router-dialog-header__title{ +.router-dialog-header__title { margin-top: 0.2rem; font-family: var(--font-title); font-size: 1.18rem; line-height: 1.25; } -.router-dialog-header__text small{ +.router-dialog-header__text small { display: block; margin-top: 0.3rem; max-width: 42rem; line-height: 1.55; } -.router-dialog-form{ +.router-dialog-form { display: grid; gap: 1rem; } -.router-dialog-panel{ - padding: 1rem; - border-radius: 22px; - border: 1px solid var(--border-color); - background: linear-gradient(180deg, rgba(255, 255, 255, 0.03), rgba(255, 255, 255, 0)), var(--surface-0); - box-shadow: var(--shadow-md); -} - -.router-dialog-panel:first-child{ +.router-dialog-panel:first-child { margin-top: 1rem; } -.router-dialog-panel__header{ +.router-dialog-panel__header { display: flex; justify-content: space-between; align-items: flex-start; @@ -2711,7 +2406,7 @@ body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon{ margin-bottom: 0.95rem; } -.router-dialog-panel__header strong{ +.router-dialog-panel__header strong { display: block; font-family: var(--font-title); font-size: 0.88rem; @@ -2719,13 +2414,13 @@ body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon{ text-transform: uppercase; } -.router-dialog-panel__header p{ +.router-dialog-panel__header p { margin: 0.35rem 0 0; color: var(--text-soft); line-height: 1.55; } -.router-dialog-pill{ +.router-dialog-pill { display: inline-flex; align-items: center; gap: 0.45rem; @@ -2741,11 +2436,11 @@ body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon{ white-space: nowrap; } -.router-dialog-grid{ +.router-dialog-grid { gap: 0.95rem 1rem; } -.router-dialog-note{ +.router-dialog-note { margin-top: 0.9rem; padding: 0.85rem 0.95rem; border-radius: 16px; @@ -2758,47 +2453,46 @@ body.dark-theme .p-confirm-dialog .p-confirm-dialog-icon{ line-height: 1.55; } -.router-dialog-note .pi{ +.router-dialog-note .pi { margin-top: 0.1rem; color: var(--accent); } -.router-dialog .p-inputtext, .router-dialog .p-inputtextarea{ +.router-dialog .p-inputtext, .router-dialog .p-inputtextarea { background: rgba(255, 255, 255, 0.02); } -.router-dialog .p-inputtextarea{ +.router-dialog .p-inputtextarea { min-height: 11rem; } -.router-dialog-actions{ +.router-dialog-actions { justify-content: space-between; gap: 0.75rem; padding-top: 0.1rem; } -.router-dialog-actions .p-button{ +.router-dialog-actions .p-button { min-width: 11rem; } - -.p-select, .p-inputtext, .p-textarea, .p-inputtextarea, textarea.p-inputtextarea, textarea.p-textarea{ +.p-select, .p-inputtext, .p-textarea, .p-inputtextarea, textarea.p-inputtextarea, textarea.p-textarea { width: 100%; } -.p-button:not(.p-button-secondary):not(.p-button-help):not(.p-button-danger):not(.p-button-text):not(.p-button-outlined){ +.p-button:not(.p-button-secondary):not(.p-button-help):not(.p-button-danger):not(.p-button-text):not(.p-button-outlined) { background: var(--primary); border-color: var(--primary); color: #f8fbff; } -body.dark-theme .p-button:not(.p-button-secondary):not(.p-button-help):not(.p-button-danger):not(.p-button-text):not(.p-button-outlined){ +body.dark-theme .p-button:not(.p-button-secondary):not(.p-button-help):not(.p-button-danger):not(.p-button-text):not(.p-button-outlined) { background: var(--primary); border-color: var(--primary); color: #17212b; } -.p-select, .p-textarea, .p-inputtextarea, .p-inputtext, textarea.p-inputtextarea, textarea.p-textarea{ +.p-select, .p-textarea, .p-inputtextarea, .p-inputtext, textarea.p-inputtextarea, textarea.p-textarea { border-radius: 14px; border: 1px solid rgba(126, 142, 158, 0.24); background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(247, 245, 241, 0.98) 100%); @@ -2807,41 +2501,41 @@ body.dark-theme .p-button:not(.p-button-secondary):not(.p-button-help):not(.p-bu transition: border-color 0.16s ease, box-shadow 0.16s ease, background-color 0.16s ease; } -body.dark-theme .p-select, body.dark-theme .p-textarea, body.dark-theme .p-inputtextarea, body.dark-theme .p-inputtext, body.dark-theme textarea.p-inputtextarea, body.dark-theme textarea.p-textarea{ +body.dark-theme .p-select, body.dark-theme .p-textarea, body.dark-theme .p-inputtextarea, body.dark-theme .p-inputtext, body.dark-theme textarea.p-inputtextarea, body.dark-theme textarea.p-textarea { background: linear-gradient(180deg, rgba(28, 38, 50, 0.98) 0%, rgba(23, 33, 44, 0.98) 100%); color: var(--text-main); border-color: rgba(146, 170, 194, 0.18); box-shadow: 0 12px 24px rgba(5, 10, 18, 0.26); } -.p-select{ +.p-select { display: flex; align-items: center; min-height: 3rem; overflow: hidden; } -.p-select:not(.p-disabled):hover{ +.p-select:not(.p-disabled):hover { border-color: rgba(141, 89, 58, 0.42); background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(244, 241, 236, 0.98) 100%); } -body.dark-theme .p-select:not(.p-disabled):hover{ +body.dark-theme .p-select:not(.p-disabled):hover { border-color: rgba(75, 144, 217, 0.24); background: linear-gradient(180deg, rgba(29, 39, 51, 0.985) 0%, rgba(24, 34, 45, 0.985) 100%); } -.p-select.p-focus, .p-select.p-inputwrapper-focus{ +.p-select.p-focus, .p-select.p-inputwrapper-focus { border-color: rgba(141, 89, 58, 0.62); box-shadow: 0 0 0 3px rgba(141, 89, 58, 0.12), 0 10px 24px rgba(15, 23, 42, 0.06); } -body.dark-theme .p-select.p-focus, body.dark-theme .p-select.p-inputwrapper-focus{ +body.dark-theme .p-select.p-focus, body.dark-theme .p-select.p-inputwrapper-focus { border-color: #4f95df; box-shadow: 0 0 0 3px rgba(79, 149, 223, 0.16), 0 16px 30px rgba(5, 10, 18, 0.28); } -.p-select .p-select-label, .p-select .p-select-label.p-placeholder{ +.p-select .p-select-label, .p-select .p-select-label.p-placeholder { width: 100%; min-height: 0; padding: 0.84rem 0 0.84rem 1rem; @@ -2860,17 +2554,17 @@ body.dark-theme .p-select.p-focus, body.dark-theme .p-select.p-inputwrapper-focu color: var(--text-main); } -.p-select .p-select-label.p-placeholder{ +.p-select .p-select-label.p-placeholder { font-weight: 400; color: var(--text-soft); } -.repository-toolbar .p-select .p-select-label, .repository-compare .p-select .p-select-label{ +.repository-toolbar .p-select .p-select-label, .repository-compare .p-select .p-select-label { font-size: 0.95rem; line-height: 1.3; } -.p-select .p-select-dropdown{ +.p-select .p-select-dropdown { width: 2.85rem; display: grid; place-items: center; @@ -2880,32 +2574,32 @@ body.dark-theme .p-select.p-focus, body.dark-theme .p-select.p-inputwrapper-focu background: transparent; } -.p-select .p-select-dropdown .p-icon{ +.p-select .p-select-dropdown .p-icon { width: 0.95rem; height: 0.95rem; } -.p-inputtext:enabled:focus, .p-textarea:enabled:focus, .p-inputtextarea:enabled:focus, textarea.p-inputtextarea:enabled:focus, textarea.p-textarea:enabled:focus{ +.p-inputtext:enabled:focus, .p-textarea:enabled:focus, .p-inputtextarea:enabled:focus, textarea.p-inputtextarea:enabled:focus, textarea.p-textarea:enabled:focus { border-color: color-mix(in srgb, var(--blue) 72%, var(--border-strong)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--blue) 18%, transparent); } -body.dark-theme .auth-card .p-inputtext, body.dark-theme .auth-card .p-select, body.dark-theme .auth-card .p-textarea, body.dark-theme .auth-card .p-inputtextarea{ +body.dark-theme .auth-card .p-inputtext, body.dark-theme .auth-card .p-select, body.dark-theme .auth-card .p-textarea, body.dark-theme .auth-card .p-inputtextarea { color: var(--text-main); border-color: var(--border-color); background: rgba(255, 255, 255, 0.035); } -body.dark-theme .auth-card .p-inputtext::placeholder, body.dark-theme .auth-card .p-textarea::placeholder, body.dark-theme .auth-card .p-inputtextarea::placeholder{ +body.dark-theme .auth-card .p-inputtext::placeholder, body.dark-theme .auth-card .p-textarea::placeholder, body.dark-theme .auth-card .p-inputtextarea::placeholder { color: var(--text-soft); } -body.dark-theme .auth-card .p-inputtext:enabled:focus, body.dark-theme .auth-card .p-textarea:enabled:focus, body.dark-theme .auth-card .p-inputtextarea:enabled:focus{ +body.dark-theme .auth-card .p-inputtext:enabled:focus, body.dark-theme .auth-card .p-textarea:enabled:focus, body.dark-theme .auth-card .p-inputtextarea:enabled:focus { border-color: var(--blue); box-shadow: 0 0 0 3px color-mix(in srgb, var(--blue) 18%, transparent); } -.p-select-overlay{ +.p-select-overlay { backdrop-filter: blur(18px); background: linear-gradient(180deg, rgba(251, 250, 247, 0.98) 0%, rgba(244, 242, 238, 0.98) 100%); border: 1px solid rgba(126, 142, 158, 0.16); @@ -2915,23 +2609,23 @@ body.dark-theme .auth-card .p-inputtext:enabled:focus, body.dark-theme .auth-car overflow: hidden; } -body.dark-theme .p-select-overlay{ +body.dark-theme .p-select-overlay { background: linear-gradient(180deg, rgba(34, 46, 61, 0.98) 0%, rgba(24, 34, 45, 0.98) 100%); border-color: rgba(146, 170, 194, 0.12); box-shadow: 0 22px 48px rgba(5, 10, 18, 0.38); } -.p-select-list{ +.p-select-list { padding: 0.35rem 0; background: transparent; gap: 0; } -body.dark-theme .p-select-list{ +body.dark-theme .p-select-list { background: transparent; } -.p-select-option{ +.p-select-option { border-radius: 0; padding: 0.82rem 1rem; font-size: 0.92rem; @@ -2940,94 +2634,97 @@ body.dark-theme .p-select-list{ transition: background-color 0.12s ease, color 0.12s ease; } -.p-select-option:hover{ +.p-select-option:hover { background: rgba(17, 20, 23, 0.045); color: #111417; } -.p-select-option.p-focus{ +.p-select-option.p-focus { background: rgba(17, 20, 23, 0.055); color: #111417; } -.p-select-option.p-select-option-selected{ +.p-select-option.p-select-option-selected { background: rgba(141, 89, 58, 0.09); color: #6f452d; font-weight: 600; } -body.dark-theme .p-select-option{ +body.dark-theme .p-select-option { color: #dbe5ef; } -body.dark-theme .p-select-option:hover{ +body.dark-theme .p-select-option:hover { background: rgba(255, 255, 255, 0.03); color: #f4f8fb; } -body.dark-theme .p-select-option.p-focus{ +body.dark-theme .p-select-option.p-focus { background: rgba(255, 255, 255, 0.04); color: #f4f8fb; } -body.dark-theme .p-select-option.p-select-option-selected{ +body.dark-theme .p-select-option.p-select-option-selected { background: rgba(75, 144, 217, 0.22); color: #f4f8fb; font-weight: 600; } -.p-textarea, .p-inputtextarea, textarea.p-textarea, textarea.p-inputtextarea{ +.p-textarea, .p-inputtextarea, textarea.p-textarea, textarea.p-inputtextarea { padding: 0.82rem 0.9rem; } -.router-dialog.p-dialog{ +.router-dialog.p-dialog { border: 1px solid var(--border-color); background: var(--surface-1); box-shadow: var(--shadow-lg); } -body.dark-theme .router-dialog.p-dialog{ +body.dark-theme .router-dialog.p-dialog { border-color: color-mix(in srgb, var(--border-color) 65%, transparent); } -.router-dialog .p-dialog-header{ +.router-dialog .p-dialog-header { + align-items: flex-start; padding: 1.1rem 1.2rem 0.95rem; background: linear-gradient(180deg, color-mix(in srgb, var(--surface-1) 98%, transparent), color-mix(in srgb, var(--surface-0) 98%, transparent)); border-bottom: 1px solid var(--border-color); } -.router-dialog .p-dialog-content{ +.router-dialog .p-dialog-content { padding: 0 1.2rem 1.2rem; background: color-mix(in srgb, var(--surface-0) 98%, transparent); } -.router-dialog .p-dialog-header-icons{ +.router-dialog .p-dialog-header-icons { align-self: flex-start; margin-top: 0.2rem; } -.router-dialog-panel{ +.router-dialog-panel { + padding: 1rem; + border-radius: 22px; background: color-mix(in srgb, var(--surface-0) 96%, transparent); border: 1px solid var(--border-color); box-shadow: none; } -.router-dialog .p-select, .router-dialog .p-textarea, .router-dialog .p-inputtextarea, .router-dialog .p-inputtext{ +.router-dialog .p-select, .router-dialog .p-textarea, .router-dialog .p-inputtextarea, .router-dialog .p-inputtext { background: color-mix(in srgb, var(--surface-1) 90%, transparent); } -body.dark-theme .router-dialog .p-select, body.dark-theme .router-dialog .p-textarea, body.dark-theme .router-dialog .p-inputtextarea, body.dark-theme .router-dialog .p-inputtext, body.dark-theme .router-dialog-panel{ +body.dark-theme .router-dialog .p-select, body.dark-theme .router-dialog .p-textarea, body.dark-theme .router-dialog .p-inputtextarea, body.dark-theme .router-dialog .p-inputtext, body.dark-theme .router-dialog-panel { background: rgba(255, 255, 255, 0.03); border-color: var(--border-color); } -.repository-toolbar__search .p-input-icon-left{ +.repository-toolbar__search .p-input-icon-left { position: relative; display: block; width: 100%; } -.repository-toolbar__search .p-input-icon-left > i{ +.repository-toolbar__search .p-input-icon-left > i { position: absolute; top: 50%; left: 0.9rem; @@ -3039,260 +2736,491 @@ body.dark-theme .router-dialog .p-select, body.dark-theme .router-dialog .p-text line-height: 1; } -.repository-toolbar__search .p-input-icon-left > .p-inputtext{ +.repository-toolbar__search .p-input-icon-left > .p-inputtext { display: block; width: 100%; min-height: 2.75rem; padding-left: 2.5rem; } -body.dark-theme .p-toast .p-toast-summary, body.dark-theme .p-toast .p-toast-detail, body.dark-theme .p-toast .p-toast-message-icon, body.dark-theme .p-toast .p-toast-icon-close{ +body.dark-theme .p-toast .p-toast-summary, body.dark-theme .p-toast .p-toast-detail, body.dark-theme .p-toast .p-toast-message-icon, body.dark-theme .p-toast .p-toast-icon-close { color: var(--text-main); } -.repository-table .p-paginator .p-paginator-pages .p-paginator-page, .repository-table .p-paginator .p-paginator-next, .repository-table .p-paginator .p-paginator-prev, .repository-table .p-paginator .p-select{ +.repository-table .p-paginator .p-paginator-pages .p-paginator-page, .repository-table .p-paginator .p-paginator-next, .repository-table .p-paginator .p-paginator-prev, .repository-table .p-paginator .p-select { min-width: 2rem; height: 2rem; } -.device-settings-form{display:block;} -.device-settings-stack{display:grid;gap:12px;} -.device-settings-actions{margin-top:16px;} -.device-toggle{position:relative;display:grid;grid-template-columns:auto auto auto minmax(0,1fr) auto;align-items:center;gap:14px;padding:16px 18px;border:1px solid color-mix(in srgb,var(--border-color) 88%, transparent);border-radius:18px;background:linear-gradient(135deg,color-mix(in srgb,var(--surface-1) 92%, transparent),color-mix(in srgb,var(--surface-2) 90%, transparent));cursor:pointer;transition:border-color .15s ease,transform .15s ease,background .15s ease,box-shadow .15s ease;box-shadow:var(--shadow-md);overflow:hidden;} -.device-toggle::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,transparent,rgba(255,255,255,.04),transparent);opacity:0;transition:opacity .15s ease;} -.device-toggle:hover{border-color:color-mix(in srgb,var(--accent) 55%, var(--border-color));transform:translateY(-1px);} -.device-toggle:hover::after,.device-toggle.is-active::after{opacity:1;} -.device-toggle.is-active{border-color:color-mix(in srgb,var(--accent) 60%, var(--border-color));background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 12%, var(--surface-1)),color-mix(in srgb,var(--accent) 6%, var(--surface-2)));box-shadow:0 16px 40px -26px color-mix(in srgb,var(--accent) 45%, transparent),var(--shadow-md);} -.device-toggle input{position:absolute;opacity:0;pointer-events:none;inline-size:1px;block-size:1px;} -.device-toggle__switch{position:relative;display:inline-flex;align-items:center;inline-size:46px;block-size:26px;border-radius:999px;background:color-mix(in srgb,var(--surface-3) 88%, transparent);border:1px solid color-mix(in srgb,var(--border-color) 82%, transparent);box-shadow:inset 0 1px 2px rgba(0,0,0,.16);transition:background .15s ease,border-color .15s ease,box-shadow .15s ease;} -.device-toggle__switch::after{content:"";position:absolute;inset:3px auto 3px 3px;inline-size:18px;block-size:18px;border-radius:50%;background:var(--text-main);box-shadow:0 4px 10px rgba(0,0,0,.18);transition:transform .15s ease,background .15s ease;} -.device-toggle__icon{display:grid;place-items:center;inline-size:40px;block-size:40px;border-radius:12px;background:color-mix(in srgb,var(--surface-3) 84%, transparent);border:1px solid color-mix(in srgb,var(--border-color) 82%, transparent);color:var(--text-muted);font-size:1rem;} -.device-toggle.is-active .device-toggle__icon{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 35%, var(--border-color));background:color-mix(in srgb,var(--accent) 12%, var(--surface-3));} -.device-toggle.is-active .device-toggle__switch{background:color-mix(in srgb,var(--accent) 20%, var(--surface-3));border-color:color-mix(in srgb,var(--accent) 35%, var(--border-color));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 20%, transparent);} -.device-toggle.is-active .device-toggle__switch::after{transform:translateX(20px);background:var(--accent);} -.device-toggle__content{display:grid;gap:4px;min-width:0;} -.device-toggle__content strong{font-size:.94rem;color:var(--text-main);} -.device-toggle__content small{line-height:1.45;color:var(--text-muted);} -.device-toggle__state{font-size:.75rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted);padding:8px 10px;border-radius:999px;background:color-mix(in srgb,var(--surface-3) 88%, transparent);border:1px solid color-mix(in srgb,var(--border-color) 82%, transparent);} -.device-toggle.is-active .device-toggle__state{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 28%, var(--border-color));background:color-mix(in srgb,var(--accent) 12%, var(--surface-3));} -body.dark-theme .device-toggle{background:linear-gradient(135deg,color-mix(in srgb,var(--surface-2) 94%, transparent),color-mix(in srgb,var(--surface-1) 88%, transparent));} -body.dark-theme .device-toggle.is-active{background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 14%, var(--surface-2)),color-mix(in srgb,var(--accent) 7%, var(--surface-1)));} - -@media (max-width: 1100px){ - .router-detail-split-grid{grid-template-columns:minmax(0,1fr);} +.device-settings-form { + display: block; } -.router-header-actions--mobile{display:none;} -.mobile-actions-menu{position:relative;} -.mobile-actions-menu summary{display:inline-flex;align-items:center;gap:10px;list-style:none;cursor:pointer;padding:10px 14px;border-radius:14px;border:1px solid color-mix(in srgb,var(--border-color) 82%, transparent);background:color-mix(in srgb,var(--surface-2) 92%, transparent);color:var(--text-main);font-weight:700;box-shadow:var(--shadow-sm);} -.mobile-actions-menu summary::-webkit-details-marker{display:none;} -.mobile-actions-menu[open] summary{border-color:color-mix(in srgb,var(--accent) 36%, var(--border-color));} -.mobile-actions-menu__list{position:absolute;right:0;top:calc(100% + 10px);z-index:20;display:grid;gap:10px;min-inline-size:min(320px,calc(100vw - 32px));padding:12px;border-radius:18px;border:1px solid color-mix(in srgb,var(--border-color) 82%, transparent);background:color-mix(in srgb,var(--surface-1) 96%, transparent);box-shadow:var(--shadow-lg);backdrop-filter:blur(14px);} -.mobile-actions-menu__list .p-button{width:100%;justify-content:flex-start;} -.settings-device-toggles{margin-bottom:18px;} -.settings-device-toggles .device-toggle{grid-template-columns:auto auto auto minmax(0,1fr);} -.settings-device-toggles .device-toggle__content{padding-right:0;} +.device-settings-stack { + display: grid; + gap: 12px; +} -@media (max-width: 768px){ - .router-header-actions--desktop{display:none;} - .router-header-actions--mobile{display:block;width:100%;} - .mobile-actions-menu{width:100%;} - .mobile-actions-menu summary{margin-left:auto;} - .mobile-actions-menu__list{position:static;right:auto;top:auto;min-inline-size:0;width:100%;margin-top:10px;} +.device-settings-actions { + margin-top: 16px; +} + +.device-toggle { + position: relative; + display: grid; + grid-template-columns: auto auto auto minmax(0,1fr) auto; + align-items: center; + gap: 14px; + padding: 16px 18px; + border: 1px solid color-mix(in srgb,var(--border-color) 88%, transparent); + border-radius: 18px; + background: linear-gradient(135deg,color-mix(in srgb,var(--surface-1) 92%, transparent),color-mix(in srgb,var(--surface-2) 90%, transparent)); + cursor: pointer; + transition: border-color .15s ease,transform .15s ease,background .15s ease,box-shadow .15s ease; + box-shadow: var(--shadow-md); + overflow: hidden; +} + +.device-toggle::after { + content: ""; + position: absolute; + inset: 0; + pointer-events: none; + background: linear-gradient(90deg,transparent,rgba(255,255,255,.04),transparent); + opacity: 0; + transition: opacity .15s ease; +} + +.device-toggle:hover { + border-color: color-mix(in srgb,var(--accent) 55%, var(--border-color)); + transform: translateY(-1px); +} + +.device-toggle:hover::after,.device-toggle.is-active::after { + opacity: 1; +} + +.device-toggle.is-active { + border-color: color-mix(in srgb,var(--accent) 60%, var(--border-color)); + background: linear-gradient(135deg,color-mix(in srgb,var(--accent) 12%, var(--surface-1)),color-mix(in srgb,var(--accent) 6%, var(--surface-2))); + box-shadow: 0 16px 40px -26px color-mix(in srgb,var(--accent) 45%, transparent),var(--shadow-md); +} + +.device-toggle input { + position: absolute; + opacity: 0; + pointer-events: none; + inline-size: 1px; + block-size: 1px; +} + +.device-toggle__switch { + position: relative; + display: inline-flex; + align-items: center; + inline-size: 46px; + block-size: 26px; + border-radius: 999px; + background: color-mix(in srgb,var(--surface-3) 88%, transparent); + border: 1px solid color-mix(in srgb,var(--border-color) 82%, transparent); + box-shadow: inset 0 1px 2px rgba(0,0,0,.16); + transition: background .15s ease,border-color .15s ease,box-shadow .15s ease; +} + +.device-toggle__switch::after { + content: ""; + position: absolute; + inset: 3px auto 3px 3px; + inline-size: 18px; + block-size: 18px; + border-radius: 50%; + background: var(--text-main); + box-shadow: 0 4px 10px rgba(0,0,0,.18); + transition: transform .15s ease,background .15s ease; +} + +.device-toggle__icon { + display: grid; + place-items: center; + inline-size: 40px; + block-size: 40px; + border-radius: 12px; + background: color-mix(in srgb,var(--surface-3) 84%, transparent); + border: 1px solid color-mix(in srgb,var(--border-color) 82%, transparent); + color: var(--text-muted); + font-size: 1rem; +} + +.device-toggle.is-active .device-toggle__icon { + color: var(--accent); + border-color: color-mix(in srgb,var(--accent) 35%, var(--border-color)); + background: color-mix(in srgb,var(--accent) 12%, var(--surface-3)); +} + +.device-toggle.is-active .device-toggle__switch { + background: color-mix(in srgb,var(--accent) 20%, var(--surface-3)); + border-color: color-mix(in srgb,var(--accent) 35%, var(--border-color)); + box-shadow: inset 0 0 0 1px color-mix(in srgb,var(--accent) 20%, transparent); +} + +.device-toggle.is-active .device-toggle__switch::after { + transform: translateX(20px); + background: var(--accent); +} + +.device-toggle__content { + display: grid; + gap: 4px; + min-width: 0; +} + +.device-toggle__content strong { + font-size: .94rem; + color: var(--text-main); +} + +.device-toggle__content small { + line-height: 1.45; + color: var(--text-muted); +} + +.device-toggle__state { + font-size: .75rem; + font-weight: 700; + letter-spacing: .12em; + text-transform: uppercase; + color: var(--text-muted); + padding: 8px 10px; + border-radius: 999px; + background: color-mix(in srgb,var(--surface-3) 88%, transparent); + border: 1px solid color-mix(in srgb,var(--border-color) 82%, transparent); +} + +.device-toggle.is-active .device-toggle__state { + color: var(--accent); + border-color: color-mix(in srgb,var(--accent) 28%, var(--border-color)); + background: color-mix(in srgb,var(--accent) 12%, var(--surface-3)); +} + +body.dark-theme .device-toggle { + background: linear-gradient(135deg,color-mix(in srgb,var(--surface-2) 94%, transparent),color-mix(in srgb,var(--surface-1) 88%, transparent)); +} + +body.dark-theme .device-toggle.is-active { + background: linear-gradient(135deg,color-mix(in srgb,var(--accent) 14%, var(--surface-2)),color-mix(in srgb,var(--accent) 7%, var(--surface-1))); +} + +/* <= 1100px */ +@media (max-width: 1100px) { + .router-detail-split-grid { + grid-template-columns: minmax(0,1fr); + } +} + +.router-header-actions--mobile { + display: none; +} + +.mobile-actions-menu { + position: relative; +} + +.mobile-actions-menu summary { + display: inline-flex; + align-items: center; + gap: 10px; + list-style: none; + cursor: pointer; + padding: 10px 14px; + border-radius: 14px; + border: 1px solid color-mix(in srgb,var(--border-color) 82%, transparent); + background: color-mix(in srgb,var(--surface-2) 92%, transparent); + color: var(--text-main); + font-weight: 700; + box-shadow: var(--shadow-sm); +} + +.mobile-actions-menu summary::-webkit-details-marker { + display: none; +} + +.mobile-actions-menu[open] summary { + border-color: color-mix(in srgb,var(--accent) 36%, var(--border-color)); +} + +.mobile-actions-menu__list { + position: absolute; + right: 0; + top: calc(100% + 10px); + z-index: 20; + display: grid; + gap: 10px; + min-inline-size: min(320px,calc(100vw - 32px)); + padding: 12px; + border-radius: 18px; + border: 1px solid color-mix(in srgb,var(--border-color) 82%, transparent); + background: color-mix(in srgb,var(--surface-1) 96%, transparent); + box-shadow: var(--shadow-lg); + backdrop-filter: blur(14px); +} + +.mobile-actions-menu__list .p-button { + width: 100%; + justify-content: flex-start; +} + +.settings-device-toggles { + margin-bottom: 18px; +} + +.settings-device-toggles .device-toggle { + grid-template-columns: auto auto auto minmax(0,1fr); +} + +.settings-device-toggles .device-toggle__content { + padding-right: 0; +} + +/* <= 768px */ +@media (max-width: 768px) { + .router-header-actions--desktop { + display: none; + } + + .router-header-actions--mobile { + display: block; + width: 100%; + } + + .mobile-actions-menu { + width: 100%; + } + + .mobile-actions-menu summary { + margin-left: auto; + } + + .mobile-actions-menu__list { + position: static; + right: auto; + top: auto; + min-inline-size: 0; + width: 100%; + margin-top: 10px; + } } .repository-table .table-actions--labels, -.repository-table .table-actions--tight{ +.repository-table .table-actions--tight { align-items: center; } -.repository-table .table-actions--tight{ +.repository-table .table-actions--tight { flex-wrap: wrap; overflow-x: visible; } .repository-table .p-button.table-action-btn, .repository-table .p-button.table-action-btn--wide, -.repository-table .p-button.table-action-btn--compact{ +.repository-table .p-button.table-action-btn--compact { width: auto; flex: 0 0 auto; } -.repository-table.app-table .p-datatable-thead > tr > th:last-child, -.repository-table.app-table .p-datatable-tbody > tr > td:last-child{ - width: 1%; - white-space: nowrap; +.repository-table .p-column-title { + display: none; + display: none !important; } -.repository-table .p-column-title{display:none !important;} .repository-table--files .p-datatable-thead > tr > th:first-child, -.repository-table--files .p-datatable-tbody > tr > td:first-child{ +.repository-table--files .p-datatable-tbody > tr > td:first-child { width: 3rem; padding-inline: 0.55rem; } + .repository-table--router-detail .p-datatable-thead > tr > th:first-child, .repository-table--router-detail .p-datatable-tbody > tr > td:first-child, .repository-table--diff .p-datatable-thead > tr > th:first-child, -.repository-table--diff .p-datatable-tbody > tr > td:first-child{ +.repository-table--diff .p-datatable-tbody > tr > td:first-child { width: auto; padding-inline: 0.8rem; } - .repository-table--routers.app-table .p-datatable-thead > tr > th:first-child, -.repository-table--routers.app-table .p-datatable-tbody > tr > td:first-child{ +.repository-table--routers.app-table .p-datatable-tbody > tr > td:first-child { width: 18%; min-width: 220px; max-width: 0; } -.repository-table--routers .table-primary--ellipsis{ + +.repository-table--routers .table-primary--ellipsis { max-width: 100%; } -.repository-table .table-primary--ellipsis{ - display:block; - max-width:100%; - white-space:nowrap; - overflow:hidden; - text-overflow:ellipsis; +.repository-table .table-primary--ellipsis { + display: block; + max-width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } -.repository-table .table-secondary{ - overflow:hidden; - text-overflow:ellipsis; + +.repository-table .table-secondary { + margin-top: 0.18rem; + font-size: 0.74rem; + line-height: 1.35; + min-width: 0; + max-width: 100%; + white-space: normal; + overflow-wrap: anywhere; + word-break: break-word; + overflow: hidden; + text-overflow: ellipsis; } + .repository-table.app-table .p-datatable-thead > tr > th, -.repository-table.app-table .p-datatable-tbody > tr > td{ - min-width:0; +.repository-table.app-table .p-datatable-tbody > tr > td { + min-width: 0; } + .repository-table.app-table .p-datatable-thead > tr > th:last-child, -.repository-table.app-table .p-datatable-tbody > tr > td:last-child{ +.repository-table.app-table .p-datatable-tbody > tr > td:last-child { width: 280px; min-width: 280px; white-space: normal; } + .repository-table--diff.app-table .p-datatable-thead > tr > th:last-child, -.repository-table--diff.app-table .p-datatable-tbody > tr > td:last-child{ +.repository-table--diff.app-table .p-datatable-tbody > tr > td:last-child { width: 220px; min-width: 220px; } -.repository-table .table-actions--desktop-row{ - display:flex; - flex-direction:row; - flex-wrap:nowrap; - align-items:center; - gap:0.45rem; - overflow:hidden; +.repository-table .table-actions--desktop-row { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + gap: 0.45rem; + overflow: hidden; } -.repository-table .table-actions--desktop-row .p-button{ - flex:0 0 auto; -} -.repository-table .table-row-menu{ - display:none; - position:relative; -} -.repository-table .table-row-menu summary{ - display:inline-flex; - align-items:center; - gap:8px; - list-style:none; - cursor:pointer; - padding:8px 12px; - border-radius:12px; - border:1px solid color-mix(in srgb,var(--border-color) 82%, transparent); - background:color-mix(in srgb,var(--surface-2) 92%, transparent); - color:var(--text-main); - font-weight:700; - white-space:nowrap; -} -.repository-table .table-row-menu summary::-webkit-details-marker{display:none;} -.repository-table .table-row-menu__list{ - position:absolute; - right:0; - top:calc(100% + 8px); - z-index:25; - display:grid; - gap:8px; - min-width:220px; - padding:10px; - border-radius:16px; - border:1px solid color-mix(in srgb,var(--border-color) 82%, transparent); - background:color-mix(in srgb,var(--surface-1) 96%, transparent); - box-shadow:var(--shadow-lg); -} -.repository-table .table-row-menu__list .p-button{width:100%;justify-content:center;} -@media (max-width: 1400px){ - .repository-table--router-detail .table-actions--desktop-row, - .repository-table--diff .table-actions--desktop-row{ - display:none; - } - .repository-table--router-detail .table-row-menu, - .repository-table--diff .table-row-menu{ - display:inline-block; - } +.repository-table .table-actions--desktop-row .p-button { + flex: 0 0 auto; } -@media (max-width: 1520px){ - .repository-table--files .table-actions--desktop-row{ - display:none; + +.repository-table .table-row-menu { + display: none; + position: relative; +} + +.repository-table .table-row-menu summary { + display: inline-flex; + align-items: center; + gap: 8px; + list-style: none; + cursor: pointer; + padding: 8px 12px; + border-radius: 12px; + border: 1px solid color-mix(in srgb,var(--border-color) 82%, transparent); + background: color-mix(in srgb,var(--surface-2) 92%, transparent); + color: var(--text-main); + font-weight: 700; + white-space: nowrap; +} + +.repository-table .table-row-menu summary::-webkit-details-marker { + display: none; +} + +.repository-table .table-row-menu__list { + position: absolute; + right: 0; + top: calc(100% + 8px); + z-index: 25; + display: grid; + gap: 8px; + min-width: 220px; + padding: 10px; + border-radius: 16px; + border: 1px solid color-mix(in srgb,var(--border-color) 82%, transparent); + background: color-mix(in srgb,var(--surface-1) 96%, transparent); + box-shadow: var(--shadow-lg); +} + +/* <= 1400px */ +@media (max-width: 1400px) { + .repository-table--router-detail .table-actions--desktop-row, + .repository-table--diff .table-actions--desktop-row { + display: none; } - .repository-table--files .table-row-menu{ - display:inline-block; + + .repository-table--router-detail .table-row-menu, + .repository-table--diff .table-row-menu { + display: inline-block; } } .repository-table--files.app-table .p-datatable-thead > tr > th:nth-child(2), -.repository-table--files.app-table .p-datatable-tbody > tr > td:nth-child(2){ +.repository-table--files.app-table .p-datatable-tbody > tr > td:nth-child(2) { width: 18%; max-width: 0; } + .repository-table--files.app-table .p-datatable-thead > tr > th:nth-child(7), -.repository-table--files.app-table .p-datatable-tbody > tr > td:nth-child(7){ +.repository-table--files.app-table .p-datatable-tbody > tr > td:nth-child(7) { width: 20%; min-width: 230px; white-space: normal; } + .repository-table--files.app-table .p-datatable-thead > tr > th:nth-child(8), -.repository-table--files.app-table .p-datatable-tbody > tr > td:nth-child(8){ +.repository-table--files.app-table .p-datatable-tbody > tr > td:nth-child(8) { width: 20%; min-width: 200px; white-space: normal; } -.repository-table--files .table-actions--desktop-row{ + +.repository-table--files .table-actions--desktop-row { display: flex; flex-direction: column; align-items: flex-start; gap: 0.45rem; } -.repository-table--files .table-actions--desktop-row .p-button{ + +.repository-table--files .table-actions--desktop-row .p-button { width: 100%; justify-content: center; } + .repository-table--files .table-primary--ellipsis, -.repository-table--files .table-secondary{ +.repository-table--files .table-secondary { max-width: 100%; } -@media (max-width: 1520px){ - .repository-table--files .table-actions--desktop-row{ + +/* <= 1520px */ +@media (max-width: 1520px) { + .repository-table--files .table-actions--desktop-row { display: none; } - .repository-table--files .table-row-menu{ + + .repository-table--files .table-row-menu { display: inline-block; } } -@media (max-width: 960px){ - - .repository-table.app-table .p-datatable-wrapper{ +/* <= 960px */ +@media (max-width: 960px) { + .repository-table.app-table .p-datatable-wrapper { overflow-x: hidden; } - .repository-table.app-table .p-datatable-table{ + .repository-table.app-table .p-datatable-table { width: 100% !important; table-layout: fixed; } - .repository-table.app-table .p-datatable-tbody > tr > td{ + .repository-table.app-table .p-datatable-tbody > tr > td { align-items: flex-start; gap: 0.45rem; min-width: 0; @@ -3302,53 +3230,52 @@ body.dark-theme .device-toggle.is-active{background:linear-gradient(135deg,color } .repository-table .table-actions--stack, - .repository-table .table-actions--labels{ + .repository-table .table-actions--labels { width: 100%; min-width: 0; } - .repository-table .p-column-title{ - display: inline-flex; - align-items: center; - } - .repository-table .p-button.table-action-btn, .repository-table .p-button.table-action-btn--wide, - .repository-table .p-button.table-action-btn--compact{ + .repository-table .p-button.table-action-btn--compact { width: 100%; justify-content: center; } - .repository-table .p-button .p-button-label{ + .repository-table .p-button .p-button-label { white-space: normal; overflow-wrap: anywhere; word-break: break-word; } - .repository-table .p-column-title{ - display:inline-flex !important; - align-items:center; + .repository-table .p-column-title { + display: inline-flex; + display: inline-flex !important; + align-items: center; } + .repository-table.app-table .p-datatable-thead > tr > th:last-child, .repository-table.app-table .p-datatable-tbody > tr > td:last-child, .repository-table--diff.app-table .p-datatable-thead > tr > th:last-child, - .repository-table--diff.app-table .p-datatable-tbody > tr > td:last-child{ - width:auto; - min-width:0; + .repository-table--diff.app-table .p-datatable-tbody > tr > td:last-child { + width: auto; + min-width: 0; } + .repository-table .table-actions--desktop-row, - .repository-table .table-row-menu{ - display:none !important; + .repository-table .table-row-menu { + display: none !important; } + .repository-table .table-primary--ellipsis, - .repository-table .table-secondary{ - white-space:normal; - overflow:visible; - text-overflow:unset; + .repository-table .table-secondary { + white-space: normal; + overflow: visible; + text-overflow: unset; } .repository-table--routers.app-table .p-datatable-thead > tr > th:first-child, - .repository-table--routers.app-table .p-datatable-tbody > tr > td:first-child{ + .repository-table--routers.app-table .p-datatable-tbody > tr > td:first-child { width: auto; min-width: 0; max-width: none; @@ -3359,40 +3286,45 @@ body.dark-theme .device-toggle.is-active{background:linear-gradient(135deg,color .repository-table--files.app-table .p-datatable-thead > tr > th:nth-child(7), .repository-table--files.app-table .p-datatable-tbody > tr > td:nth-child(7), .repository-table--files.app-table .p-datatable-thead > tr > th:nth-child(8), - .repository-table--files.app-table .p-datatable-tbody > tr > td:nth-child(8){ + .repository-table--files.app-table .p-datatable-tbody > tr > td:nth-child(8) { width: auto; min-width: 0; max-width: none; } - .repository-table .table-row-menu{ - display:inline-block !important; - width:100%; - } - .repository-table.app-table .p-datatable-tbody > tr > td:last-child{ - overflow:visible; - } - .repository-table .table-row-menu summary{ - width:100%; - justify-content:center; - } - .repository-table .table-row-menu__list{ - position:static; - right:auto; - top:auto; - width:100%; - min-width:0; - margin-top:8px; + .repository-table .table-row-menu { + display: inline-block !important; + width: 100%; } + .repository-table.app-table .p-datatable-tbody > tr > td:last-child { + overflow: visible; + } + + .repository-table .table-row-menu summary { + width: 100%; + justify-content: center; + } + + .repository-table .table-row-menu__list { + position: static; + right: auto; + top: auto; + width: 100%; + min-width: 0; + margin-top: 8px; + } } -.form-field-error{ - display:block; - margin-top:0.35rem; - font-size:0.78rem; - line-height:1.35; - color:var(--red-400); +.form-field-error { + display: block; + margin-top: 0.35rem; + font-size: 0.78rem; + line-height: 1.35; + color: var(--red-400); } -.repository-table .table-row-menu__list .p-button{justify-content:flex-start;} +.repository-table .table-row-menu__list .p-button { + width: 100%; + justify-content: flex-start; +} diff --git a/reverse-proxy/default.conf b/reverse-proxy/default.conf index 7aa9fa9..17484da 100644 --- a/reverse-proxy/default.conf +++ b/reverse-proxy/default.conf @@ -15,7 +15,6 @@ server { server_tokens off; add_header X-Content-Type-Options "nosniff" always; - add_header X-Frame-Options "SAMEORIGIN" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always; @@ -24,27 +23,34 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $host; proxy_set_header Connection ""; proxy_read_timeout 60s; proxy_send_timeout 60s; location ^~ /api/ { - add_header Cache-Control "no-store, no-cache, must-revalidate" always; + add_header Cache-Control "no-store" always; + add_header X-Frame-Options "DENY" always; + add_header Cross-Origin-Resource-Policy "same-site" always; proxy_pass http://backend_upstream/api/; } location = /docs { - add_header Cache-Control "no-store, no-cache, must-revalidate" always; + add_header Cache-Control "no-store" always; + add_header Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; script-src 'self' https://cdn.jsdelivr.net; frame-ancestors 'none'; base-uri 'self'; form-action 'self'" always; + add_header X-Frame-Options "DENY" always; proxy_pass http://backend_upstream/docs; } location = /openapi.json { - add_header Cache-Control "no-store, no-cache, must-revalidate" always; + add_header Cache-Control "no-store" always; proxy_pass http://backend_upstream/openapi.json; } location = /redoc { - add_header Cache-Control "no-store, no-cache, must-revalidate" always; + add_header Cache-Control "no-store" always; + add_header Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; script-src 'self' https://cdn.jsdelivr.net; frame-ancestors 'none'; base-uri 'self'; form-action 'self'" always; + add_header X-Frame-Options "DENY" always; proxy_pass http://backend_upstream/redoc; }