UNPKG

@zeix/ui-element

Version:

UIElement - minimal reactive framework based on Web Components

478 lines (417 loc) 9.65 kB
:root { --content-max-width: 48rem; --breakout-size: 12rem; --space-xxs: 0.2361rem; --space-xs: 0.382rem; --space-s: 0.618rem; --space-m: 1rem; --space-l: 1.618rem; --space-xl: 2.6179rem; --space-xxl: 4.2358rem; --font-size-xs: clamp(0.75rem, 0.125vw + 0.725rem, 0.7813rem); --font-size-s: clamp(0.875rem, 0.25vw + 0.825rem, 0.9375rem); --font-size-m: clamp(1rem, 0.5vw + 0.9rem, 1.125rem); --font-size-l: clamp(1.125rem, 0.75vw + 0.975rem, 1.3125rem); --font-size-xl: clamp(1.3125rem, 1vw + 1.1125rem, 1.5625rem); --font-size-xxl: clamp(1.5rem, 1.5vw + 1.2rem, 1.875rem); --font-size-xxxl: clamp(1.75rem, 2vw + 1.35rem, 2.25rem); --line-height-xs: 1; --line-height-s: 1.2; --line-height-m: 1.414; --line-height-l: 1.618; --color-white: white; --color-black: black; --color-gray-10: #f6f7f8; --color-gray-20: #ebeef0; --color-gray-30: #dee3e5; --color-gray-40: #cfd4d8; --color-gray-50: #bdc3c7; --color-gray-60: #a8adb1; --color-gray-70: #8e9295; --color-gray-80: #6d6f71; --color-gray-90: #404142; --color-primary: #325df1; --color-primary-hover: #2144ca; --color-primary-active: #18338f; --color-secondary: var(--color-gray-20); --color-secondary-hover: var(--color-gray-30); --color-secondary-active: var(--color-gray-40); --color-selection: #1ea9ea; --color-error: #c83c15; --color-error-hover: #a32a07; --color-error-active: #792109; --color-success: #417f11; --color-success-hover: #2e6400; --color-success-active: #234905; --color-input: var(--color-white); --color-background: var(--color-gray-10); --color-background-alt: var(--color-gray-20); --color-border: var(--color-gray-50); --color-text: var(--color-black); --color-text-soft: var(--color-gray-80); --color-text-inverted: var(--color-white); --font-family-sans: "Helvetica Neue", Arial, Roboto, sans-serif; --font-family-mono: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; --font-weight-regular: 400; --font-weight-bold: 700; --opacity-transparent: 0; --opacity-translucent: 0.4; --opacity-dimmed: 0.8; --opacity-solid: 1; --transition-short: 0.2s; --transition-medium: 0.5s; --transition-long: 1.25s; --easing-linear: linear; --easing-in: ease-in; --easing-out: ease-out; --easing-inout: ease-in-out; --input-height: 2rem; } @media screen and (min-width: 45em) and (max-width: 75em) { :root { --font-size-xs: clamp(0.7813rem, 0.1042vw + 0.7344rem, 0.8125rem); --font-size-s: clamp(0.9375rem, 0.2083vw + 0.8438rem, 1rem); --font-size-m: clamp(1.125rem, 0.4167vw + 0.9375rem, 1.25rem); --font-size-l: clamp(1.3125rem, 0.8333vw + 0.9375rem, 1.5625rem); --font-size-xl: clamp(1.5625rem, 1.4583vw + 0.9063rem, 2rem); --font-size-xxl: clamp(1.875rem, 2.0833vw + 0.9375rem, 2.5rem); --font-size-xxxl: clamp(2.25rem, 2.9167vw + 0.9375rem, 3.125rem); } } /* @media screen and (min-width: 75em) and (max-width: 125em) { :root { --font-size-xs: clamp(0.8125rem, 0.0694vw + 0.7604rem, 0.8438rem); --font-size-s: clamp(1rem, 0.2778vw + 0.7917rem, 1.125rem); --font-size-m: clamp(1.25rem, 0.5556vw + 0.8333rem, 1.5rem); --font-size-l: clamp(1.5625rem, 0.9722vw + 0.8333rem, 2rem); --font-size-xl: clamp(2rem, 1.8056vw + 0.6458rem, 2.8125rem); --font-size-xxl: clamp(2.5rem, 2.7778vw + 0.4167rem, 3.75rem); --font-size-xxxl: clamp(3.125rem, 4.1667vw, 5rem); } } */ @media (prefers-color-scheme: dark) { :root { --color-gray-10: #e6e8e8; --color-gray-20: #ccd2d2; --color-gray-30: #b1bbbc; --color-gray-40: #98a4a5; --color-gray-50: #7f8c8d; --color-gray-60: #677374; --color-gray-70: #505959; --color-gray-80: #383c3d; --color-gray-90: #1c1e1e; --color-input: var(--color-black); --color-background: var(--color-gray-90); --color-background-alt: var(--color-gray-80); --color-primary: #4f7cfd; --color-primary-hover: #779cf9; --color-primary-active: #a5bbf1; --color-secondary: var(--color-gray-80); --color-secondary-hover: var(--color-gray-70); --color-secondary-active: var(--color-gray-60); --color-error: #e55a32; --color-error-hover: #f7805d; --color-error-active: #fdab92; --color-success: #5d9934; --color-success-hover: #80b261; --color-success-active: #aaca95; --color-text: var(--color-white); --color-text-soft: var(--color-gray-20); --color-text-inverted: var(--color-black); } } @media (prefers-reduced-transparency) { :root { --opacity-translucent: 0.7; --opacity-dimmed: 0.9; } } html { -webkit-text-size-adjust: 100%; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4; font-family: var(--font-family-sans); scroll-padding-top: var(--space-xl); scroll-behavior: smooth; } input, textarea, button, select, option, optgroup { font-family: var(--font-family-sans); } body { padding: 0; margin: 0; line-height: inherit; color: var(--color-text); background: var(--color-background); } *:focus-visible { outline: none; box-shadow: 0 0 var(--space-xxs) 2px var(--color-selection); } ::selection { background-color: color-mix( in srgb, var(--color-selection) 50%, transparent ); } h1 { font-size: var(--font-size-xxxl); line-height: var(--line-height-xs); } h2 { font-size: var(--font-size-xxl); line-height: var(--line-height-s); } h3 { font-size: var(--font-size-xl); line-height: var(--line-height-s); } h4 { font-size: var(--font-size-l); line-height: var(--line-height-m); } h5 { font-size: var(--font-size-m); line-height: var(--line-height-m); } h6 { font-size: var(--font-size-m); line-height: var(--line-height-m); } p, li, th, td, dt, dd, pre, input { font-size: var(--font-size-m); line-height: var(--line-height-l); } small { font-size: var(--font-size-s); line-height: var(--line-height-m); } dl { display: grid; grid-template-columns: auto 1fr; gap: var(--space-s) var(--space-m); dt { font-weight: var(--font-weight-bold); color: var(--color-text-soft); } dd { margin: 0; } } details[open] summary { margin-block-end: var(--space-m); } header { margin-block: var(--space-xl); h1 { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-m); } ol { display: grid; list-style: none; gap: var(--space-s); margin-block: var(--space-l); grid-template-columns: 1fr; padding: 0; } li { padding: 0; margin: 0; } a { display: grid; grid-template-areas: "icon title" "icon description"; grid-template-columns: auto 1fr; grid-template-rows: auto 1fr; gap: var(--space-xs) var(--space-s); padding: var(--space-m); height: calc(100% - 2 * var(--space-m)); color: var(--color-text); text-decoration: none; &:hover, &:focus { background-color: var(--color-secondary-hover); } &.active { background-color: var(--color-background-alt); } .icon { grid-area: icon; display: flex; align-items: center; justify-content: center; font-size: var(--font-size-l); width: var(--space-xl); height: var(--space-xl); border-radius: 50%; background-color: var(--color-background); border: 1px solid var(--color-border); } strong { grid-area: title; font-size: var(--font-size-m); line-height: var(--line-height-s); margin: 0; } small { grid-area: description; font-size: var(--font-size-s); line-height: var(--line-height-m); margin: 0; color: var(--color-text-soft); } } } @media screen and (min-width: 32em) and (max-width: 48em) { header ol { grid-template-columns: 1fr 1fr; gap: var(--space-m); } } @media screen and (min-width: 48em) { header ol { grid-template-columns: 1fr 1fr 1fr; gap: var(--space-l); } } .content-grid, main { display: grid; grid-template-columns: [fullwidth-start] minmax(var(--space-l), 1fr) [breakout-start] minmax(0, var(--breakout-size)) [content-start] min( var(--content-max-width), calc(100% - 2 * var(--space-l)) ) [content-end] minmax(0, var(--breakout-size)) [breakout-end] minmax(var(--space-l), 1fr) [fullwidth-end]; > .content, > section { grid-column: content; } .breakout { grid-column: breakout; } } section { margin-block: var(--space-xl); &.hero { grid-column: fullwidth; display: grid; grid-template-columns: inherit; background-color: var(--color-primary); color: var(--color-white); margin-block: 0; padding-block: var(--space-xxl); h1 { grid-column: content; margin-bottom: var(--space-xl); } .lead { grid-column: content; font-size: var(--font-size-l); } } h3 { margin-block-start: var(--space-xl); margin-block-end: var(--space-l); } } h1, h2, h3, h4, h5, h6, p, ol, ul, dl, table, pre { margin-block-start: 0; margin-block-end: var(--space-l); } ol, ul { display: flex; flex-direction: column; gap: var(--space-m); } p code, li code, dt code, dd code, td code { background-color: var(--color-background-alt); border-radius: var(--space-xxs); padding: var(--space-xxs); font-family: var(--font-family-mono); font-size: calc(0.95 * var(--font-size-m)); } h1, h2, h3, h4, h5, h6 { &[id] { display: flex; margin-left: calc(-1 * var(--space-l)); } .anchor { width: var(--space-l); display: inline-block; text-decoration: none; .permalink { visibility: hidden; font-size: var(--font-size-m); } } &:hover { .anchor .permalink { visibility: visible; } } } a[href] { color: var(--color-primary); &:hover { color: var(--color-primary-hover); } &:active { color: var(--color-primary-active); } } [aria-hidden="true"] { display: none; } /* Helper classes */ .visually-hidden { position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden; }