/
dmitriysturov
/
workspaces_platform
Обзор
Документация
Войти
/
dmitriysturov
/
workspaces_platform
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
frontend/src/index.css
6 116 строк
107 KB
dmitriysturov
vkr
04 июн 2026, 22:24
04 июн 2026, 22:24
971dfdc
Код
Авторство
О чём код?
* { box-sizing: border-box; } .tasks-section, .gantt-section { display: grid; gap: 16px; } .tasks-filter-bar { display: grid; grid-template-columns: minmax(220px, 1fr) repeat(3, minmax(150px, 180px)); gap: 10px; align-items: center; } .task-filters-panel { display: grid; gap: 10px; padding: 12px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); } .task-filters-grid { display: grid; grid-template-columns: minmax(220px, 1.35fr) repeat(6, minmax(132px, 1fr)); gap: 10px; align-items: end; } .task-search-field { min-width: 0; } .task-filter-notices, .task-filter-footer, .task-filter-chips, .task-filter-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; } .task-filter-notices { color: var(--color-danger); font-size: 12px; } .task-filter-footer { justify-content: space-between; } .task-filter-chip { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; border: 1px solid var(--color-border); border-radius: 999px; background: var(--color-surface-muted); color: var(--color-text); padding: 4px 9px; font-size: 12px; cursor: pointer; } .task-filter-color-dot { width: 9px; height: 9px; border-radius: 999px; border: 1px solid rgba(0, 0, 0, 0.12); } .tasks-filter-bar input, .tasks-filter-bar select, .task-modal-form input, .task-modal-form select, .task-modal-form textarea, .office-search-field input { width: 100%; min-height: 40px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); color: var(--color-text); padding: 8px 10px; } .task-modal-form textarea { min-height: 96px; resize: vertical; } .task-modal-archive-notice { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface-muted); color: var(--color-text-muted); font-size: 13px; } .task-modal-summary { display: grid; gap: 6px; padding: 10px 12px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface-muted); } .task-modal-summary strong { overflow-wrap: anywhere; } .task-modal-summary span { display: flex; flex-wrap: wrap; gap: 6px; } .task-color-control { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 8px; align-items: center; } .task-color-control input[type="color"] { min-height: 40px; padding: 4px; } .task-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .tasks-table td:first-child { display: grid; gap: 4px; } .tasks-table tr { cursor: pointer; } .tasks-table tr.is-archived, .kanban-card.is-archived, .gantt-task-label.is-archived, .gantt-bar.is-archived, .gantt-task-card.is-archived, .gantt-task-bar.is-archived, .undated-tasks button.is-archived { opacity: 0.58; } .kanban-card.is-archived { cursor: default; } .task-overdue, .kanban-card.is-overdue strong, .gantt-bar.is-overdue { color: var(--color-danger); } .kanban-board { display: grid; grid-template-columns: repeat(4, minmax(220px, 1fr)); gap: 14px; align-items: start; } .kanban-column { min-height: 420px; background: var(--color-surface-muted); border: 1px solid var(--color-border); border-radius: 8px; padding: 12px; } .kanban-column header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .kanban-column h2 { font-size: 16px; margin: 0; } .kanban-card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: 8px; margin-bottom: 10px; } .kanban-card button { width: 100%; display: grid; gap: 6px; text-align: left; color: inherit; background: transparent; border: 0; padding: 12px; cursor: pointer; } .kanban-card small, .kanban-card span, .gantt-task-label small, .undated-tasks span { color: var(--color-text-muted); font-size: 12px; } .kanban-card strong, .kanban-card small, .kanban-card-meta { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .kanban-card-badges { display: flex; flex-wrap: wrap; gap: 4px; } .gantt-header { display: flex; justify-content: space-between; color: var(--color-text-muted); } .gantt-toolbar { display: grid; gap: 10px; padding: 12px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); } .gantt-toolbar-main, .gantt-range-controls, .gantt-nav-actions, .gantt-period-tabs { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; } .gantt-toolbar-main { justify-content: space-between; } .gantt-period-tabs { padding: 3px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface-muted); } .gantt-period-tabs button { min-height: 30px; border: 0; border-radius: 6px; background: transparent; color: var(--color-text-muted); padding: 5px 10px; font-size: 12px; font-weight: 650; cursor: pointer; } .gantt-period-tabs button.is-active { background: var(--color-surface); color: var(--color-text); box-shadow: var(--shadow-subtle); } .gantt-range-controls .form-field { width: 150px; } .gantt-range-label { color: var(--color-text-muted); font-size: 12px; } .gantt-container { display: grid; grid-template-columns: minmax(260px, 320px) minmax(0, 1fr); min-width: 0; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); overflow: hidden; } .gantt-left-pane { display: grid; grid-auto-rows: 72px; border-right: 1px solid var(--color-border); background: var(--color-surface); z-index: 2; } .gantt-left-header { position: sticky; top: 0; display: flex; align-items: center; min-height: 72px; padding: 12px; border-bottom: 1px solid var(--color-border); background: var(--color-surface); color: var(--color-text-muted); font-size: 12px; font-weight: 700; z-index: 3; } .gantt-task-card { display: grid; grid-template-rows: 16px 14px 18px; align-content: center; gap: 3px; min-width: 0; height: 72px; min-height: 72px; border: 0; border-bottom: 1px solid var(--color-border); background: transparent; color: inherit; padding: 7px 12px; text-align: left; cursor: pointer; } .gantt-task-card strong, .gantt-task-secondary, .gantt-task-bar span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .gantt-task-card strong { display: block; color: var(--color-text); font-size: 13px; line-height: 16px; } .gantt-task-card span { min-width: 0; color: var(--color-text-muted); font-size: 12px; } .gantt-task-secondary { display: block; line-height: 14px; } .gantt-task-badges { display: flex; align-items: center; flex-wrap: nowrap; gap: 4px; min-width: 0; overflow: hidden; } .gantt-task-badges .ui-badge { max-width: 92px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .gantt-scroll-area { min-width: 0; overflow-x: auto; overflow-y: hidden; } .gantt-timeline { min-width: 100%; } .gantt-month-header, .gantt-column-header, .gantt-row-bands { display: grid; } .gantt-month-header, .gantt-column-header { position: sticky; top: 0; z-index: 2; } .gantt-month-cell, .gantt-column-cell { min-width: 0; border-right: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); padding: 6px 8px; color: var(--color-text-muted); font-size: 12px; } .gantt-month-cell { min-height: 34px; font-weight: 700; text-transform: capitalize; } .gantt-column-cell { display: grid; align-content: center; min-height: 38px; text-align: center; } .gantt-column-cell strong { color: var(--color-text); font-size: 12px; } .gantt-column-cell span { font-size: 11px; } .gantt-month-cell.is-even, .gantt-column-cell.is-even, .gantt-row-bands .is-even { background: var(--color-surface); } .gantt-month-cell.is-odd, .gantt-column-cell.is-odd, .gantt-row-bands .is-odd { background: #f8fbff; } .gantt-column-cell.is-month-end, .gantt-row-bands .is-month-end { border-right-color: #bfdbfe; } .gantt-column-cell.is-today { color: var(--color-primary); background: #eff6ff; } .gantt-body { position: relative; } .gantt-timeline-row { position: relative; min-height: 72px; border-bottom: 1px solid var(--color-border); } .gantt-row-bands { position: absolute; inset: 0; } .gantt-row-bands span { border-right: 1px solid rgba(223, 229, 239, 0.62); } .gantt-task-bar { position: absolute; top: 22px; z-index: 1; display: flex; align-items: center; min-width: 14px; max-width: calc(100% - 4px); height: 28px; border: 1px solid; border-left: 4px solid var(--task-accent, var(--color-primary)); border-radius: 6px; padding: 0 8px; box-shadow: var(--shadow-subtle); font-size: 12px; font-weight: 650; text-align: left; cursor: pointer; } .gantt-task-bar.is-point { border-radius: 999px; } .gantt-task-bar.continues-left { border-top-left-radius: 0; border-bottom-left-radius: 0; } .gantt-task-bar.continues-left::before, .gantt-task-bar.continues-right::after { content: ""; position: absolute; top: 50%; width: 0; height: 0; transform: translateY(-50%); border-top: 5px solid transparent; border-bottom: 5px solid transparent; } .gantt-task-bar.continues-left::before { left: -8px; border-right: 7px solid var(--task-accent, var(--color-primary)); } .gantt-task-bar.continues-right { border-top-right-radius: 0; border-bottom-right-radius: 0; } .gantt-task-bar.continues-right::after { right: -8px; border-left: 7px solid var(--task-accent, var(--color-primary)); } .gantt-task-bar.priority-high, .gantt-task-bar.priority-urgent { box-shadow: inset 0 -2px 0 var(--task-accent, var(--color-primary)); } .gantt-task-bar.priority-urgent { border-width: 2px; } .gantt-today-line { position: absolute; top: -72px; bottom: 0; z-index: 3; width: 1px; background: rgba(37, 99, 235, 0.58); pointer-events: none; } .gantt-today-line span { position: absolute; top: 4px; left: 6px; border: 1px solid rgba(37, 99, 235, 0.22); border-radius: 999px; background: var(--color-surface); color: var(--color-primary); padding: 2px 6px; font-size: 11px; font-weight: 700; white-space: nowrap; } .gantt-undated-tasks { border: 1px solid var(--color-border); border-radius: 8px; padding: 12px; background: var(--color-surface); } .gantt-grid { display: grid; overflow-x: auto; border: 1px solid var(--color-border); border-radius: 8px; } .gantt-corner, .gantt-day, .gantt-task-label { min-height: 42px; border-bottom: 1px solid var(--color-border); border-right: 1px solid var(--color-border); padding: 8px; background: var(--color-surface); } .gantt-day { text-align: center; color: var(--color-text-muted); font-size: 12px; } .gantt-task-label { display: grid; text-align: left; color: inherit; cursor: pointer; } .gantt-bar { align-self: center; min-height: 28px; border: 0; border-radius: 6px; background: var(--color-primary); color: white; cursor: pointer; padding: 0 10px; } .undated-tasks { display: grid; gap: 8px; } .undated-tasks button { display: flex; justify-content: space-between; gap: 12px; border: 1px solid var(--color-border); background: var(--color-surface); color: inherit; border-radius: 8px; padding: 10px 12px; cursor: pointer; } @media (max-width: 980px) { .tasks-filter-bar, .task-filters-grid, .task-form-grid, .kanban-board { grid-template-columns: 1fr; } .gantt-container { grid-template-columns: minmax(210px, 240px) minmax(0, 1fr); } .gantt-range-controls .form-field { width: min(100%, 180px); } } :root { color-scheme: light; --color-bg: #f6f8fb; --color-surface: #ffffff; --color-surface-muted: #f9fbfd; --color-text: #172033; --color-text-muted: #667085; --color-border: #dfe5ef; --color-border-strong: #c8d2e1; --color-primary: #315fdc; --color-primary-hover: #244cb8; --color-primary-soft: #eef4ff; --color-danger: #d92d20; --color-danger-soft: #fff1f0; --color-success: #039855; --color-success-soft: #ecfdf3; --color-warning: #dc6803; --color-warning-soft: #fff7ed; --shadow-focus: 0 0 0 3px rgba(49, 95, 220, 0.16); --space-1: 4px; --space-2: 8px; --space-3: 16px; --space-4: 24px; --space-5: 32px; --space-6: 48px; --radius-sm: 4px; --radius-md: 8px; --font-xs: 0.75rem; --font-sm: 0.875rem; --font-md: 0.96rem; --font-lg: 1.1rem; --font-xl: 1.4rem; --transition-fast: 140ms ease; --z-header: 20; font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: var(--color-bg); color: var(--color-text); } [data-theme="dark"] { color-scheme: dark; --color-bg: #0f172a; --color-surface: #111c2f; --color-surface-muted: #162238; --color-text: #e5eaf3; --color-text-muted: #9aa7bb; --color-border: #26354c; --color-border-strong: #364861; --color-primary: #86a2ff; --color-primary-hover: #adc0ff; --color-primary-soft: #17264a; --color-danger: #ff8a80; --color-danger-soft: #351b1c; --color-success: #52d69a; --color-success-soft: #102d22; --color-warning: #fdb66d; --color-warning-soft: #35230f; } @media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { color-scheme: dark; --color-bg: #0f172a; --color-surface: #111c2f; --color-surface-muted: #162238; --color-text: #e5eaf3; --color-text-muted: #9aa7bb; --color-border: #26354c; --color-border-strong: #364861; --color-primary: #86a2ff; --color-primary-hover: #adc0ff; --color-primary-soft: #17264a; --color-danger: #ff8a80; --color-danger-soft: #351b1c; --color-success: #52d69a; --color-success-soft: #102d22; --color-warning: #fdb66d; --color-warning-soft: #35230f; } } html, body, #root { margin: 0; min-height: 100%; } body { min-width: 320px; min-height: 100vh; background: var(--color-bg); color: var(--color-text); } h1, h2, h3, p { margin: 0; } h1 { font-size: var(--font-xl); line-height: 1.2; } h2 { font-size: var(--font-lg); line-height: 1.3; } a { color: var(--color-primary); text-decoration: none; } a:hover { text-decoration: underline; } a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { outline: none; box-shadow: var(--shadow-focus); } .muted { color: var(--color-text-muted); } .form { display: grid; gap: var(--space-3); } label { display: grid; gap: var(--space-2); color: var(--color-text); font-size: var(--font-sm); font-weight: 650; } input, select, textarea, .ui-input, .ui-select, .ui-textarea { width: 100%; border: 1px solid var(--color-border-strong); border-radius: var(--radius-md); padding: 10px 12px; background: var(--color-surface); color: var(--color-text); font-size: var(--font-md); transition: border-color var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast); } textarea, .ui-textarea { min-height: 96px; resize: vertical; } input:hover, select:hover, textarea:hover { border-color: var(--color-primary); } input:disabled, select:disabled, textarea:disabled { background: var(--color-surface-muted); color: var(--color-text-muted); cursor: not-allowed; } button { font: inherit; } .ui-button { min-height: 36px; border: 1px solid transparent; border-radius: var(--radius-md); padding: 8px 14px; display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2); font-weight: 700; cursor: pointer; transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast); } .ui-button-primary { background: var(--color-primary); color: #ffffff; } .ui-button-primary:hover:not(:disabled) { background: var(--color-primary-hover); } .ui-button-secondary { border-color: var(--color-border-strong); background: var(--color-surface); color: var(--color-text); } .ui-button-secondary:hover:not(:disabled) { border-color: var(--color-primary); background: var(--color-primary-soft); } .ui-button-ghost { background: transparent; color: var(--color-text); } .ui-button-ghost:hover:not(:disabled) { background: var(--color-surface-muted); } .ui-button-danger { background: var(--color-danger); color: #ffffff; } .ui-button-danger:hover:not(:disabled) { background: #b42318; } .ui-button:disabled { opacity: 0.58; cursor: not-allowed; } .button-spinner { width: 14px; height: 14px; border: 2px solid currentColor; border-right-color: transparent; border-radius: 999px; animation: spin 700ms linear infinite; } .error, .success, .ui-alert { border-left: 3px solid; padding: 12px 14px; display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); } .error, .ui-alert-error { border-color: var(--color-danger); background: var(--color-danger-soft); color: var(--color-text); } .success { border-color: var(--color-success); background: var(--color-success-soft); color: var(--color-text); } .ui-alert-warning { border-color: var(--color-warning); background: var(--color-warning-soft); color: var(--color-text); } .ui-alert p { margin-top: var(--space-1); color: var(--color-text-muted); } .ui-badge { display: inline-flex; width: fit-content; align-items: center; border: 1px solid var(--color-border); border-radius: 999px; padding: 3px 8px; font-size: var(--font-xs); font-weight: 800; } .ui-badge-neutral { background: var(--color-surface-muted); color: var(--color-text-muted); } .ui-badge-accent { background: var(--color-primary-soft); border-color: transparent; color: var(--color-primary); } .ui-badge-success { background: var(--color-success-soft); border-color: transparent; color: var(--color-success); } .ui-badge-warning { background: var(--color-warning-soft); border-color: transparent; color: var(--color-warning); } .ui-badge-danger { background: var(--color-danger-soft); border-color: transparent; color: var(--color-danger); } .ui-empty-state { padding: var(--space-4) 0; border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); display: flex; justify-content: space-between; gap: var(--space-3); align-items: center; } .ui-empty-state p { margin-top: var(--space-1); } .ui-skeleton { display: grid; gap: var(--space-2); padding: var(--space-2) 0; } .ui-skeleton span { height: 42px; background: linear-gradient(90deg, var(--color-surface-muted), var(--color-border), var(--color-surface-muted)); background-size: 200% 100%; animation: skeleton 1200ms ease-in-out infinite; } .ui-table { width: 100%; border-collapse: collapse; font-size: var(--font-sm); } .ui-table th, .ui-table td { padding: 12px 0; border-bottom: 1px solid var(--color-border); text-align: left; } .ui-table tbody tr:hover { background: var(--color-surface-muted); } .ui-tabs, .ui-dropdown, .ui-modal { border: 1px solid var(--color-border); background: var(--color-surface); } .ui-tabs { display: inline-flex; gap: var(--space-1); padding: var(--space-1); } .ui-dropdown, .ui-modal { border-radius: var(--radius-md); } .auth-shell { min-height: 100vh; display: grid; place-items: center; padding: var(--space-5) var(--space-3); } .card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-md); } .auth-card { width: min(100%, 460px); padding: var(--space-4); display: grid; gap: var(--space-3); } .auth-subtitle { margin-top: calc(var(--space-2) * -1); } .route-loader { min-height: 100vh; padding: var(--space-5); background: var(--color-bg); } .dashboard-layout { min-height: 100vh; display: grid; grid-template-columns: 240px minmax(0, 1fr); background: var(--color-bg); } .dashboard-sidebar { position: sticky; top: 0; height: 100vh; background: var(--color-surface); border-right: 1px solid var(--color-border); padding: var(--space-4) var(--space-3); display: flex; flex-direction: column; gap: var(--space-4); } .sidebar-brand { display: flex; gap: 10px; align-items: center; padding: 0 var(--space-2); } .brand-mark { width: 34px; height: 34px; display: inline-grid; place-items: center; background: var(--color-primary); color: #ffffff; font-size: var(--font-xs); font-weight: 900; } .sidebar-brand strong { display: block; font-size: var(--font-md); } .sidebar-brand p { font-size: var(--font-xs); } .sidebar-nav { display: grid; gap: var(--space-1); } .sidebar-link { position: relative; display: flex; align-items: center; gap: var(--space-2); padding: 10px 10px 10px var(--space-3); border-radius: var(--radius-sm); color: var(--color-text-muted); font-size: var(--font-sm); font-weight: 700; text-decoration: none; transition: background var(--transition-fast), color var(--transition-fast); } .sidebar-link-icon { display: inline-grid; width: 20px; height: 20px; place-items: center; flex: 0 0 auto; } .sidebar-link::before { position: absolute; left: var(--space-1); top: 9px; bottom: 9px; width: 3px; background: transparent; content: ""; } .sidebar-link:hover, .sidebar-link.is-active { background: var(--color-primary-soft); color: var(--color-primary); text-decoration: none; } .sidebar-link.is-active::before { background: var(--color-primary); } .dashboard-main-column { min-width: 0; display: grid; grid-template-rows: auto 1fr; } .dashboard-header { min-height: 68px; padding: 0 var(--space-5); border-bottom: 1px solid var(--color-border); background: var(--color-surface); display: flex; align-items: center; gap: var(--space-4); position: sticky; top: 0; z-index: var(--z-header); } .dashboard-header-main { flex: 1 1 auto; min-width: 0; } .dashboard-header-main h1, .dashboard-header-main p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .header-eyebrow { display: none; } .dashboard-header-actions { flex: 0 0 auto; display: flex; align-items: center; gap: var(--space-2); white-space: nowrap; } .topbar-profile-link { border: 1px solid transparent; border-radius: var(--radius-md); background: transparent; color: var(--color-text); display: flex; max-width: 220px; align-items: center; gap: var(--space-2); padding: 6px 8px; text-align: left; cursor: pointer; transition: background var(--transition-fast), border-color var(--transition-fast); } .topbar-profile-link:hover { border-color: var(--color-border); background: var(--color-surface-muted); } .profile-link-copy { min-width: 0; display: grid; line-height: 1.15; } .profile-link-copy strong, .profile-link-copy span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .profile-link-copy span { color: var(--color-text-muted); font-size: var(--font-xs); } .user-avatar, .profile-summary-avatar { display: inline-grid; place-items: center; flex: 0 0 auto; background: var(--color-primary); color: #ffffff; font-weight: 800; } .user-avatar { width: 32px; height: 32px; overflow: hidden; } .user-avatar img, .profile-avatar img { width: 100%; height: 100%; display: block; object-fit: cover; } .dashboard-content { width: min(100%, 1120px); padding: 28px var(--space-5) var(--space-3); display: grid; align-content: start; gap: var(--space-5); } .section-anchor { position: relative; top: -88px; } .page-header { display: grid; gap: var(--space-3); } .breadcrumbs { display: flex; flex-wrap: wrap; gap: var(--space-2); color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 700; } .breadcrumbs span + span::before { content: "/"; margin-right: var(--space-2); color: var(--color-border-strong); } .page-header-row { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-4); } .page-header-row > div { max-width: 760px; display: grid; gap: var(--space-2); } .page-header-actions { flex: 0 0 auto; } .section-kicker, .summary-label { color: var(--color-primary); font-size: var(--font-xs); font-weight: 850; letter-spacing: 0.04em; text-transform: uppercase; } .module-switcher { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); background: var(--color-surface); } .module-switcher a { padding: var(--space-3); display: flex; justify-content: space-between; gap: var(--space-3); border-right: 1px solid var(--color-border); color: var(--color-text); font-weight: 750; } .module-switcher a:last-child { border-right: 0; } .module-switcher a:hover { background: var(--color-primary-soft); text-decoration: none; } .metric-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); background: var(--color-surface); } .metric-item { min-width: 0; padding: var(--space-3); display: grid; gap: 6px; border-right: 1px solid var(--color-border); } .metric-item:last-child { border-right: 0; } .metric-item strong { font-size: 1.45rem; line-height: 1.1; } .metric-item span { color: var(--color-text-muted); font-size: var(--font-sm); } .overview-panel { max-width: 900px; display: grid; gap: var(--space-3); border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); padding: var(--space-3) 0; } .overview-summary { display: grid; gap: 6px; } .overview-summary h3 { font-size: 1.05rem; } .overview-summary p { max-width: 760px; color: var(--color-text-muted); } .info-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; margin: 0; } .info-list div { min-width: 0; display: grid; grid-template-columns: minmax(160px, 0.7fr) minmax(0, 1fr); gap: 12px; align-items: center; padding: 10px 0; border-top: 1px solid var(--color-border); } .info-list div:nth-child(-n + 2) { border-top: 0; } .info-list dt { color: var(--color-text-muted); font-size: var(--font-sm); } .info-list dd { min-width: 0; margin: 0; font-size: var(--font-sm); font-weight: 750; } .dashboard-section, .profile-section { position: relative; display: grid; gap: var(--space-3); border-top: 1px solid var(--color-border); padding-top: var(--space-4); } .section-header { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-3); } .section-header > div { min-width: 0; display: grid; gap: var(--space-1); } .section-count { min-width: 32px; padding: 4px 8px; border: 1px solid var(--color-border); background: var(--color-surface); color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 850; text-align: center; } .resource-list { list-style: none; padding: 0; margin: 0; border-top: 1px solid var(--color-border); } .resource-row { padding: var(--space-3) 0; border-bottom: 1px solid var(--color-border); display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-3); } .resource-row p { margin-top: var(--space-1); } .resource-meta { color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 800; text-transform: uppercase; } .service-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-3); } .service-grid > div { display: grid; gap: var(--space-2); padding: var(--space-3) 0; border-top: 1px solid var(--color-border); } .profile-page { width: min(100%, 960px); display: grid; gap: var(--space-5); } .profile-summary { display: flex; align-items: center; gap: var(--space-3); padding-bottom: var(--space-4); border-bottom: 1px solid var(--color-border); } .profile-summary-avatar { width: 72px; height: 72px; font-size: 1.6rem; } .profile-summary h2 { margin: 2px 0 var(--space-2); font-size: 1.45rem; } .detail-list { margin: 0; border-top: 1px solid var(--color-border); } .detail-row { display: grid; grid-template-columns: 180px minmax(0, 1fr); gap: var(--space-4); padding: 14px 0; border-bottom: 1px solid var(--color-border); } .detail-row dt { color: var(--color-text-muted); font-size: var(--font-sm); font-weight: 700; } .detail-row dd { min-width: 0; margin: 0; color: var(--color-text); font-weight: 700; } .detail-row dd span { display: block; margin-top: var(--space-1); color: var(--color-text-muted); font-size: var(--font-sm); font-weight: 400; } .profile-form { max-width: 560px; } .readonly-fields { display: grid; gap: var(--space-2); } .readonly-fields div, .account-note { border: 1px solid var(--color-border); background: var(--color-surface); } .readonly-fields div { display: grid; gap: var(--space-1); padding: 10px 12px; } .readonly-fields span { color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 850; text-transform: uppercase; } .readonly-fields strong { color: var(--color-text); font-size: var(--font-sm); } .account-note { padding: var(--space-3); display: flex; align-items: flex-start; gap: var(--space-3); } .account-note p { margin-top: var(--space-1); } .form-action { justify-self: start; } .danger-section { border-color: var(--color-danger); } .platform-footer { padding: var(--space-2) 0 0; color: var(--color-text-muted); font-size: var(--font-sm); } pre { margin: 0; white-space: pre-wrap; word-break: break-word; } @keyframes spin { to { transform: rotate(360deg); } } @keyframes skeleton { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } @media (max-width: 1080px) { .dashboard-layout { grid-template-columns: 1fr; } .dashboard-sidebar { position: static; height: auto; border-right: 0; border-bottom: 1px solid var(--color-border); padding: var(--space-3) var(--space-4); } .sidebar-nav { grid-template-columns: repeat(4, minmax(0, 1fr)); } .dashboard-content { width: 100%; } .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .metric-item:nth-child(2) { border-right: 0; } .metric-item:nth-child(-n + 2) { border-bottom: 1px solid var(--color-border); } } .permission-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 10px; } .permission-toggle { min-height: 44px; display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); font-weight: 600; } .permission-toggle input { width: 16px; height: 16px; } .is-active-row { background: var(--color-surface-muted); } @media (max-width: 760px) { .dashboard-header { min-height: 0; padding: var(--space-3); flex-direction: column; align-items: stretch; gap: var(--space-2); } .dashboard-header-main p { white-space: normal; } .dashboard-header-actions { width: 100%; justify-content: flex-end; } .topbar-profile-link { min-width: 0; max-width: none; } .dashboard-content { padding: var(--space-4) var(--space-3) var(--space-3); } .sidebar-brand { padding: 0; } .sidebar-nav, .metric-grid, .module-switcher, .service-grid { grid-template-columns: 1fr; } .module-switcher a, .metric-item, .metric-item:nth-child(2) { border-right: 0; border-bottom: 1px solid var(--color-border); } .metric-item:last-child, .module-switcher a:last-child { border-bottom: 0; } .page-header-row, .ui-empty-state, .resource-row { flex-direction: column; align-items: stretch; } .profile-summary { align-items: flex-start; } .profile-summary-avatar { width: 56px; height: 56px; font-size: 1.25rem; } .detail-row { grid-template-columns: 1fr; gap: 6px; } } @media (max-width: 460px) { .dashboard-header-actions { display: grid; grid-template-columns: minmax(0, 1fr) auto; } .profile-link-copy strong { max-width: 140px; } .ui-button { padding-inline: 10px; } } html:root:not([data-theme="dark"]) { color-scheme: light; --color-bg: #f7f9fc; --color-surface: #ffffff; --color-surface-muted: #f3f6fb; --color-text: #152033; --color-text-muted: #667085; --color-border: #d9e1ec; --color-border-strong: #b9c6d8; --color-primary: #315fdc; --color-primary-hover: #244db8; --color-primary-soft: #edf3ff; --color-danger: #c92a2a; --color-danger-soft: #fff1f1; --color-success: #087f5b; --color-success-soft: #eafaf2; --color-warning: #b86200; --color-warning-soft: #fff7e8; } .dashboard-layout { background: var(--color-bg); } .dashboard-sidebar { background: #fbfcff; } .dashboard-content { width: min(100%, 1180px); padding-bottom: var(--space-5); } .page-header-row { align-items: center; } .page-header-actions, .page-action-row, .row-actions, .quick-actions, .settings-actions, .modal-actions { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; } .page-action-row { justify-content: flex-end; } .dashboard-section { background: transparent; } .tab-list { width: fit-content; display: inline-flex; gap: var(--space-1); padding: var(--space-1); border: 1px solid var(--color-border); background: var(--color-surface-muted); border-radius: var(--radius-md); } .tab-list.wide { width: 100%; overflow-x: auto; } .tab-list button { min-height: 32px; border: 0; border-radius: var(--radius-sm); padding: 6px 12px; background: transparent; color: var(--color-text-muted); font-weight: 750; cursor: pointer; white-space: nowrap; } .tab-list button:hover, .tab-list button.is-active { background: var(--color-surface); color: var(--color-primary); } .table-wrap { width: 100%; overflow-x: auto; border: 1px solid var(--color-border); background: var(--color-surface); } .resource-table th { color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 850; text-transform: uppercase; } .resource-table td { vertical-align: top; } .resource-table th:last-child, .resource-table td:last-child { min-width: 240px; text-align: right; } .resource-table td:last-child .row-actions { justify-content: flex-end; } .text-link { border: 0; padding: 0; background: transparent; color: var(--color-primary); font: inherit; font-weight: 800; cursor: pointer; } .text-link:hover { text-decoration: underline; } .resource-subline { display: block; margin-top: var(--space-1); color: var(--color-text-muted); font-size: var(--font-xs); } .placeholder-panel, .simple-list { display: grid; gap: var(--space-3); } .compact-field { max-width: 360px; } .invite-placeholder { max-width: 720px; display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(160px, 0.6fr) auto; gap: var(--space-3); align-items: end; } .members-panel { max-width: 980px; display: grid; gap: var(--space-3); padding-top: var(--space-3); border-top: 1px solid var(--color-border); } .member-panel-note { margin-top: 4px; color: var(--color-text-muted); font-size: var(--font-xs); } .member-add-row { max-width: 860px; display: grid; grid-template-columns: minmax(260px, 1fr) minmax(128px, 160px) auto; gap: var(--space-2); align-items: end; } .member-add-field { display: grid; gap: 6px; } .member-add-field span { color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 800; } .member-add-row input, .member-add-row select, .member-add-row .ui-button { min-height: 38px; } .members-table select { min-width: 120px; } .members-table { min-width: 680px; } .members-table th, .members-table td { padding: 10px 14px; vertical-align: middle; } .members-table th:last-child, .members-table td:last-child { min-width: 120px; } .advanced-member-add { max-width: 860px; color: var(--color-text-muted); font-size: var(--font-sm); } .advanced-member-add summary { cursor: pointer; font-weight: 800; } .advanced-member-add .member-add-row { margin-top: var(--space-2); } .invitation-list { display: grid; gap: var(--space-2); } .invitation-item { display: grid; gap: var(--space-2); border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: var(--space-3); background: var(--color-surface); } .invitation-main { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); } .invitation-main span { display: inline-flex; gap: 6px; } .invitation-main small { color: var(--color-text-muted); } .invitation-link { display: block; max-width: 100%; overflow-wrap: anywhere; border-radius: var(--radius-sm); background: var(--color-background-soft); padding: 8px 10px; color: var(--color-text); } .invitation-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); } .invitation-accept-card { display: grid; gap: var(--space-3); } .invitation-summary { display: grid; gap: var(--space-2); grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); } .invitation-summary > div { display: grid; gap: 4px; border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: var(--space-3); } .id-code { display: inline-block; max-width: 320px; color: var(--color-text); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: var(--font-xs); overflow-wrap: anywhere; vertical-align: bottom; word-break: normal; } .modal-backdrop { position: fixed; inset: 0; z-index: 80; display: grid; place-items: center; padding: var(--space-3); background: rgba(15, 23, 42, 0.42); } .modal-panel { width: min(100%, 560px); max-height: calc(100vh - 40px); overflow: auto; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface); } .modal-header { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-3); padding: var(--space-4); border-bottom: 1px solid var(--color-border); } .modal-header p { margin-top: var(--space-1); } .modal-form { padding: var(--space-4); } .modal-actions { justify-content: flex-end; } .icon-button { width: 32px; height: 32px; border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-surface); color: var(--color-text); cursor: pointer; font-size: 1.1rem; line-height: 1; } .icon-button:hover { background: var(--color-surface-muted); } .form-error { border-left: 3px solid var(--color-danger); background: var(--color-danger-soft); padding: 10px 12px; color: var(--color-text); font-size: var(--font-sm); } .danger-section { border-color: var(--color-border); } .shell-content { width: 100%; } .settings-page { gap: 14px; } .settings-block { display: grid; gap: 12px; border-top: 1px solid var(--color-border); padding-top: 14px; } .settings-tabs { max-width: 100%; display: flex; gap: 6px; overflow-x: auto; padding: 4px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface-muted); } .settings-tabs button { min-height: 32px; flex: 0 0 auto; border: 0; border-radius: var(--radius-sm); background: transparent; color: var(--color-text-muted); cursor: pointer; font: inherit; font-size: var(--font-sm); font-weight: 650; padding: 6px 10px; white-space: nowrap; } .settings-tabs button:hover, .settings-tabs button.is-active { background: var(--color-surface); color: var(--color-primary); } .settings-tabs button:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; } .settings-summary { display: grid; gap: 4px; max-width: 720px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface); padding: 12px; } .settings-summary p { margin: 0; } .members-panel { max-width: none; } .members-table { min-width: 1040px; } .members-table-wrap, .groups-table-wrap { border-radius: var(--radius-sm); } .groups-table { min-width: 860px; } .yandex-disk-panel { display: grid; gap: var(--space-3); } .storage-status { border-radius: 999px; padding: 6px 10px; font-size: var(--font-xs); font-weight: 700; background: var(--color-surface-muted); color: var(--color-text-muted); } .storage-status-connected { background: rgba(30, 122, 59, 0.14); color: #1e7a3b; } .storage-status-error { background: rgba(180, 54, 42, 0.14); color: #b4362a; } .storage-summary { display: flex; align-items: center; gap: var(--space-4); } .storage-ring { --storage-percent: 0%; width: 88px; height: 88px; display: grid; place-items: center; border-radius: 50%; background: conic-gradient(#1e7a3b var(--storage-percent), var(--color-border) 0); flex: 0 0 auto; } .storage-ring span { width: 62px; height: 62px; display: grid; place-items: center; border-radius: 50%; background: var(--color-surface); font-weight: 800; } .storage-ring-warning { background: conic-gradient(#d47b18 var(--storage-percent), var(--color-border) 0); } .storage-ring-danger { background: conic-gradient(#b4362a var(--storage-percent), var(--color-border) 0); } .storage-details, .token-form { display: grid; gap: var(--space-2); } .storage-details a { color: var(--color-primary); font-weight: 700; } .groups-table th, .groups-table td { padding: 12px 16px; vertical-align: middle; } .member-person { min-width: 0; display: grid; gap: 3px; } .member-person strong, .member-person span { min-width: 0; overflow-wrap: anywhere; } .member-person span { color: var(--color-text-muted); font-size: var(--font-sm); } .badge-row { display: flex; flex-wrap: wrap; gap: 6px; } .compact-list { max-width: 320px; color: var(--color-text); font-size: var(--font-sm); line-height: 1.45; } .invitation-form-row { max-width: none; grid-template-columns: minmax(220px, 0.8fr) minmax(280px, 1.4fr) auto; } .group-checkbox-field { min-width: 0; } .inline-checkboxes, .checkbox-list { display: flex; flex-wrap: wrap; gap: 8px; } .inline-checkboxes label { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--color-border); border-radius: var(--radius-sm); padding: 7px 9px; background: var(--color-surface); color: var(--color-text); font-size: var(--font-sm); font-weight: 700; } .compact-group-selector { max-height: 132px; overflow-y: auto; align-content: flex-start; padding: 6px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface-muted); } .compact-group-selector label { min-width: 0; max-width: 180px; gap: 7px; padding: 5px 8px; border-radius: 999px; background: var(--color-surface); font-size: var(--font-xs); cursor: pointer; } .compact-group-selector label:has(input:checked) { border-color: var(--color-primary); background: var(--color-primary-soft); color: var(--color-primary); } .compact-group-selector input { width: 14px; height: 14px; flex: 0 0 auto; } .compact-group-selector label span { min-width: 0; max-width: 140px; display: block; overflow: hidden; color: inherit; text-overflow: ellipsis; white-space: nowrap; } .checkbox-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); } .permission-toggle span { display: grid; gap: 2px; } .permission-toggle small { color: var(--color-text-muted); font-size: var(--font-xs); } .group-editor { display: grid; gap: var(--space-4); padding: var(--space-4); } .group-editor-section { display: grid; gap: var(--space-3); } .group-editor-section h4 { margin: 0; font-size: var(--font-md); } .compact-info-list { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); } .permission-service-block { display: grid; gap: var(--space-2); } .modal-panel { width: min(100%, 880px); } @media (max-width: 760px) { .page-header-actions, .page-action-row, .quick-actions, .settings-actions, .modal-actions { width: 100%; } .page-action-row .ui-button, .quick-actions .ui-button, .settings-actions .ui-button { flex: 1 1 auto; } .invite-placeholder { grid-template-columns: 1fr; } .member-add-row { grid-template-columns: 1fr; } .resource-table th:nth-child(2), .resource-table td:nth-child(2) { min-width: 220px; } } .shell-layout { min-height: 100vh; display: grid; grid-template-columns: 232px minmax(0, 1fr); background: var(--color-bg); } .shell-sidebar { position: sticky; top: 0; height: 100vh; border-right: 1px solid var(--color-border); background: #fbfcff; padding: 18px 12px; display: flex; flex-direction: column; gap: 18px; transition: width var(--transition-fast); } .shell-sidebar.is-collapsed { width: 64px; padding-inline: 10px; } .shell-layout:has(.shell-sidebar.is-collapsed) { grid-template-columns: 64px minmax(0, 1fr); } .shell-brand, .shell-nav-item, .sidebar-collapse-button { border: 0; background: transparent; color: var(--color-text); cursor: pointer; text-align: left; } .shell-brand { min-height: 38px; display: flex; align-items: center; gap: 10px; padding: 0 6px; } .shell-brand:hover { text-decoration: none; } .shell-brand > span:last-child, .shell-context { min-width: 0; } .shell-brand strong, .shell-context strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .shell-brand small, .shell-context > span { display: block; color: var(--color-text-muted); font-size: var(--font-xs); } .shell-context { display: grid; gap: 6px; padding: 12px 10px; border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); } .shell-nav { display: grid; gap: 4px; } .shell-nav-management { padding-top: 12px; border-top: 1px solid var(--color-border); } .shell-nav-services { padding-top: 12px; border-top: 1px solid var(--color-border); } .shell-nav-caption { padding: 0 10px 4px; color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 850; text-transform: uppercase; } .shell-sidebar-actions { margin-top: auto; display: grid; gap: 10px; } .shell-nav-item { min-height: 38px; display: flex; align-items: center; gap: 10px; border-radius: var(--radius-md); padding: 8px 10px; color: var(--color-text-muted); font-weight: 750; transition: background var(--transition-fast), color var(--transition-fast); } .shell-nav-item:hover, .shell-nav-item.is-active { background: var(--color-primary-soft); color: var(--color-primary); } .shell-nav-item.is-disabled { cursor: default; opacity: 0.58; } .shell-nav-icon { width: 24px; height: 24px; flex: 0 0 auto; display: inline-grid; place-items: center; border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-surface); font-size: var(--font-xs); font-weight: 900; } .shell-sidebar.is-collapsed .shell-brand, .shell-sidebar.is-collapsed .shell-nav-item, .shell-sidebar.is-collapsed .sidebar-collapse-button { justify-content: center; padding-inline: 0; } .sidebar-collapse-button { min-height: 34px; display: flex; align-items: center; justify-content: center; gap: 8px; border: 1px solid var(--color-border); border-radius: var(--radius-md); color: var(--color-text-muted); font-weight: 800; } .sidebar-collapse-button:hover { background: var(--color-surface-muted); color: var(--color-text); } .shell-main-column { min-width: 0; display: grid; grid-template-rows: auto 1fr; } .shell-topbar { min-height: 68px; position: sticky; top: 0; z-index: var(--z-header); border-bottom: 1px solid var(--color-border); background: rgba(255, 255, 255, 0.92); backdrop-filter: blur(10px); padding: 0 32px; display: flex; align-items: center; justify-content: space-between; gap: 20px; } .shell-topbar h1 { font-size: var(--font-lg); } .shell-user-actions { display: flex; align-items: center; gap: 8px; } .topbar-groups { min-width: 0; max-width: min(420px, 36vw); display: flex; align-items: center; justify-content: flex-end; gap: 6px; overflow: hidden; } .topbar-groups .ui-badge { max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .shell-content { width: 100%; padding: 28px 32px 40px; display: grid; align-content: start; gap: 28px; } .access-notice, .section-error, .catalog-rule, .compact-empty { border: 1px solid var(--color-border); background: var(--color-surface); border-radius: var(--radius-md); } .access-notice, .section-error { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px; } .access-notice { border-color: #f0d49c; background: #fffaf0; color: var(--color-text); font-size: var(--font-sm); } .section-error { border-color: #f2b8b5; background: #fff7f7; } .section-error p { margin-top: 2px; color: var(--color-text-muted); font-size: var(--font-sm); } .compact-empty, .catalog-rule { padding: 12px 14px; color: var(--color-text-muted); font-size: var(--font-sm); } .compact-empty { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .compact-empty strong { color: var(--color-text); } .resource-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; } .resource-grid-compact { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); } .resource-grid-services { grid-template-columns: repeat(auto-fill, minmax(260px, 320px)); justify-content: start; } .resource-card { min-width: 0; min-height: 246px; position: relative; display: grid; grid-template-rows: 128px 1fr; overflow: hidden; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface); color: var(--color-text); text-align: left; transition: border-color var(--transition-fast), transform var(--transition-fast), background var(--transition-fast); } .resource-card-button { width: 100%; cursor: pointer; font: inherit; } .resource-card:hover { border-color: var(--color-border-strong); transform: translateY(-1px); } .resource-card-preview { position: relative; display: grid; place-items: center; overflow: hidden; color: #ffffff; } .resource-preview-0 { background: linear-gradient(135deg, #4263eb, #12b886); } .resource-preview-1 { background: linear-gradient(135deg, #0ca678, #4dabf7); } .resource-preview-2 { background: linear-gradient(135deg, #6741d9, #20c997); } .resource-preview-3 { background: linear-gradient(135deg, #1c7ed6, #f59f00); } .resource-preview-4 { background: linear-gradient(135deg, #087f5b, #5c7cfa); } .resource-preview-5 { background: linear-gradient(135deg, #364fc7, #15aabf); } .resource-card-preview img { width: 100%; height: 100%; object-fit: cover; } .resource-card-preview strong { font-size: 2rem; } .resource-card-type { position: absolute; left: 12px; top: 10px; border: 1px solid rgba(255, 255, 255, 0.42); border-radius: var(--radius-sm); padding: 3px 6px; background: rgba(0, 0, 0, 0.16); font-size: var(--font-xs); font-weight: 900; } .resource-card-hover { position: absolute; inset: 0; display: flex; align-items: flex-end; padding: 14px; background: rgba(13, 22, 38, 0.58); opacity: 0; color: #ffffff; font-size: var(--font-sm); line-height: 1.35; transition: opacity var(--transition-fast); } .resource-card:hover .resource-card-hover { opacity: 1; } .resource-card-body { min-width: 0; display: grid; gap: 8px; align-content: start; padding: 14px; } .resource-card-title-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; } .resource-card h3 { min-width: 0; overflow-wrap: normal; word-break: normal; hyphens: none; font-size: var(--font-md); } .resource-card-body p { display: -webkit-box; overflow: hidden; -webkit-line-clamp: 2; -webkit-box-orient: vertical; font-size: var(--font-sm); } .resource-card-meta { display: flex; flex-wrap: wrap; gap: 6px; color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 800; } .resource-card-actions { padding: 0 14px 14px; display: flex; justify-content: flex-start; } .resource-card-meta span, .resource-card-status { width: fit-content; border: 1px solid var(--color-border); border-radius: 999px; padding: 3px 8px; background: var(--color-surface-muted); } .service-card { min-width: 0; min-height: 156px; display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 12px; align-items: start; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface); padding: 14px; transition: border-color var(--transition-fast), transform var(--transition-fast), background var(--transition-fast); } .service-card:hover { border-color: var(--color-border-strong); transform: translateY(-1px); } .service-card-icon { width: 44px; height: 44px; display: inline-grid; place-items: center; border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-primary-soft); color: var(--color-primary); font-size: var(--font-sm); font-weight: 900; letter-spacing: 0; } .service-card-content { min-width: 0; display: grid; gap: 8px; } .service-card-title-row { min-width: 0; display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; } .service-card h3 { min-width: 0; font-size: var(--font-md); line-height: 1.25; overflow-wrap: normal; word-break: normal; hyphens: none; } .service-card p { display: -webkit-box; overflow: hidden; color: var(--color-text-muted); font-size: var(--font-sm); line-height: 1.4; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .service-card-meta { display: flex; flex-wrap: wrap; gap: 6px; color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 800; } .service-card-meta span, .service-status-badge { width: fit-content; border: 1px solid var(--color-border); border-radius: 999px; padding: 3px 8px; background: var(--color-surface-muted); white-space: nowrap; } .service-card-meta .is-enabled { border-color: transparent; background: var(--color-success-soft); color: var(--color-success); } .service-status-badge { flex: 0 0 auto; color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 850; } .service-card-actions { grid-column: 2; display: flex; justify-content: flex-start; } .service-card-actions .ui-button { min-height: 32px; padding: 6px 10px; font-size: var(--font-sm); } .service-card-action-row { display: flex; flex-wrap: wrap; gap: 8px; } .files-section { max-width: none; } .service-icon-select { min-height: 32px; display: inline-flex; align-items: center; gap: 6px; color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 850; } .service-icon-select select { min-height: 32px; min-width: 132px; border-radius: var(--radius-sm); padding: 5px 8px; font-size: var(--font-sm); } .file-upload-control { display: inline-flex; width: fit-content; cursor: pointer; } .file-upload-control input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; } .files-table-wrap { max-width: 100%; } .files-table { min-width: 760px; } .files-table td:first-child strong { display: block; max-width: 360px; overflow-wrap: anywhere; } .row-actions { display: flex; flex-wrap: wrap; gap: 8px; } .create-resource-card { grid-template-rows: 1fr; place-items: center; align-content: center; gap: 10px; min-height: 246px; padding: 20px; border-style: dashed; cursor: pointer; color: var(--color-primary); } .create-resource-card:hover { background: var(--color-primary-soft); } .create-resource-card:disabled { cursor: not-allowed; opacity: 0.6; } .create-resource-plus { width: 52px; height: 52px; display: inline-grid; place-items: center; position: relative; border: 1px solid var(--color-border-strong); border-radius: 50%; background: var(--color-surface); } .create-resource-plus::before, .create-resource-plus::after { content: ""; position: absolute; left: 50%; top: 50%; width: 20px; height: 2px; border-radius: 999px; background: currentColor; transform: translate(-50%, -50%); } .create-resource-plus::after { transform: translate(-50%, -50%) rotate(90deg); } .create-resource-card span:last-child { color: var(--color-text-muted); font-size: var(--font-sm); text-align: center; } .subsection { display: grid; gap: 12px; } .service-picker { display: grid; gap: 10px; } .service-picker-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 14px; align-items: center; padding: 12px 0; border-bottom: 1px solid var(--color-border); } .service-picker-row:last-child { border-bottom: 0; } .files-explorer { display: grid; gap: 16px; } .files-toolbar { display: flex; justify-content: space-between; gap: 12px; align-items: center; } .office-search-field { min-width: min(100%, 360px); display: grid; gap: 6px; color: var(--color-text-muted); font-size: var(--font-sm); font-weight: 750; } .office-search-field input { width: 100%; min-height: 38px; border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-surface); color: var(--color-text); font: inherit; padding: 8px 10px; } .files-breadcrumb { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; } .files-breadcrumb button { border: 0; background: transparent; color: var(--color-text); font: inherit; padding: 6px 4px; cursor: pointer; } .files-breadcrumb button.is-drop-target { border-radius: var(--radius-sm); background: var(--color-primary-soft); color: var(--color-primary); } .files-breadcrumb button.is-drag-over { outline: 2px solid var(--color-primary); outline-offset: 2px; } .files-breadcrumb button:not(:last-child)::after { content: "/"; color: var(--color-text-muted); margin-left: 8px; } .files-breadcrumb button:disabled { color: var(--color-text-muted); cursor: default; } .file-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 14px; } .file-card { min-height: 164px; position: relative; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: stretch; overflow: visible; transition: border-color var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast); } .file-card-existing { min-height: 168px; grid-template-columns: minmax(0, 1fr); align-items: stretch; } .file-card:hover, .file-card:focus-within { border-color: var(--color-border-strong); box-shadow: 0 10px 24px rgba(15, 23, 42, 0.08); transform: translateY(-1px); } .file-card.is-drag-over { border-color: var(--color-primary); box-shadow: 0 14px 30px rgba(49, 95, 220, 0.18); transform: translateY(-1px); } .file-card-create { grid-template-columns: 44px minmax(0, 1fr); align-items: center; gap: 12px; min-height: 116px; border-style: dashed; padding: 16px; color: var(--color-primary); cursor: pointer; text-align: left; } .file-card-create:hover { background: var(--color-primary-soft); } .file-card-main { border: 0; background: transparent; color: inherit; display: grid; gap: 8px; align-content: start; text-align: left; padding: 16px 12px 16px 16px; cursor: pointer; min-width: 0; } .file-card-existing .file-card-main { justify-items: center; align-content: center; gap: 14px; padding: 28px 14px 16px; text-align: center; } .file-card-future { opacity: 0.72; } .file-card-icon { width: 42px; height: 42px; border-radius: 8px; display: grid; place-items: center; border: 1px solid var(--service-icon-border, transparent); background: var(--service-icon-bg, var(--color-surface-muted)); color: var(--service-icon-color, var(--color-primary)); font-size: var(--font-xs); font-weight: 900; letter-spacing: 0; } .file-card-existing .file-card-icon { width: 62px; height: 62px; border-radius: 16px; } .file-card-existing .file-card-icon .service-svg-icon { width: 30px; height: 30px; } .file-card-folder .file-card-icon { background: var(--service-icon-bg, #fff7d6); color: var(--service-icon-color, #9a6500); } .file-card-title, .file-card strong { min-width: 0; color: var(--color-text); font-weight: 850; line-height: 1.25; overflow-wrap: anywhere; } .file-card-title { display: -webkit-box; overflow: hidden; max-width: 100%; font-size: 0.94rem; -webkit-box-orient: vertical; -webkit-line-clamp: 2; word-break: break-word; } .file-card small { color: var(--color-text-muted); font-size: var(--font-xs); } .file-card-path { width: fit-content; max-width: 100%; border-radius: 999px; background: var(--color-surface-muted); padding: 3px 8px; overflow-wrap: anywhere; } .file-card-meta-line { display: flex; flex-wrap: wrap; gap: 6px; color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 800; } .file-card-meta-line span { width: fit-content; border: 1px solid var(--color-border); border-radius: 999px; padding: 3px 8px; background: var(--color-surface-muted); } .file-card-actions { padding: 10px 10px 0 0; position: relative; } .file-card-existing .file-card-actions { position: absolute; top: 8px; right: 8px; padding: 0; opacity: 1; transition: opacity var(--transition-fast), transform var(--transition-fast); } @media (hover: hover) and (pointer: fine) { .file-card-existing .file-card-actions { opacity: 0; transform: translateY(-2px); } .file-card-existing:hover .file-card-actions, .file-card-existing:focus-within .file-card-actions { opacity: 1; transform: none; } } .file-action-menu { position: relative; z-index: 3; } .file-action-menu summary { width: 28px; height: 28px; display: grid; place-items: center; border: 0; border-radius: var(--radius-sm); background: transparent; color: var(--color-text-muted); cursor: pointer; font-size: 0; list-style: none; } .file-action-menu summary::before { content: "..."; font-size: var(--font-md); font-weight: 900; letter-spacing: 0; } .file-action-menu summary::-webkit-details-marker { display: none; } .file-action-menu summary:hover, .file-action-menu[open] summary { background: var(--color-surface-muted); color: var(--color-text); } .file-action-list { position: absolute; right: 0; top: 38px; min-width: 176px; display: grid; gap: 4px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); box-shadow: 0 18px 36px rgba(15, 23, 42, 0.16); padding: 6px; } .file-action-list button { min-height: 34px; border: 0; border-radius: var(--radius-sm); background: transparent; color: var(--color-text); cursor: pointer; font: inherit; font-size: var(--font-sm); font-weight: 750; text-align: left; padding: 7px 9px; } .file-action-list button:hover:not(:disabled) { background: var(--color-surface-muted); } .file-action-list button:disabled { cursor: not-allowed; opacity: 0.48; } .file-action-list .danger-menu-item { color: var(--color-danger); } .file-details-dialog { display: grid; gap: var(--space-3); padding: var(--space-4); } .file-details-list { display: grid; gap: 0; margin: 0; border-top: 1px solid var(--color-border); } .file-details-list div { min-width: 0; display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: var(--space-3); padding: 10px 0; border-bottom: 1px solid var(--color-border); } .file-details-list dt { color: var(--color-text-muted); font-size: var(--font-sm); font-weight: 750; } .file-details-list dd { min-width: 0; margin: 0; overflow-wrap: anywhere; color: var(--color-text); font-size: var(--font-sm); font-weight: 650; } @media (max-width: 560px) { .file-details-list div { grid-template-columns: 1fr; gap: 4px; } } .create-menu { display: grid; gap: 18px; padding: var(--space-4); } .move-dialog { display: grid; gap: var(--space-3); padding: var(--space-4); } .move-current-path { display: grid; gap: 4px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface-muted); padding: 10px 12px; } .move-current-path span { color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 850; text-transform: uppercase; } .move-current-path strong { min-width: 0; overflow-wrap: anywhere; } .create-type-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; } .create-type-card, .file-drop-zone { min-width: 0; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); color: var(--color-text); cursor: pointer; text-align: left; transition: border-color var(--transition-fast), background var(--transition-fast), transform var(--transition-fast); } .create-type-card { min-height: 136px; display: grid; gap: 8px; align-content: start; padding: 14px; } .create-type-card:hover:not(:disabled), .file-drop-zone:hover:not(:disabled) { border-color: var(--color-border-strong); background: var(--color-surface-muted); transform: translateY(-1px); } .create-type-card:disabled { cursor: not-allowed; opacity: 0.58; } .create-type-card strong, .file-drop-zone strong { min-width: 0; overflow-wrap: anywhere; } .create-type-card small, .file-drop-zone small { color: var(--color-text-muted); font-size: var(--font-sm); line-height: 1.35; } .create-type-icon { width: 44px; height: 44px; display: grid; place-items: center; border: 1px solid var(--service-icon-border, var(--color-border)); border-radius: 8px; background: var(--service-icon-bg, var(--color-primary-soft)); color: var(--service-icon-color, var(--color-primary)); font-size: var(--font-xs); font-weight: 900; letter-spacing: 0; } .create-step { display: grid; gap: 12px; border-top: 1px solid var(--color-border); padding-top: 16px; } .create-step-disabled { border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface-muted); padding: 14px; } .create-back-button { width: fit-content; border: 0; background: transparent; color: var(--color-primary); cursor: pointer; font: inherit; font-size: var(--font-sm); font-weight: 850; padding: 0; } .file-drop-zone { min-height: 148px; display: grid; gap: 8px; place-items: center; justify-items: center; border-style: dashed; padding: 20px; text-align: center; } .shell-content:has(.office-editor-shell) { width: 100%; min-height: calc(100vh - 68px); align-content: stretch; padding-bottom: 16px; } .office-editor-shell { height: calc(100vh - 140px); min-height: 620px; display: flex; flex-direction: column; gap: 12px; } .office-editor-toolbar { min-height: 44px; display: flex; align-items: center; justify-content: space-between; gap: 12px; border-bottom: 1px solid var(--color-border); padding-bottom: 12px; } .office-editor-form { display: none; } .office-editor-frame { width: 100%; height: 100%; min-height: 0; flex: 1 1 auto; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); } .whiteboard-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px; } .whiteboard-card { display: grid; gap: 12px; padding: 16px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); } .whiteboard-card header, .whiteboard-editor-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .whiteboard-card-actions { display: flex; flex-wrap: wrap; gap: 8px; } .whiteboard-editor-shell { display: grid; grid-template-rows: auto auto 1fr; gap: 12px; min-height: calc(100vh - 160px); } .whiteboard-editor-toolbar { padding: 12px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); } .whiteboard-editor-toolbar > div { display: flex; align-items: center; gap: 10px; min-width: 0; } .whiteboard-editor-frame { width: 100%; min-height: 680px; height: calc(100vh - 230px); border: 1px solid var(--color-border); border-radius: 8px; background: #fff; } .notifications-menu { position: relative; } .notifications-button { position: relative; width: 40px; height: 40px; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); color: var(--color-text); font-weight: 800; cursor: pointer; } .notifications-badge { position: absolute; top: -6px; right: -6px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: var(--color-danger); color: #fff; font-size: 11px; line-height: 18px; } .notifications-dropdown { position: absolute; top: calc(100% + 10px); right: 0; z-index: 60; width: min(360px, calc(100vw - 32px)); max-height: 460px; overflow: auto; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface); box-shadow: var(--shadow-lg); } .notifications-dropdown header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 14px; border-bottom: 1px solid var(--color-border); } .notifications-dropdown header button, .notification-delete { border: 0; background: transparent; color: var(--color-muted); cursor: pointer; } .notifications-dropdown ul, .activity-list { margin: 0; padding: 0; list-style: none; } .notifications-dropdown li { display: grid; grid-template-columns: 1fr auto; gap: 8px; border-bottom: 1px solid var(--color-border); } .notifications-dropdown li.is-unread { background: var(--color-surface-muted); } .notification-content { display: grid; gap: 4px; min-width: 0; padding: 12px 14px; border: 0; background: transparent; color: inherit; text-align: left; cursor: pointer; } .notification-content span, .notification-content small, .activity-item p, .activity-item small { color: var(--color-muted); } .notification-delete { align-self: start; padding: 12px 12px 0 0; } .activity-feed { margin-top: 24px; } .activity-list { display: grid; gap: 10px; } .activity-item { display: grid; grid-template-columns: 12px 1fr; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--color-border); } .activity-dot { width: 8px; height: 8px; margin-top: 7px; border-radius: 999px; background: var(--color-primary); } @media (hover: none) { .resource-card-hover { display: none; } } @media (max-width: 980px) { .shell-layout, .shell-layout:has(.shell-sidebar.is-collapsed) { grid-template-columns: 1fr; } .shell-sidebar { position: static; width: auto; height: auto; border-right: 0; border-bottom: 1px solid var(--color-border); } .shell-sidebar.is-collapsed { width: auto; } .shell-sidebar.is-collapsed .shell-nav { grid-template-columns: repeat(5, minmax(44px, 1fr)); } .shell-nav { grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); } .shell-sidebar-actions { margin-top: 0; } .shell-context { display: none; } } @media (max-width: 760px) { .shell-topbar { position: static; padding: 14px; flex-direction: column; align-items: stretch; } .shell-user-actions { justify-content: space-between; } .shell-content { padding: 20px 14px 28px; } .resource-grid, .resource-grid-compact { grid-template-columns: 1fr; } .resource-grid-services { grid-template-columns: 1fr; } .resource-card, .create-resource-card { min-height: 220px; } .resource-card { grid-template-rows: 112px 1fr; } .service-picker-row { grid-template-columns: 1fr; } .files-toolbar { align-items: stretch; flex-direction: column; } .file-card-grid, .create-type-grid { grid-template-columns: 1fr; } .service-card { grid-template-columns: 40px minmax(0, 1fr); } .service-card-icon { width: 40px; height: 40px; } .service-card-title-row { flex-direction: column; align-items: flex-start; } .service-card-actions { grid-column: 1 / -1; } .info-list { grid-template-columns: 1fr; } .info-list div, .info-list div:nth-child(-n + 2) { grid-template-columns: 1fr; gap: 4px; border-top: 1px solid var(--color-border); } .info-list div:first-child { border-top: 0; } } /* UI foundation pass: shared SaaS visual system */ :root, :root:not([data-theme="dark"]) { color-scheme: light; --color-bg: #f7f8fa; --color-surface: #ffffff; --color-surface-muted: #f3f5f7; --color-text: #1f2328; --color-text-muted: #667085; --color-border: #d8dee4; --color-border-strong: #b9c3cf; --color-primary: #2563eb; --color-primary-hover: #1d4ed8; --color-primary-soft: #eff6ff; --color-danger: #c2410c; --color-danger-soft: #fff7ed; --color-success: #047857; --color-success-soft: #ecfdf5; --color-warning: #b45309; --color-warning-soft: #fffbeb; --color-info: #0369a1; --color-info-soft: #f0f9ff; --color-background-soft: var(--color-surface-muted); --shadow-focus: 0 0 0 3px rgba(37, 99, 235, 0.16); --shadow-subtle: 0 1px 2px rgba(16, 24, 40, 0.04); --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 20px; --space-5: 28px; --space-6: 40px; --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --font-xs: 0.75rem; --font-sm: 0.875rem; --font-md: 0.95rem; --font-lg: 1.125rem; --font-xl: 1.45rem; --line-tight: 1.25; --line-normal: 1.5; } body { font-size: 15px; line-height: var(--line-normal); -webkit-font-smoothing: antialiased; } h1, h2, h3, h4 { color: var(--color-text); font-weight: 650; letter-spacing: 0; } h1 { font-size: var(--font-xl); } h2 { font-size: var(--font-lg); } h3, h4 { margin: 0; font-size: var(--font-md); } .muted { color: var(--color-text-muted); font-size: var(--font-sm); } label, .form-field, .office-search-field { gap: 6px; color: var(--color-text); font-size: var(--font-sm); font-weight: 560; } input, select, textarea, .ui-input, .ui-select, .ui-textarea { min-height: 38px; border-color: var(--color-border); border-radius: var(--radius-md); padding: 8px 10px; font-size: var(--font-sm); line-height: 1.4; } input::placeholder, textarea::placeholder { color: #98a2b3; } input:hover, select:hover, textarea:hover { border-color: var(--color-border-strong); } input:focus, select:focus, textarea:focus { border-color: var(--color-primary); } .form { gap: var(--space-3); } .ui-button { min-height: 36px; border-radius: var(--radius-md); padding: 7px 12px; font-size: var(--font-sm); font-weight: 600; line-height: 1.35; box-shadow: none; } .ui-button-small { min-height: 30px; padding: 5px 10px; font-size: var(--font-xs); } .ui-button-primary { border-color: var(--color-primary); } .ui-button-secondary { background: var(--color-surface); border-color: var(--color-border); color: var(--color-text); } .ui-button-secondary:hover:not(:disabled) { border-color: var(--color-border-strong); background: var(--color-surface-muted); color: var(--color-text); } .ui-button-ghost { color: var(--color-text-muted); } .ui-button-ghost:hover:not(:disabled) { background: var(--color-surface-muted); color: var(--color-text); } .ui-button-danger { background: #b42318; border-color: #b42318; } .ui-badge, .resource-card-meta span, .resource-card-status, .service-status-badge, .storage-status { min-height: 22px; border-radius: 999px; padding: 2px 8px; font-size: 11px; font-weight: 600; line-height: 16px; letter-spacing: 0; } .ui-badge-neutral, .resource-card-meta span, .resource-card-status, .storage-status { background: var(--color-surface-muted); border-color: var(--color-border); color: var(--color-text-muted); } .ui-badge-accent, .ui-badge-info { background: var(--color-info-soft); border-color: #bae6fd; color: var(--color-info); } .ui-badge-success { border-color: #bbf7d0; } .ui-badge-warning { border-color: #fde68a; } .ui-badge-danger { border-color: #fed7aa; } .ui-empty-state, .compact-empty, .catalog-rule, .access-notice, .section-error { border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); padding: 12px 14px; } .ui-empty-state { border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); } .section-error, .access-notice { box-shadow: none; } .access-notice { border-color: #fde68a; background: var(--color-warning-soft); } .ui-skeleton span { height: 38px; border-radius: var(--radius-md); background: var(--color-surface-muted); } .ui-table { border-collapse: separate; border-spacing: 0; color: var(--color-text); font-size: var(--font-sm); } .table-wrap { overflow-x: auto; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); } .ui-table th, .ui-table td, .groups-table th, .groups-table td { padding: 10px 14px; border-bottom: 1px solid var(--color-border); vertical-align: middle; } .ui-table th { background: var(--color-surface-muted); color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 650; text-transform: none; } .ui-table tbody tr:last-child td { border-bottom: 0; } .ui-table tbody tr:hover { background: #fbfcfd; } .row-actions, .settings-actions, .modal-actions, .invitation-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; } .row-actions, .modal-actions, .settings-actions { justify-content: flex-end; } .modal-backdrop { padding: 24px; background: rgba(31, 35, 40, 0.36); } .modal-panel { width: min(100%, 640px); max-height: calc(100vh - 48px); border-radius: var(--radius-lg); box-shadow: var(--shadow-subtle); } .modal-panel:has(.group-editor), .modal-panel:has(.create-step) { width: min(100%, 880px); } .modal-header { padding: 18px 20px; gap: 16px; } .modal-header h2 { font-size: var(--font-lg); } .modal-form, .create-step, .group-editor { padding: 20px; } .icon-button { width: 30px; height: 30px; border-color: transparent; border-radius: var(--radius-md); color: var(--color-text-muted); } .icon-button:hover { border-color: var(--color-border); color: var(--color-text); } .auth-shell { background: var(--color-bg); } .auth-card { border-radius: var(--radius-lg); padding: 28px; box-shadow: var(--shadow-subtle); } .shell-layout { grid-template-columns: 236px minmax(0, 1fr); } .shell-layout:has(.shell-sidebar.is-collapsed) { grid-template-columns: 68px minmax(0, 1fr); } .shell-sidebar { width: 236px; gap: 16px; padding: 16px 10px; background: var(--color-surface); transition: none; } .shell-sidebar.is-collapsed { width: 68px; padding-inline: 10px; } .brand-mark { width: 32px; height: 32px; border-radius: var(--radius-md); background: var(--color-text); font-weight: 750; } .shell-brand { min-height: 36px; padding: 0 8px; border-radius: var(--radius-md); } .shell-brand:hover, .shell-nav-item:hover, .sidebar-collapse-button:hover { background: var(--color-surface-muted); } .shell-brand strong, .shell-context strong, .profile-link-copy strong { font-weight: 650; } .shell-context { gap: 4px; padding: 10px 8px; border-radius: var(--radius-md); border: 1px solid var(--color-border); background: #fbfcfd; } .shell-nav { gap: 2px; } .shell-nav-services { margin-top: 4px; } .shell-nav-caption { padding: 2px 10px 6px; color: var(--color-text-muted); font-size: 11px; font-weight: 650; letter-spacing: 0; text-transform: none; } .shell-nav-item { min-height: 36px; border-radius: var(--radius-md); padding: 7px 9px; color: var(--color-text-muted); font-size: var(--font-sm); font-weight: 560; } .shell-nav-item.is-active { background: var(--color-primary-soft); color: var(--color-primary); font-weight: 650; } .shell-nav-icon { width: 22px; height: 22px; border-color: transparent; background: transparent; color: inherit; font-weight: 650; } .sidebar-collapse-button { min-height: 34px; border-color: var(--color-border); font-size: var(--font-sm); font-weight: 560; } .shell-main-column { min-width: 0; } .shell-topbar { min-height: 56px; padding: 0 28px; background: rgba(255, 255, 255, 0.96); backdrop-filter: blur(8px); } .shell-topbar-space { flex: 1 1 auto; min-width: 0; } .shell-user-actions { gap: 6px; } .shell-user-actions > .ui-button-secondary { min-height: 32px; padding-inline: 10px; } .topbar-profile-link { max-width: 190px; padding: 4px 6px; } .user-avatar { width: 28px; height: 28px; border-radius: var(--radius-md); background: var(--color-surface-muted); color: var(--color-text); font-size: var(--font-sm); } .shell-content, .dashboard-content { width: 100%; padding: 24px 28px 36px; gap: 24px; } .shell-content:has(.files-explorer), .shell-content:has(.office-editor-shell), .shell-content:has(.tasks-section), .shell-content:has(.kanban-board), .shell-content:has(.gantt-section), .shell-content:has(.whiteboard-page), .shell-content:has(.whiteboard-editor-shell) { width: 100%; } .page-header { gap: 10px; } .page-header-row { align-items: flex-start; gap: 18px; } .page-header-row > div { gap: 5px; max-width: 780px; } .page-header h2 { font-size: 1.35rem; line-height: var(--line-tight); } .breadcrumbs { font-size: 12px; font-weight: 500; } .section-kicker, .summary-label { font-weight: 650; letter-spacing: 0; text-transform: none; } .dashboard-section, .profile-section, .settings-block { gap: 14px; padding-top: 18px; } .settings-page > .dashboard-section, .settings-page > .settings-block { gap: 12px; padding-top: 14px; } .section-header { gap: 14px; } .section-header > div { gap: 3px; } .section-count { min-width: 0; border-color: transparent; background: var(--color-surface-muted); border-radius: 999px; color: var(--color-text-muted); font-weight: 600; } .overview-panel, .account-note, .readonly-fields div, .invitation-summary > div { border-radius: var(--radius-lg); } .resource-grid { grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 10px; } .resource-grid-compact { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); } .resource-grid-services { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); } .resource-card { min-height: 132px; grid-template-columns: 48px minmax(0, 1fr); grid-template-rows: auto auto; gap: 12px; align-items: start; padding: 14px; overflow: visible; border-radius: var(--radius-lg); box-shadow: none; transform: none; } .resource-card:hover, .resource-card:focus-within { border-color: var(--color-border-strong); background: #fbfcfd; transform: none; } .resource-card-preview { width: 48px; height: 48px; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface-muted); color: var(--color-text); } .resource-preview-0, .resource-preview-1, .resource-preview-2, .resource-preview-3, .resource-preview-4, .resource-preview-5 { background: var(--color-surface-muted); } .resource-card-preview strong { font-size: var(--font-sm); font-weight: 650; } .resource-card-type { display: none; } .resource-card-body { padding: 0; gap: 7px; } .resource-card h3 { font-size: var(--font-md); font-weight: 650; } .resource-card-body p { -webkit-line-clamp: 2; line-height: 1.4; } .resource-card-meta { gap: 5px; font-weight: 500; } .resource-card-actions { grid-column: 2; padding: 0; justify-content: flex-end; } .create-resource-card { grid-template-columns: 48px minmax(0, 1fr); grid-template-rows: auto auto; place-items: stretch; align-content: center; min-height: 132px; padding: 14px; color: var(--color-text); } .create-resource-card:hover { background: #fbfcfd; } .create-resource-plus { grid-row: 1 / span 2; width: 48px; height: 48px; border-radius: var(--radius-lg); } .create-resource-card strong, .create-resource-card span:last-child { text-align: left; } .create-tile-card { min-width: 0; min-height: 132px; display: grid; place-items: center; border: 1px dashed var(--color-border-strong); border-radius: 8px; background: var(--color-surface); color: var(--color-primary); cursor: pointer; padding: 16px; transition: border-color var(--transition-fast), background var(--transition-fast), box-shadow var(--transition-fast); } .create-tile-card:hover:not(:disabled), .create-tile-card:focus-visible { border-color: var(--color-primary); background: var(--color-primary-soft); box-shadow: none; outline: none; } .create-tile-card:disabled { cursor: not-allowed; opacity: 0.58; } .create-tile-plus { position: relative; width: 52px; height: 52px; display: block; border: 1px solid currentColor; border-radius: 14px; } .create-tile-plus::before, .create-tile-plus::after { content: ""; position: absolute; left: 50%; top: 50%; width: 22px; height: 2px; border-radius: 999px; background: currentColor; transform: translate(-50%, -50%); } .create-tile-plus::after { transform: translate(-50%, -50%) rotate(90deg); } .file-card.create-tile-card { grid-template-columns: 1fr; min-height: 164px; } .whiteboard-card.create-tile-card { min-height: 144px; } .service-card { min-height: 140px; border-radius: var(--radius-lg); box-shadow: none; } .service-card:hover, .file-card:hover, .file-card:focus-within { box-shadow: none; transform: none; } .service-card-icon { border-radius: var(--radius-lg); background: var(--color-surface-muted); color: var(--color-text); font-weight: 650; } .settings-list { display: grid; gap: 8px; } .settings-row { width: 100%; min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: 12px; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); padding: 10px 12px; color: var(--color-text); text-align: left; } button.settings-row { cursor: pointer; } button.settings-row:hover { background: var(--color-surface-muted); } .settings-grid, .member-add-row, .invitation-form-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; align-items: end; } .permission-service-block { gap: 8px; padding-top: 12px; border-top: 1px solid var(--color-border); } .permission-grid { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 8px; } .permission-toggle { min-height: 36px; gap: 8px; padding: 7px 9px; border-radius: var(--radius-md); background: var(--color-surface); font-size: var(--font-sm); font-weight: 500; } .permission-toggle input { width: 15px; height: 15px; } .permission-toggle span { min-width: 0; overflow-wrap: anywhere; } .modal-panel:has(.group-editor) { width: min(100%, 920px); } .group-editor { max-height: min(76vh, 760px); overflow-y: auto; min-width: 0; } .group-editor-section { min-width: 0; } .group-editor .member-add-row { grid-template-columns: minmax(160px, 1fr) minmax(160px, 1fr) auto; align-items: end; } .group-editor .table-wrap { max-width: 100%; overflow-x: auto; } .group-editor .permission-grid { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); } .group-editor-footer { position: sticky; bottom: 0; z-index: 1; margin: 0 calc(var(--space-4) * -1) calc(var(--space-4) * -1); padding: var(--space-3) var(--space-4); border-top: 1px solid var(--color-border); background: var(--color-surface); } .danger-section { border: 1px solid rgba(201, 42, 42, 0.28); border-radius: var(--radius-md); background: var(--color-danger-soft); padding: 14px; } @media (max-width: 980px) { .shell-layout, .shell-layout:has(.shell-sidebar.is-collapsed) { grid-template-columns: 1fr; } .shell-sidebar, .shell-sidebar.is-collapsed { width: auto; } } @media (max-width: 760px) { .modal-backdrop { padding: 12px; } .modal-form, .create-step, .group-editor { padding: 16px; } .group-editor .member-add-row { grid-template-columns: 1fr; } .group-editor-footer { margin: 0 -16px -16px; padding: 12px 16px; } .shell-topbar { min-height: auto; padding: 10px 12px; } .shell-user-actions { justify-content: flex-end; } .profile-link-copy { display: none; } .shell-content, .dashboard-content { width: 100%; padding: 18px 14px 28px; } .page-header-row, .section-header { flex-direction: column; } .page-header-actions, .modal-actions, .settings-actions, .row-actions { justify-content: flex-start; } .resource-grid, .resource-grid-compact, .resource-grid-services { grid-template-columns: 1fr; } .resource-card, .create-resource-card { min-height: 120px; } } /* Targeted fixes: full-width shell, service icons, settings services, tasks table */ .shell-layout { width: 100%; min-height: 100vh; display: flex; grid-template-columns: none; align-items: stretch; } .shell-layout:has(.shell-sidebar.is-collapsed) { grid-template-columns: none; } .shell-sidebar { flex: 0 0 236px; width: 236px; } .shell-sidebar.is-collapsed { flex-basis: 68px; width: 68px; } .shell-main-column { flex: 1 1 auto; width: 100%; min-width: 0; } .shell-topbar, .shell-content { width: 100%; min-width: 0; } .shell-content, .dashboard-content { max-width: none; width: 100%; margin: 0; } .shell-content:has(.files-explorer), .shell-content:has(.office-editor-shell), .shell-content:has(.tasks-section), .shell-content:has(.kanban-board), .shell-content:has(.gantt-section), .shell-content:has(.whiteboard-page), .shell-content:has(.whiteboard-editor-shell) { width: 100%; max-width: none; } .dashboard-layout { width: 100%; } .dashboard-main-column, .dashboard-content { min-width: 0; } .service-svg-icon { width: 18px; height: 18px; display: block; flex: 0 0 auto; } .shell-nav-icon { color: inherit; } .shell-nav-icon .service-svg-icon { width: 19px; height: 19px; } .service-card-icon .service-svg-icon, .settings-service-icon .service-svg-icon, .file-card-icon .service-svg-icon, .create-type-icon .service-svg-icon { width: 20px; height: 20px; } .service-tone-files { --service-icon-bg: #fef3c7; --service-icon-color: #a16207; --service-icon-border: #fde68a; } .service-tone-documents { --service-icon-bg: #dbeafe; --service-icon-color: #2563eb; --service-icon-border: #bfdbfe; } .service-tone-sheets { --service-icon-bg: #dcfce7; --service-icon-color: #15803d; --service-icon-border: #bbf7d0; } .service-tone-presentations { --service-icon-bg: #ffedd5; --service-icon-color: #c2410c; --service-icon-border: #fed7aa; } .service-tone-tasks { --service-icon-bg: #ede9fe; --service-icon-color: #6d28d9; --service-icon-border: #ddd6fe; } .service-tone-kanban { --service-icon-bg: #e0e7ff; --service-icon-color: #4f46e5; --service-icon-border: #c7d2fe; } .service-tone-gantt { --service-icon-bg: #cffafe; --service-icon-color: #0891b2; --service-icon-border: #a5f3fc; } .service-tone-whiteboard { --service-icon-bg: #f3e8ff; --service-icon-color: #7e22ce; --service-icon-border: #e9d5ff; } .service-tone-file, .service-tone-default { --service-icon-bg: #f1f5f9; --service-icon-color: #475569; --service-icon-border: #e2e8f0; } .shell-nav-services { border-top: 1px solid var(--color-border); } .service-card { min-height: 132px; grid-template-columns: 40px minmax(0, 1fr); grid-template-rows: auto 1fr; gap: 10px 12px; padding: 14px; } .service-card-icon { width: 40px; height: 40px; border-color: var(--service-icon-border, var(--color-border)); background: var(--service-icon-bg, var(--color-surface-muted)); color: var(--service-icon-color, var(--color-text-muted)); } .service-card-content { min-width: 0; display: grid; gap: 8px; } .service-card-title-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; } .service-card-title-row h3 { min-width: 0; overflow-wrap: anywhere; } .service-card-content p { display: -webkit-box; overflow: hidden; color: var(--color-text-muted); font-size: var(--font-sm); line-height: 1.4; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .service-card-meta { color: var(--color-text-muted); font-size: var(--font-xs); } .service-card-actions { grid-column: 1 / -1; } .settings-service-list { display: grid; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); overflow: hidden; } .settings-service-head, .settings-service-row { display: grid; grid-template-columns: minmax(280px, 1.4fr) minmax(110px, 0.45fr) minmax(150px, 0.55fr) minmax(180px, auto); gap: 12px; align-items: center; } .settings-service-head { padding: 9px 14px; border-bottom: 1px solid var(--color-border); background: var(--color-surface-muted); color: var(--color-text-muted); font-size: var(--font-xs); font-weight: 650; } .settings-service-row { padding: 12px 14px; border-bottom: 1px solid var(--color-border); } .settings-service-row:last-child { border-bottom: 0; } .settings-service-main, .service-picker-main { min-width: 0; display: flex; align-items: flex-start; gap: 10px; } .settings-service-main strong { display: block; font-weight: 650; } .settings-service-main p { margin-top: 2px; display: -webkit-box; overflow: hidden; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .settings-service-icon { width: 34px; height: 34px; display: inline-grid; place-items: center; flex: 0 0 auto; border: 1px solid var(--service-icon-border, var(--color-border)); border-radius: var(--radius-md); background: var(--service-icon-bg, var(--color-surface-muted)); color: var(--service-icon-color, var(--color-text-muted)); } .settings-service-scopes { color: var(--color-text-muted); font-size: var(--font-sm); } .settings-service-actions { display: flex; justify-content: flex-end; gap: 8px; white-space: nowrap; } .service-picker-row { grid-template-columns: minmax(0, 1fr) auto auto; } .tasks-section { width: 100%; min-width: 0; } .tasks-filter-bar { width: 100%; } .tasks-table-wrap { width: 100%; overflow-x: auto; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); } .tasks-table { width: 100%; min-width: 1080px; table-layout: fixed; } .tasks-col-title { width: auto; } .tasks-col-status { width: 142px; } .tasks-col-priority { width: 132px; } .tasks-col-assignee { width: 172px; } .tasks-col-date { width: 132px; } .tasks-col-actions { width: 118px; } .tasks-table th, .tasks-table td { padding: 11px 14px; vertical-align: middle; } .tasks-table th, .tasks-table td { min-width: 0; overflow: hidden; } .task-title-cell { min-width: 0; } .task-title-cell strong { display: block; font-weight: 650; overflow: hidden; text-overflow: ellipsis; word-break: break-word; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .task-title-cell small { display: block; margin-top: 3px; color: var(--color-text-muted); font-size: var(--font-xs); line-height: 1.35; overflow: hidden; text-overflow: ellipsis; word-break: break-word; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .task-badge-cell .ui-badge, .task-date-cell, .task-assignee-cell { white-space: nowrap; } .task-assignee-cell, .task-date-cell { overflow: hidden; text-overflow: ellipsis; } .tasks-table tbody tr { cursor: pointer; } .tasks-table tbody tr:hover { background: #fbfcfd; } .tasks-table th:last-child, .tasks-table td:last-child { text-align: right; } .tasks-table .row-actions { justify-content: flex-end; flex-wrap: nowrap; } @media (max-width: 980px) { .shell-layout, .shell-layout:has(.shell-sidebar.is-collapsed) { display: block; } .shell-sidebar, .shell-sidebar.is-collapsed { width: auto; } .settings-service-head { display: none; } .settings-service-row { grid-template-columns: 1fr; align-items: start; } .settings-service-actions { justify-content: flex-start; } .service-picker-row { grid-template-columns: 1fr; } } /* Profile page refresh */ .profile-page { width: min(100%, 1040px); display: block; } .profile-layout { display: grid; grid-template-columns: minmax(260px, 320px) minmax(0, 1fr); gap: 18px; align-items: start; } .profile-card, .profile-panel { border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); box-shadow: none; } .profile-card { display: grid; gap: 14px; padding: 18px; } .profile-avatar-section { display: grid; gap: 10px; justify-items: start; } .profile-avatar { width: 72px; height: 72px; display: inline-flex; align-items: center; justify-content: center; overflow: hidden; border-radius: 18px; border: 1px solid var(--color-border); background: var(--color-surface-muted); color: var(--color-accent); font-size: 1.35rem; font-weight: 750; letter-spacing: 0; } .profile-avatar-actions { display: flex; flex-wrap: wrap; gap: 8px; } .profile-avatar-error { margin: 0; font-size: var(--font-sm); } .profile-card-copy { display: grid; gap: 4px; } .profile-card-copy h2 { margin: 0; color: var(--color-text); font-size: 1.35rem; line-height: var(--line-tight); } .profile-card-copy p { margin: 0; color: var(--color-text-muted); overflow-wrap: anywhere; } .profile-meta-list { display: grid; gap: 8px; margin: 0; padding-top: 12px; border-top: 1px solid var(--color-border); } .profile-meta-list div { display: flex; justify-content: space-between; gap: 12px; } .profile-meta-list dt, .profile-meta-list dd { margin: 0; font-size: var(--font-sm); } .profile-meta-list dt { color: var(--color-text-muted); } .profile-meta-list dd { color: var(--color-text); font-weight: 650; text-align: right; } .profile-main { display: grid; gap: 14px; } .profile-panel { display: grid; gap: 14px; padding: 18px; } .profile-panel .section-header { padding: 0; border: 0; } .profile-form { max-width: 560px; gap: 12px; } .profile-form input[readonly] { color: var(--color-text-muted); background: var(--color-surface-muted); cursor: default; } .profile-form-actions { display: flex; justify-content: flex-start; padding-top: 2px; } .profile-session-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 12px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface-muted); } .profile-session-row strong, .profile-session-row p { margin: 0; } .profile-session-row div { display: grid; gap: 3px; } @media (max-width: 860px) { .profile-layout { grid-template-columns: 1fr; } .profile-card { grid-template-columns: auto minmax(0, 1fr); align-items: center; } .profile-avatar-section { align-self: start; } .profile-meta-list { grid-column: 1 / -1; } } @media (max-width: 560px) { .profile-card, .profile-panel { padding: 14px; } .profile-avatar { width: 64px; height: 64px; border-radius: 16px; font-size: 1.15rem; } .profile-session-row { align-items: stretch; flex-direction: column; } } .expandable-description { display: grid; gap: 6px; max-width: 780px; } .expandable-description p { display: -webkit-box; overflow: hidden; white-space: pre-line; -webkit-box-orient: vertical; } .expandable-description-2 p { -webkit-line-clamp: 2; } .expandable-description-3 p { -webkit-line-clamp: 3; } .expandable-description.is-expanded p { display: block; overflow: visible; -webkit-line-clamp: unset; } .expandable-description button { width: fit-content; border: 0; background: transparent; color: var(--color-primary); padding: 0; font-size: var(--font-sm); font-weight: 700; cursor: pointer; } .overview-panel { max-width: none; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); padding: 14px; } .info-list { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 8px; } .info-list div { grid-template-columns: 1fr; gap: 4px; padding: 10px 12px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface-muted); } .info-list dt { color: var(--color-text-muted); font-size: var(--font-xs); } .info-list dd { overflow-wrap: anywhere; } .general-settings-block { max-width: 760px; } .general-settings-form { display: grid; gap: 12px; } .general-settings-form textarea { min-height: 150px; } .form-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; } .resource-card-with-actions { grid-template-columns: 1fr; } .resource-card-main-action { min-width: 0; display: grid; grid-template-columns: 48px minmax(0, 1fr); gap: 12px; align-items: start; border: 0; background: transparent; color: inherit; padding: 0; text-align: left; cursor: pointer; } .resource-card-main-action .resource-card-preview, .resource-card-main-action .resource-card-body { pointer-events: none; } .resource-card h3 { display: -webkit-box; overflow: hidden; overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .resource-card-body p { -webkit-line-clamp: 3; } .resource-card-preview .service-svg-icon { width: 24px; height: 24px; } .resource-card-actions .row-actions { justify-content: flex-start; } .resource-card-with-actions .resource-card-actions { grid-column: 1; padding: 0; justify-content: flex-end; } .file-action-menu-wrap { display: flex; justify-content: flex-end; width: 100%; } .entity-image { width: 48px; height: 48px; display: inline-grid; place-items: center; overflow: hidden; flex: 0 0 auto; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface-muted); color: var(--color-text-muted); } .entity-image img { width: 100%; height: 100%; object-fit: cover; } .entity-image .service-svg-icon { width: 24px; height: 24px; } .entity-image-large { width: 72px; height: 72px; border-radius: 18px; } .entity-image-large .service-svg-icon { width: 34px; height: 34px; } .entity-image-block { max-width: 760px; } .entity-image-editor { display: flex; gap: 14px; align-items: flex-start; } .entity-image-controls { min-width: 0; display: grid; gap: 8px; } .overview-start { gap: 14px; } .overview-hero, .overview-card { border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); } .overview-hero { display: flex; gap: 14px; align-items: flex-start; padding: 16px; } .overview-hero-content { min-width: 0; display: grid; gap: 8px; } .overview-hero-content h3 { font-size: var(--font-lg); overflow-wrap: anywhere; } .overview-badges, .quick-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; } .overview-grid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(260px, 0.8fr); gap: 12px; } .overview-card-wide { overflow: hidden; } .compact-section-header { align-items: flex-start; gap: 10px; } .overview-card { display: grid; gap: 12px; padding: 14px; } .overview-card h3 { font-size: var(--font-md); } .overview-service-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px; } .overview-service-row { min-width: 0; display: flex; align-items: flex-start; gap: 10px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface); color: var(--color-text); padding: 10px; text-align: left; cursor: default; } .overview-service-row span:last-child { min-width: 0; display: grid; gap: 2px; } .overview-service-row strong, .overview-service-row small { overflow: hidden; text-overflow: ellipsis; } .overview-service-row small { display: -webkit-box; color: var(--color-text-muted); font-size: var(--font-xs); line-height: 1.35; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .active-participant-list { display: grid; gap: 8px; } .active-participant-row { min-width: 0; display: grid; grid-template-columns: 36px minmax(0, 1fr) auto; gap: 10px; align-items: center; border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 8px; } .participant-avatar { width: 36px; height: 36px; display: grid; place-items: center; border-radius: 50%; background: #eef3f7; color: var(--color-text); font-size: var(--font-xs); font-weight: 700; overflow: hidden; } .participant-avatar img { width: 100%; height: 100%; object-fit: cover; } .active-participant-row span:nth-child(2) { min-width: 0; display: grid; gap: 2px; } .active-participant-row strong, .active-participant-row small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .active-participant-row small { color: var(--color-text-muted); font-size: var(--font-xs); } .presence-badge { border: 1px solid var(--color-border); border-radius: 999px; padding: 4px 8px; color: var(--color-text-muted); font-size: var(--font-xs); white-space: nowrap; } .presence-badge.is-online { border-color: #b7e4c7; background: #eefaf1; color: #1f7a3f; } .presence-badge.is-recent { background: #f7f8f9; } .member-name-row { display: inline-flex; align-items: center; gap: 7px; } .presence-dot { width: 8px; height: 8px; flex: 0 0 auto; border-radius: 50%; background: #c8d0d8; } .presence-dot.is-online { background: #2fb463; box-shadow: 0 0 0 3px rgba(47, 180, 99, 0.12); } .recent-materials-carousel { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(220px, 260px); gap: 12px; overflow-x: auto; padding: 2px 2px 8px; scroll-snap-type: x proximity; } .recent-materials-carousel .file-card { min-width: 0; scroll-snap-align: start; } .recent-material-card { width: 100%; } @media (max-width: 760px) { .info-list { grid-template-columns: 1fr; } .general-settings-block { max-width: none; } .resource-card-main-action { grid-template-columns: 44px minmax(0, 1fr); } .entity-image-editor, .overview-hero { flex-direction: column; } .overview-grid, .overview-service-list { grid-template-columns: 1fr; } .active-participant-row { grid-template-columns: 32px minmax(0, 1fr); } .active-participant-row .presence-badge { grid-column: 2; justify-self: flex-start; } .recent-materials-carousel { grid-auto-columns: minmax(210px, 84vw); } }