UNPKG

@metropolle/design-system

Version:

Sistema de design unificado para a plataforma Metropolle

439 lines (371 loc) 14.7 kB
/* ============================================ Metropolle Design System - Meridian Flat, zero-border, theme-adaptive (DSC-011 / EPIC-010) (legacy filename liquid-glass.css; tokens repointed to Meridian) ============================================ */ /* ========================= CSS Custom Properties ========================= */ :root { /* ========================= Centralized Theme Variables Use these across all repos ========================= */ /* Typography */ --mds-font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; --mds-font-family-brand: 'Helvetica', 'Inter Tight', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; /* Brand Colors (Meridian: neutraliza roxo/periwinkle do glass; brand-primary mantido) */ --mds-color-brand-primary: #0055FF; --mds-color-brand-secondary: #3A3A42; --mds-color-brand-accent: #2563eb; /* Status Colors (paleta Meridian — prototype-28) */ --mds-color-success: #1a7f4b; --mds-color-warning: #9a6b00; --mds-color-error: #b42318; --mds-color-info: #2563eb; --mds-color-accent: #2563eb; /* ========================= Meridian aliases (--mds-meridian-*) — stable, theme-adaptive handles onto the canonical Meridian short tokens emitted by tokens.css. Consumers may target these without depending on the legacy --mds-liquid-* surface vars. Light defaults; dark override below. ========================= */ --mds-meridian-bg: var(--bg, #FCFCFD); --mds-meridian-panel: var(--panel, #FFFFFF); --mds-meridian-surface: var(--glass, #FFFFFF); --mds-meridian-surface-2: var(--glass-2, #F4F2EE); --mds-meridian-field: var(--field, #F1F2F5); --mds-meridian-ink: var(--ink, #17171C); --mds-meridian-ink-dim: var(--ink-dim, rgba(0, 0, 0, 0.58)); --mds-meridian-accent: var(--accent, #17171C); --mds-meridian-accent-soft: var(--accent-soft, rgba(0, 0, 0, 0.06)); --mds-meridian-on-accent: var(--on-accent, #FFFFFF); --mds-meridian-stroke: var(--stroke, rgba(0, 0, 0, 0.12)); --mds-meridian-radius: var(--r, 2px); --mds-meridian-radius-floating: var(--r-sm, 4px); --mds-meridian-card-shadow: var(--card-shadow, 0 1px 3px rgba(0, 0, 0, 0.05), 0 16px 34px -18px rgba(0, 0, 0, 0.14)); --mds-meridian-card-shadow-sm: var(--card-shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05), 0 6px 16px -12px rgba(0, 0, 0, 0.10)); --mds-meridian-modal-elevation: var(--modal-elevation, 0 18px 44px -22px rgba(0, 0, 0, 0.34), 0 2px 12px rgba(0, 0, 0, 0.08)); --mds-meridian-ok: var(--ok, #1a7f4b); --mds-meridian-info: var(--info, #2563eb); --mds-meridian-warn: var(--warn, #9a6b00); --mds-meridian-bad: var(--bad, #b42318); --mds-meridian-gold: var(--gold, #f5a623); --mds-chart-mono-1: var(--accent, #17171C); --mds-chart-mono-2: rgba(var(--ink-rgb, 23, 23, 28), 0.58); --mds-chart-mono-3: rgba(var(--ink-rgb, 23, 23, 28), 0.36); --mds-chart-mono-4: rgba(var(--ink-rgb, 23, 23, 28), 0.22); --mds-chart-status-ok: var(--ok, #1a7f4b); --mds-chart-status-info: var(--info, #2563eb); --mds-chart-status-warn: var(--warn, #9a6b00); --mds-chart-status-bad: var(--bad, #b42318); --mds-chart-status-arch: var(--arch, #8A8A92); --mds-chart-status-gold: var(--gold, #f5a623); } /* ========================= Dark Theme (Default) ========================= */ :root, html[data-theme="dark"] { /* Meridian semantic colors (DARK) — FEAT-0235 re-point */ --mds-color-text-primary: #F2F0EC; --mds-color-text-secondary: rgba(255, 255, 255, 0.60); --mds-color-text-tertiary: rgba(255, 255, 255, 0.42); --mds-color-background-primary: #0B0B0D; --mds-color-background-secondary: #161619; --mds-color-background-tertiary: #1C1C20; --mds-color-border-default: rgba(255, 255, 255, 0.07); --mds-color-border-light: rgba(255, 255, 255, 0.04); /* Scrollbar */ --mds-scrollbar-track: rgba(40, 40, 40, 0.8); --mds-scrollbar-thumb: rgba(80, 80, 80, 0.8); --mds-scrollbar-thumb-hover: rgba(100, 100, 100, 0.8); /* ========================= Meridian flat tokens (ex-"Liquid Glass") — FEAT-0235 re-point. blur=0, superfícies OPACAS, zero-borda, sombras flat, sem specular/glow. Nomes --mds-liquid-* mantidos (rename = P1b); só os VALORES viram Meridian. ========================= */ /* Blur — Meridian é flat: zero blur */ --mds-liquid-blur-sm: 0px; --mds-liquid-blur-md: 0px; --mds-liquid-blur-lg: 0px; /* Saturate — sem realce */ --mds-liquid-saturate-default: 100%; --mds-liquid-saturate-vibrant: 100%; /* Superfícies — OPACAS (Meridian: distinção por sombra, não transparência) */ --mds-liquid-bg-glass: #1C1C20; --mds-liquid-bg-glass-thick: #1C1C20; --mds-liquid-bg-overlay: rgba(0, 0, 0, 0.62); --mds-liquid-bg-sidebar: #161619; --mds-liquid-bg-navbar: #161619; --mds-liquid-bg-card: #1C1C20; --mds-liquid-bg-input: #202024; --mds-liquid-bg-button: #202024; --mds-liquid-bg-button-hover: #27272C; /* Bordas — zero-borda (transparente; preserva o box-model sem linha visível) */ --mds-liquid-border-subtle: transparent; --mds-liquid-border-default: transparent; --mds-liquid-border-bright: rgba(255, 255, 255, 0.06); /* Sombras Meridian (flat + leve glow interno no escuro) */ --mds-liquid-shadow-raised: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 4px 14px -8px rgba(0, 0, 0, 0.7); --mds-liquid-shadow-floating: 0 16px 36px -18px rgba(0, 0, 0, 0.9), inset 0 1px 0 rgba(255, 255, 255, 0.05); --mds-liquid-shadow-elevated: 0 16px 36px -18px rgba(0, 0, 0, 0.9), inset 0 1px 0 rgba(255, 255, 255, 0.05); --mds-liquid-shadow-dramatic: 0 24px 56px -20px rgba(0, 0, 0, 0.95), inset 0 1px 0 rgba(255, 255, 255, 0.05); --mds-modal-elevation: 0 22px 54px -24px rgba(0, 0, 0, 0.72), 0 0 0 1px rgba(255, 255, 255, 0.05), 0 0 26px rgba(242, 240, 236, 0.10); --mds-chart-mono-1: var(--accent, #F2F0EC); --mds-chart-mono-2: rgba(var(--ink-rgb, 242, 240, 236), 0.60); --mds-chart-mono-3: rgba(var(--ink-rgb, 242, 240, 236), 0.42); --mds-chart-mono-4: rgba(var(--ink-rgb, 242, 240, 236), 0.24); /* Glow/specular — Meridian não usa; no-ops VÁLIDOS em lista de box-shadow / background */ --mds-liquid-glow-edge: 0 0 0 0 transparent; --mds-liquid-glow-soft: 0 0 0 0 transparent; --mds-liquid-specular-intense: linear-gradient(transparent, transparent); /* Transitions (sem transform no hover = regra de classe) */ --mds-liquid-transition: all 0.2s cubic-bezier(0.25, 0.1, 0.25, 1); --mds-liquid-transition-fast: all 0.14s cubic-bezier(0.25, 0.1, 0.25, 1); /* Fundo flat */ --mds-liquid-gradient: #0B0B0D; } /* ========================= Light Theme ========================= */ html[data-theme="light"] { /* Meridian semantic colors (LIGHT) — FEAT-0235 re-point */ --mds-color-text-primary: #17171C; --mds-color-text-secondary: rgba(0, 0, 0, 0.58); --mds-color-text-tertiary: rgba(0, 0, 0, 0.40); --mds-color-background-primary: #FCFCFD; --mds-color-background-secondary: #FFFFFF; --mds-color-background-tertiary: #F1F2F5; --mds-color-border-default: rgba(0, 0, 0, 0.07); --mds-color-border-light: rgba(0, 0, 0, 0.04); /* Scrollbar */ --mds-scrollbar-track: rgba(0, 0, 0, 0.05); --mds-scrollbar-thumb: rgba(0, 0, 0, 0.2); --mds-scrollbar-thumb-hover: rgba(0, 0, 0, 0.3); /* Meridian flat surfaces (LIGHT) — opacas, cards brancos */ --mds-liquid-bg-glass: #FFFFFF; --mds-liquid-bg-glass-thick: #FFFFFF; --mds-liquid-bg-overlay: rgba(0, 0, 0, 0.45); --mds-liquid-bg-sidebar: #FFFFFF; --mds-liquid-bg-navbar: #FCFCFD; --mds-liquid-bg-card: #FFFFFF; --mds-liquid-bg-input: #F1F2F5; --mds-liquid-bg-button: #F1F2F5; --mds-liquid-bg-button-hover: #E9EAEE; /* Bordas — zero-borda */ --mds-liquid-border-subtle: transparent; --mds-liquid-border-default: transparent; --mds-liquid-border-bright: rgba(0, 0, 0, 0.06); /* Sombras Meridian (LIGHT — flat, suaves) */ --mds-liquid-shadow-raised: 0 1px 2px rgba(0, 0, 0, 0.05), 0 6px 16px -12px rgba(0, 0, 0, 0.10); --mds-liquid-shadow-floating: 0 1px 3px rgba(0, 0, 0, 0.05), 0 16px 34px -18px rgba(0, 0, 0, 0.14); --mds-liquid-shadow-elevated: 0 1px 3px rgba(0, 0, 0, 0.05), 0 16px 34px -18px rgba(0, 0, 0, 0.14); --mds-liquid-shadow-dramatic: 0 24px 48px -20px rgba(0, 0, 0, 0.18); --mds-modal-elevation: 0 18px 44px -22px rgba(0, 0, 0, 0.34), 0 2px 12px rgba(0, 0, 0, 0.08); /* Glow/specular — no-ops válidos */ --mds-liquid-glow-edge: 0 0 0 0 transparent; --mds-liquid-glow-soft: 0 0 0 0 transparent; --mds-liquid-specular: linear-gradient(transparent, transparent); --mds-liquid-specular-intense: linear-gradient(transparent, transparent); /* Fundo flat */ --mds-liquid-gradient: #FCFCFD; } /* ============================================================ Meridian flatten (FEAT-0235) — mata o blur de vidro globalmente. Os 21 `backdrop-filter: blur()` hardcoded em components.css NÃO são !important; este reset (!important, importado por último) vence todos. Meridian = flat, sem frosted glass. Superfícies/cores vêm dos tokens já re-pointados acima. (Opacificação fina de superfícies rgba residuais = P1b, polimento pós-ship; o look principal já é Meridian — ver DataTable.) ============================================================ */ *, *::before, *::after { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; } /* ========================= Base surface class — Meridian flat (zero-border, no glass) afford = opaque surface + Meridian shadow; hover = shadow/bg only (NEVER move) ========================= */ .mds-liquid-glass { position: relative; background: var(--mds-liquid-bg-glass); /* Meridian: flat, no backdrop blur */ border: none; border-radius: var(--r, 2px); box-shadow: var(--mds-liquid-shadow-floating); transition: var(--mds-liquid-transition); overflow: hidden; } /* Specular highlight removed (Meridian is flat) — pseudo kept as inert no-op so any descendant z-index assumptions stay intact without painting a halo. */ .mds-liquid-glass::before { content: none; } /* Content stacking preserved */ .mds-liquid-glass > * { position: relative; z-index: 1; } /* Hover state — Meridian: deeper shadow only, no transform, no border */ .mds-liquid-glass:hover { box-shadow: var(--mds-liquid-shadow-elevated); } /* No-hover variant */ .mds-liquid-glass--no-hover, .mds-liquid-glass--no-hover:hover { box-shadow: var(--mds-liquid-shadow-floating); } /* ========================= Size Variants ========================= */ .mds-liquid-glass--xs { border-radius: var(--r, 2px); } .mds-liquid-glass--sm { border-radius: var(--r, 2px); } .mds-liquid-glass--lg { border-radius: var(--r-sm, 4px); } .mds-liquid-glass--xl { border-radius: var(--r-sm, 4px); } /* ========================= Element-Specific Classes ========================= */ /* Navbar */ .mds-liquid-glass--navbar { background: var(--mds-liquid-bg-navbar); border: none; border-radius: 0; box-shadow: var(--mds-liquid-shadow-raised); } .mds-liquid-glass--navbar:hover { box-shadow: var(--mds-liquid-shadow-raised); } /* Sidebar */ .mds-liquid-glass--sidebar { background: var(--mds-liquid-bg-sidebar); border: none; border-radius: 0; box-shadow: var(--mds-liquid-shadow-raised); } /* Card */ .mds-liquid-glass--card { background: var(--mds-liquid-bg-card); border-radius: var(--r, 2px); padding: 1.5rem; } /* Modal — floating surface uses 4px radius */ .mds-liquid-glass--modal { background: var(--mds-liquid-bg-glass-thick); border-radius: var(--r-sm, 4px); box-shadow: var(--mds-modal-elevation, var(--mds-liquid-shadow-dramatic)); } /* Modal Overlay — scrim, no blur */ .mds-liquid-glass--overlay { background: var(--mds-liquid-bg-overlay); border: none; border-radius: 0; box-shadow: none; } /* Input — afford via field fill + focus ring (no border, no blur) */ .mds-liquid-glass--input { background: var(--mds-liquid-bg-input); border-radius: var(--r, 2px); box-shadow: var(--mds-liquid-glow-soft); padding: 0.75rem 1rem; } .mds-liquid-glass--input:focus { box-shadow: 0 0 0 2px var(--mds-color-brand-primary); outline: none; } /* Button — afford via fill; hover = fill change (no move, no border) */ .mds-liquid-glass--button { background: var(--mds-liquid-bg-button); border-radius: var(--r, 2px); box-shadow: var(--mds-liquid-shadow-raised); padding: 0.5rem 1rem; cursor: pointer; transition: var(--mds-liquid-transition-fast); } .mds-liquid-glass--button:hover { background: var(--mds-liquid-bg-button-hover); } .mds-liquid-glass--button:active { box-shadow: var(--mds-liquid-glow-soft); } /* Dropdown — floating surface */ .mds-liquid-glass--dropdown { background: var(--mds-liquid-bg-glass-thick); border-radius: var(--r-sm, 4px); box-shadow: var(--mds-liquid-shadow-elevated); padding: 0.5rem; } /* Table */ .mds-liquid-glass--table { background: var(--mds-liquid-bg-glass); border-radius: var(--r, 2px); overflow: hidden; } /* Footer */ .mds-liquid-glass--footer { background: var(--mds-liquid-bg-navbar); border: none; border-radius: 0; } /* TOC (Table of Contents) */ .mds-liquid-glass--toc { background: var(--mds-liquid-bg-card); border-radius: var(--r, 2px); padding: 1rem; } /* Badge — pill stays pill (radius carries shape semantics), flat fill */ .mds-liquid-glass--badge { background: var(--mds-liquid-bg-button); border-radius: 999px; box-shadow: var(--mds-liquid-shadow-raised); padding: 0.25rem 0.75rem; font-size: 0.75rem; } /* ========================= Background Utilities ========================= */ .mds-liquid-bg-gradient { background: var(--mds-liquid-gradient) !important; background-attachment: fixed !important; } /* ========================= Accessibility ========================= */ /* Reduced motion */ @media (prefers-reduced-motion: reduce) { .mds-liquid-glass, .mds-liquid-glass--button, .mds-liquid-glass--input { transition: none !important; } } /* High contrast */ @media (prefers-contrast: high) { .mds-liquid-glass { background: var(--mds-color-background-secondary) !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; border: 2px solid var(--mds-color-text-primary) !important; } .mds-liquid-glass::before { display: none !important; } } /* ========================= Browser Fallback ========================= */ @supports not (backdrop-filter: blur(1px)) { .mds-liquid-glass { background: var(--mds-color-background-secondary); } }