Files
zeekayandHanzo Dev 985f4a1239 fix(type): the binding is named for the face it holds
A docs-site template repeated across these repos named three different faces in
one place: a binding called `inter` or `geist`, constructed from next/font/google
so it actually held Inter, publishing a custom property called
`--font-geist-sans` that @hanzo/font does not set. Whichever of the three a
reader trusted, two of them were wrong.

They take Zen and ZenMono from @hanzo/font — bindings named `sans` and `mono`
for the role they fill, setting --font-zen-sans and --font-zen-mono, which is
what the package publishes.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 14:10:53 -07:00

2024 lines
44 KiB
CSS

/**
* Hanzo Billing — the whole stylesheet. Plain CSS, no build plugin.
*
* TOKENS AND HANDLES both come from @hanzo/ui/styles.css — mono, tnum, paper,
* row, elevation-1..4, plus @hanzo/design's ladder inlined verbatim (88 tokens,
* byte-identical values). ONE import, ONE home for colour.
*
* ONE token has to be taken back, and only one: --background.
*
* ui/styles.css inlines design's ladder near the top and then, ~160KB later,
* the @hanzogui theme runtime redeclares --background for its own themes —
* `:root.t_dark` -> var(--t8) = hsla(0,0%,8%), `:root.t_light` -> var(--t189)
* = hsla(0,0%,97%) — each with a BARE `:root` fallback beside it, and the
* light block comes last. So with no gui class on <html> the ground is
* near-white in both themes; billing renders #fafafa ink on it and dark mode
* measures 1.03:1.
*
* Re-importing design's colors.css last DOES reclaim it, and that is what
* 1.0.9 shipped — but only while no gui theme class exists on <html>.
* `:root.t_light` is (0,2,0) and design's `.light` is (0,1,0), so the moment
* GuiProvider writes its class gui wins on SPECIFICITY and import order stops
* mattering. Measured, forcing the class on 1.0.9: dark+t_light = 1.03:1,
* light+t_dark = 1.07:1, and even the agreeing pairs drift (t_dark grounds at
* #141414, not #0a0a0a). A fix that depends on a separate bug staying
* unfixed is not a fix.
*
* --page is the durable answer: a name gui never writes at any specificity,
* so nothing can outrank it. It resolves to design's BASE ladder — the rungs
* the runtime does not touch — rather than to a second hex. Verified in all
* four combinations of {dark,light} x {gui class, none}; the ground holds at
* 18.97:1 / 19.80:1 in every one. Matches hanzo.industries, which hit this
* first; the estate has one downstream answer, not three.
*
* Only --background needs this. Every other token billing reads —
* --foreground, --card, --accent, --border*, --primary*, --text-*, --state-*
* — was measured unchanged with the gui classes forced on, so they still come
* straight from ui's inlined ladder and are NOT restated here.
*
* Removable once @hanzo/ui 8.0.48 lands: it stops ui/gui shadowing design's
* --background/--black/--white, after which --page can go back to being
* var(--background) and then disappear.
*
* Dark is the default (:root is the dark palette) and `.light` retunes it,
* which is exactly what this app's html.light toggle adds. So the aliases below
* are ONE ink and ONE ground: each names a design token and nothing more, and
* the light flip happens because the token underneath changed, not because a
* second set of literals got restated here and drifted.
*
* Design publishes FINISHED colours — hex, and `rgb(255 255 255 / .10)` alpha
* hairlines. Consume them as `var(--x)`. `hsl(var(--x))` is invalid at
* computed-value time and the browser drops the whole declaration silently.
*
* FONTS are the one thing @hanzo/ui does NOT carry, deliberately: 8.0.47 dropped
* its @font-face because it duplicated design's and pointed at assets ui does
* not ship. ui only NAMES the faces — `.mono` is `font-family:'Zen Mono',
* ui-monospace,...` — so whoever renders must declare them, and design's
* fonts.css is where they are declared, with urls relative to the package and
* the two woff2 files alongside (SIL OFL-1.1). Miss that import and nothing
* fails: the build is green, gui-css-check is green, and every money figure
* quietly falls back to ui-monospace. Still monospace, still tabular, wrong
* face, and no screenshot catches it.
*
* Everything below the reset is the exact utility vocabulary this app's markup
* uses, written as ordinary rules. Order is load-bearing in two places, both of
* which mirror how the classes are actually composed: `.leading-*` sorts after
* `.text-*`, and `.border-dashed` after the border-width utilities, so the more
* specific intent wins without any class-merging pass at runtime.
*/
@import '@hanzo/ui/styles.css';
@import '@hanzo/design/tokens/fonts.css';
/* ── tokens ──────────────────────────────────────────────────────────────── */
:root {
/* The page surface. See the header: gui redeclares --background out from
under us at a specificity we cannot outrank, so the ground reads a name gui
never writes. --neutral-950 IS design's dark ground (#0A0A0A — the same
value --background carries), and it is declared exactly once in the whole
delivered sheet, so no theme runtime can move it. */
--page: var(--neutral-950);
/* Brand — the primary-button triple (`bg-brand` + `text-brand-foreground` +
`hover:bg-brand-hover`, 52 uses between them). It maps to design's PRIMARY
family, not its --brand family: --primary is the ink of the current theme
and inverts with everything else, while --brand is a fixed accent that does
not restate under `.light`. Mapping the base to --brand and only the hover
to --primary-hover — which is what this file did — gave a light-grey button
on a white page whose hover was one shade off itself. Muted is the same ink
at 10%, derived rather than restated, so it inverts for free. */
--color-brand: var(--primary);
--color-brand-foreground: var(--primary-foreground);
--color-brand-hover: var(--primary-hover);
--color-brand-muted: color-mix(in oklab, var(--primary) 10%, transparent);
/* Semantic surfaces and text. The two that were --background read --page;
card and elevated keep their design tokens, which gui leaves alone. */
--color-bg: var(--page);
--color-bg-card: var(--card);
--color-bg-elevated: var(--accent);
--color-bg-input: var(--page);
--color-border: var(--border);
--color-border-strong: var(--border-strong);
--color-text: var(--foreground);
--color-text-secondary: var(--text-secondary);
--color-text-muted: var(--text-tertiary);
--color-text-dim: var(--text-disabled);
/* Status — error/success come from design; warning/info have no design token
yet, so the literals stay until the ladder grows them. */
--color-success: var(--state-success);
--color-warning: #f59e0b;
--color-danger: var(--state-error);
--color-info: #3b82f6;
}
/* The light ground. --pure-white is design's own #FFFFFF and, like
--neutral-950, is declared once in the delivered sheet — the gui runtime
never restates either, which is exactly why the ground reads them. */
.light {
--page: var(--pure-white);
}
html {
scrollbar-gutter: stable;
}
/* ── reset ───────────────────────────────────────────────────────────────── */
*, ::after, ::before, ::backdrop, ::file-selector-button {
box-sizing: border-box;
margin: 0;
padding: 0;
border: 0 solid;
}
html, :host {
line-height: 1.5;
-webkit-text-size-adjust: 100%;
tab-size: 4;
font-family: var(--font-sans, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
-webkit-tap-highlight-color: transparent;
}
hr {
height: 0;
color: inherit;
border-top-width: 1px;
}
abbr:where([title]) {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
}
h1, h2, h3, h4, h5, h6 {
font-size: inherit;
font-weight: inherit;
}
a {
color: inherit;
-webkit-text-decoration: inherit;
text-decoration: inherit;
}
b, strong {
font-weight: bolder;
}
code, kbd, samp, pre {
font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
font-size: 1em;
}
small {
font-size: 80%;
}
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
table {
text-indent: 0;
border-color: inherit;
border-collapse: collapse;
}
:-moz-focusring {
outline: auto;
}
progress {
vertical-align: baseline;
}
summary {
display: list-item;
}
ol, ul, menu {
list-style: none;
}
img, svg, video, canvas, audio, iframe, embed, object {
display: block;
vertical-align: middle;
}
img, video {
max-width: 100%;
height: auto;
}
button, input, select, optgroup, textarea, ::file-selector-button {
font: inherit;
font-feature-settings: inherit;
font-variation-settings: inherit;
letter-spacing: inherit;
color: inherit;
border-radius: 0;
background-color: transparent;
opacity: 1;
}
:where(select:is([multiple], [size])) optgroup {
font-weight: bolder;
}
:where(select:is([multiple], [size])) optgroup option {
padding-inline-start: 20px;
}
::file-selector-button {
margin-inline-end: 4px;
}
::placeholder {
opacity: 1;
}
@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
::placeholder {
color: currentcolor;
@supports (color: color-mix(in lab, red, red)) {
color: color-mix(in oklab, currentcolor 50%, transparent);
}
}
}
textarea {
resize: vertical;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-date-and-time-value {
min-height: 1lh;
text-align: inherit;
}
::-webkit-datetime-edit {
display: inline-flex;
}
::-webkit-datetime-edit-fields-wrapper {
padding: 0;
}
::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
padding-block: 0;
}
::-webkit-calendar-picker-indicator {
line-height: 1;
}
:-moz-ui-invalid {
box-shadow: none;
}
button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
appearance: button;
}
::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
height: auto;
}
[hidden]:where(:not([hidden="until-found"])) {
display: none !important;
}
/* ── page ────────────────────────────────────────────────────────────────── */
body {
background-color: var(--color-bg);
color: var(--color-text);
}
::selection {
background-color: color-mix(in oklab, var(--color-text) 20%, transparent);
color: var(--color-text);
}
/* Theme toggle paints a transition class on <html> for the duration of a flip. */
html.transitioning,
html.transitioning *,
html.transitioning *::before,
html.transitioning *::after {
transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease !important;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
@keyframes pulse {
50% {
opacity: 0.5;
}
}
/* ── Apple Pay ───────────────────────────────────────────────────────────── */
/* The mark is WebKit's own (-webkit-appearance), never a hand-drawn logo, and
the element stays empty. Only rendered when ApplePaySession says the device
can pay AND Square accepted this origin — which is Safari, the one engine
that implements the appearance. Sized to the sheet's generic submit (40px,
radius 8) so the two states of the pay action share one control scale.
Wallet style follows the ground: white mark on the dark theme, black on
light — the same inversion the brand pair makes. */
.apple-pay-button {
-webkit-appearance: -apple-pay-button;
-apple-pay-button-type: pay;
-apple-pay-button-style: white;
width: 100%;
height: 40px;
border-radius: 8px;
margin-top: 4px;
cursor: pointer;
}
.apple-pay-button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.light .apple-pay-button {
-apple-pay-button-style: black;
}
/* ── utilities ───────────────────────────────────────────────────────────── */
.pointer-events-none {
pointer-events: none;
}
.absolute {
position: absolute;
}
.fixed {
position: fixed;
}
.relative {
position: relative;
}
.static {
position: static;
}
.sticky {
position: sticky;
}
.inset-0 {
inset: 0;
}
.inset-y-0 {
inset-block: 0;
}
.start {
inset-inline-start: 0.25rem;
}
.end {
inset-inline-end: 0.25rem;
}
.-top-3 {
top: -0.75rem;
}
.-top-12 {
top: -3rem;
}
.-top-px {
top: -1px;
}
.top-1\/2 {
top: 50%;
}
.right-0 {
right: 0;
}
.left-0 {
left: 0;
}
.left-1\/2 {
left: 50%;
}
.left-3 {
left: 0.75rem;
}
.left-4 {
left: 1rem;
}
.z-40 {
z-index: 40;
}
.z-50 {
z-index: 50;
}
.container {
width: 100%;
@media (width >= 40rem) {
max-width: 40rem;
}
@media (width >= 48rem) {
max-width: 48rem;
}
@media (width >= 64rem) {
max-width: 64rem;
}
@media (width >= 80rem) {
max-width: 80rem;
}
@media (width >= 96rem) {
max-width: 96rem;
}
}
.mx-auto {
margin-inline: auto;
}
.my-2 {
margin-block: 0.5rem;
}
.mt-0\.5 {
margin-top: 0.125rem;
}
.mt-1 {
margin-top: 0.25rem;
}
.mt-1\.5 {
margin-top: 0.375rem;
}
.mt-2 {
margin-top: 0.5rem;
}
.mt-3 {
margin-top: 0.75rem;
}
.mt-4 {
margin-top: 1rem;
}
.mt-5 {
margin-top: 1.25rem;
}
.mt-6 {
margin-top: 1.5rem;
}
.mb-0\.5 {
margin-bottom: 0.125rem;
}
.mb-1 {
margin-bottom: 0.25rem;
}
.mb-2 {
margin-bottom: 0.5rem;
}
.mb-3 {
margin-bottom: 0.75rem;
}
.mb-4 {
margin-bottom: 1rem;
}
.mb-5 {
margin-bottom: 1.25rem;
}
.mb-6 {
margin-bottom: 1.5rem;
}
.mb-8 {
margin-bottom: 2rem;
}
.ml-1 {
margin-left: 0.25rem;
}
.block {
display: block;
}
.flex {
display: flex;
}
.grid {
display: grid;
}
.hidden {
display: none;
}
.inline {
display: inline;
}
.inline-block {
display: inline-block;
}
.inline-flex {
display: inline-flex;
}
.table {
display: table;
}
.h-1\.5 {
height: 0.375rem;
}
.h-2 {
height: 0.5rem;
}
.h-3 {
height: 0.75rem;
}
.h-4 {
height: 1rem;
}
.h-5 {
height: 1.25rem;
}
.h-6 {
height: 1.5rem;
}
.h-7 {
height: 1.75rem;
}
.h-8 {
height: 2rem;
}
.h-10 {
height: 2.5rem;
}
.h-14 {
height: 3.5rem;
}
.h-32 {
height: 8rem;
}
.h-full {
height: 100%;
}
.h-px {
height: 1px;
}
.max-h-40 {
max-height: 10rem;
}
.max-h-72 {
max-height: 18rem;
}
.min-h-screen {
min-height: 100vh;
}
.w-3\/4 {
width: 75%;
}
.w-4 {
width: 1rem;
}
.w-5 {
width: 1.25rem;
}
.w-5\/6 {
width: 83.3333%;
}
.w-6 {
width: 1.5rem;
}
.w-7 {
width: 1.75rem;
}
.w-8 {
width: 2rem;
}
.w-11 {
width: 2.75rem;
}
.w-12 {
width: 3rem;
}
.w-14 {
width: 3.5rem;
}
.w-20 {
width: 5rem;
}
.w-24 {
width: 6rem;
}
.w-32 {
width: 8rem;
}
.w-60 {
width: 15rem;
}
.w-64 {
width: 16rem;
}
.w-full {
width: 100%;
}
.max-w-4xl {
max-width: 56rem;
}
.max-w-5xl {
max-width: 64rem;
}
.max-w-lg {
max-width: 32rem;
}
.max-w-md {
max-width: 28rem;
}
.min-w-0 {
min-width: 0;
}
.min-w-\[160px\] {
min-width: 160px;
}
.min-w-\[200px\] {
min-width: 200px;
}
.min-w-\[250px\] {
min-width: 250px;
}
.min-w-\[640px\] {
min-width: 640px;
}
.min-w-\[720px\] {
min-width: 720px;
}
.flex-1 {
flex: 1;
}
.flex-shrink-0 {
flex-shrink: 0;
}
.shrink-0 {
flex-shrink: 0;
}
.-translate-x-1\/2 {
translate: -50%;
}
.translate-x-1 {
translate: 0.25rem;
}
.translate-x-6 {
translate: 1.5rem;
}
.-translate-y-1\/2 {
translate: 0 -50%;
}
.rotate-180 {
rotate: 180deg;
}
.animate-pulse {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
.animate-spin {
animation: spin 1s linear infinite;
}
.cursor-not-allowed {
cursor: not-allowed;
}
.cursor-pointer {
cursor: pointer;
}
.cursor-wait {
cursor: wait;
}
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
.grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.flex-col {
flex-direction: column;
}
.flex-wrap {
flex-wrap: wrap;
}
.items-center {
align-items: center;
}
.items-end {
align-items: flex-end;
}
.items-start {
align-items: flex-start;
}
.justify-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
.gap-0\.5 {
gap: 0.125rem;
}
.gap-1 {
gap: 0.25rem;
}
.gap-1\.5 {
gap: 0.375rem;
}
.gap-2 {
gap: 0.5rem;
}
.gap-2\.5 {
gap: 0.625rem;
}
.gap-3 {
gap: 0.75rem;
}
.gap-4 {
gap: 1rem;
}
.gap-\[2px\] {
gap: 2px;
}
.space-y-1 {
:where(& > :not(:last-child)) {
margin-block-end: 0.25rem;
}
}
.space-y-1\.5 {
:where(& > :not(:last-child)) {
margin-block-end: 0.375rem;
}
}
.space-y-2 {
:where(& > :not(:last-child)) {
margin-block-end: 0.5rem;
}
}
.space-y-3 {
:where(& > :not(:last-child)) {
margin-block-end: 0.75rem;
}
}
.space-y-4 {
:where(& > :not(:last-child)) {
margin-block-end: 1rem;
}
}
.space-y-5 {
:where(& > :not(:last-child)) {
margin-block-end: 1.25rem;
}
}
.space-y-6 {
:where(& > :not(:last-child)) {
margin-block-end: 1.5rem;
}
}
.divide-x {
:where(& > :not(:last-child)) {
border-inline-style: solid;
border-inline-end-width: 1px;
}
}
.divide-y {
:where(& > :not(:last-child)) {
border-top-style: solid;
border-bottom-style: solid;
border-bottom-width: 1px;
}
}
.divide-border {
:where(& > :not(:last-child)) {
border-color: var(--color-border);
}
}
.divide-ink\/\[0\.04\] {
:where(& > :not(:last-child)) {
border-color: color-mix(in oklab, var(--color-text) 4%, transparent);
}
}
.divide-ink\/\[0\.05\] {
:where(& > :not(:last-child)) {
border-color: color-mix(in oklab, var(--color-text) 5%, transparent);
}
}
.truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.overflow-auto {
overflow: auto;
}
.overflow-hidden {
overflow: hidden;
}
.overflow-x-auto {
overflow-x: auto;
}
.overflow-y-auto {
overflow-y: auto;
}
.rounded {
border-radius: 0.25rem;
}
.rounded-2xl {
border-radius: 1rem;
}
.rounded-full {
border-radius: calc(infinity * 1px);
}
.rounded-lg {
border-radius: 0.5rem;
}
.rounded-md {
border-radius: 0.375rem;
}
.rounded-sm {
border-radius: 0.25rem;
}
.rounded-xl {
border-radius: 0.75rem;
}
.rounded-t-2xl {
border-top-left-radius: 1rem;
border-top-right-radius: 1rem;
}
.border {
border-style: solid;
border-width: 1px;
}
.border-2 {
border-style: solid;
border-width: 2px;
}
.border-t {
border-top-style: solid;
border-top-width: 1px;
}
.border-r {
border-right-style: solid;
border-right-width: 1px;
}
.border-b {
border-bottom-style: solid;
border-bottom-width: 1px;
}
.border-dashed {
border-style: dashed;
}
.border-amber-500\/25 {
border-color: color-mix(in oklab, oklch(76.9% 0.188 70.08) 25%, transparent);
}
.border-border {
border-color: var(--color-border);
}
.border-brand {
border-color: var(--color-brand);
}
.border-emerald-500\/20 {
border-color: color-mix(in oklab, oklch(69.6% 0.17 162.48) 20%, transparent);
}
.border-emerald-500\/25 {
border-color: color-mix(in oklab, oklch(69.6% 0.17 162.48) 25%, transparent);
}
.border-emerald-500\/30 {
border-color: color-mix(in oklab, oklch(69.6% 0.17 162.48) 30%, transparent);
}
.border-red-500\/20 {
border-color: color-mix(in oklab, oklch(63.7% 0.237 25.331) 20%, transparent);
}
.border-rose-500\/30 {
border-color: color-mix(in oklab, oklch(64.5% 0.246 16.439) 30%, transparent);
}
.border-sky-500\/20 {
border-color: color-mix(in oklab, oklch(68.5% 0.169 237.323) 20%, transparent);
}
.border-sky-500\/25 {
border-color: color-mix(in oklab, oklch(68.5% 0.169 237.323) 25%, transparent);
}
.border-success\/20 {
border-color: color-mix(in oklab, var(--color-success) 20%, transparent);
}
.border-text-dim {
border-color: var(--color-text-dim);
}
.border-warning\/30 {
border-color: color-mix(in oklab, var(--color-warning) 30%, transparent);
}
.border-ink\/10 {
border-color: color-mix(in oklab, var(--color-text) 10%, transparent);
}
.border-ink\/\[0\.1\] {
border-color: color-mix(in oklab, var(--color-text) 10%, transparent);
}
.border-ink\/\[0\.2\] {
border-color: color-mix(in oklab, var(--color-text) 20%, transparent);
}
.border-ink\/\[0\.04\] {
border-color: color-mix(in oklab, var(--color-text) 4%, transparent);
}
.border-ink\/\[0\.06\] {
border-color: color-mix(in oklab, var(--color-text) 6%, transparent);
}
.border-ink\/\[0\.07\] {
border-color: color-mix(in oklab, var(--color-text) 7.000000000000001%, transparent);
}
.border-ink\/\[0\.08\] {
border-color: color-mix(in oklab, var(--color-text) 8%, transparent);
}
.border-ink\/\[0\.12\] {
border-color: color-mix(in oklab, var(--color-text) 12%, transparent);
}
.border-ink\/\[0\.25\] {
border-color: color-mix(in oklab, var(--color-text) 25%, transparent);
}
.border-t-brand {
border-top-color: var(--color-brand);
}
.border-t-ink\/50 {
border-top-color: color-mix(in oklab, var(--color-text) 50%, transparent);
}
.border-t-ink\/60 {
border-top-color: color-mix(in oklab, var(--color-text) 60%, transparent);
}
.bg-\[\#0d0d10\] {
background-color: #0d0d10;
}
.bg-\[\#09090b\] {
background-color: #09090b;
}
.bg-\[\#141419\] {
background-color: #141419;
}
.bg-amber-500 {
background-color: oklch(76.9% 0.188 70.08);
}
.bg-amber-500\/10 {
background-color: color-mix(in oklab, oklch(76.9% 0.188 70.08) 10%, transparent);
}
.bg-amber-500\/15 {
background-color: color-mix(in oklab, oklch(76.9% 0.188 70.08) 15%, transparent);
}
.bg-amber-500\/20 {
background-color: color-mix(in oklab, oklch(76.9% 0.188 70.08) 20%, transparent);
}
.bg-amber-500\/\[0\.06\] {
background-color: color-mix(in oklab, oklch(76.9% 0.188 70.08) 6%, transparent);
}
.bg-bg {
background-color: var(--color-bg);
}
.bg-bg-card {
background-color: var(--color-bg-card);
}
.bg-bg-elevated {
background-color: var(--color-bg-elevated);
}
.bg-bg-input {
background-color: var(--color-bg-input);
}
.bg-black\/30 {
background-color: color-mix(in oklab, #000 30%, transparent);
}
.bg-black\/60 {
background-color: color-mix(in oklab, #000 60%, transparent);
}
.bg-blue-500 {
background-color: oklch(62.3% 0.214 259.815);
}
.bg-border-strong {
background-color: var(--color-border-strong);
}
.bg-brand {
background-color: var(--color-brand);
}
.bg-brand-foreground {
background-color: var(--color-brand-foreground);
}
.bg-brand-muted {
background-color: var(--color-brand-muted);
}
.bg-brand\/10 {
background-color: color-mix(in oklab, var(--color-brand) 10%, transparent);
}
.bg-brand\/20 {
background-color: color-mix(in oklab, var(--color-brand) 20%, transparent);
}
.bg-danger {
background-color: var(--color-danger);
}
.bg-emerald-500 {
background-color: oklch(69.6% 0.17 162.48);
}
.bg-emerald-500\/5 {
background-color: color-mix(in oklab, oklch(69.6% 0.17 162.48) 5%, transparent);
}
.bg-emerald-500\/10 {
background-color: color-mix(in oklab, oklch(69.6% 0.17 162.48) 10%, transparent);
}
.bg-emerald-500\/15 {
background-color: color-mix(in oklab, oklch(69.6% 0.17 162.48) 15%, transparent);
}
.bg-emerald-500\/\[0\.06\] {
background-color: color-mix(in oklab, oklch(69.6% 0.17 162.48) 6%, transparent);
}
.bg-gray-500 {
background-color: oklch(55.1% 0.027 264.364);
}
.bg-indigo-500 {
background-color: oklch(58.5% 0.233 277.117);
}
.bg-red-500\/10 {
background-color: color-mix(in oklab, oklch(63.7% 0.237 25.331) 10%, transparent);
}
.bg-red-500\/15 {
background-color: color-mix(in oklab, oklch(63.7% 0.237 25.331) 15%, transparent);
}
.bg-red-500\/\[0\.06\] {
background-color: color-mix(in oklab, oklch(63.7% 0.237 25.331) 6%, transparent);
}
.bg-rose-500\/5 {
background-color: color-mix(in oklab, oklch(64.5% 0.246 16.439) 5%, transparent);
}
.bg-rose-500\/10 {
background-color: color-mix(in oklab, oklch(64.5% 0.246 16.439) 10%, transparent);
}
.bg-rose-600 {
background-color: oklch(58.6% 0.253 17.585);
}
.bg-sky-500 {
background-color: oklch(68.5% 0.169 237.323);
}
.bg-sky-500\/10 {
background-color: color-mix(in oklab, oklch(68.5% 0.169 237.323) 10%, transparent);
}
.bg-sky-500\/15 {
background-color: color-mix(in oklab, oklch(68.5% 0.169 237.323) 15%, transparent);
}
.bg-sky-500\/20 {
background-color: color-mix(in oklab, oklch(68.5% 0.169 237.323) 20%, transparent);
}
.bg-sky-500\/\[0\.05\] {
background-color: color-mix(in oklab, oklch(68.5% 0.169 237.323) 5%, transparent);
}
.bg-success {
background-color: var(--color-success);
}
.bg-success\/5 {
background-color: color-mix(in oklab, var(--color-success) 5%, transparent);
}
.bg-teal-500 {
background-color: oklch(70.4% 0.14 182.503);
}
.bg-text {
background-color: var(--color-text);
}
.bg-text-dim\/10 {
background-color: color-mix(in oklab, var(--color-text-dim) 10%, transparent);
}
.bg-text-dim\/20 {
background-color: color-mix(in oklab, var(--color-text-dim) 20%, transparent);
}
.bg-violet-500 {
background-color: oklch(60.6% 0.25 292.717);
}
.bg-warning {
background-color: var(--color-warning);
}
.bg-warning\/5 {
background-color: color-mix(in oklab, var(--color-warning) 5%, transparent);
}
.bg-warning\/10 {
background-color: color-mix(in oklab, var(--color-warning) 10%, transparent);
}
.bg-warning\/15 {
background-color: color-mix(in oklab, var(--color-warning) 15%, transparent);
}
.bg-ink\/10 {
background-color: color-mix(in oklab, var(--color-text) 10%, transparent);
}
.bg-ink\/\[0\.02\] {
background-color: color-mix(in oklab, var(--color-text) 2%, transparent);
}
.bg-ink\/\[0\.03\] {
background-color: color-mix(in oklab, var(--color-text) 3%, transparent);
}
.bg-ink\/\[0\.04\] {
background-color: color-mix(in oklab, var(--color-text) 4%, transparent);
}
.bg-ink\/\[0\.05\] {
background-color: color-mix(in oklab, var(--color-text) 5%, transparent);
}
.bg-ink\/\[0\.06\] {
background-color: color-mix(in oklab, var(--color-text) 6%, transparent);
}
.bg-ink\/\[0\.07\] {
background-color: color-mix(in oklab, var(--color-text) 7.000000000000001%, transparent);
}
.bg-ink\/\[0\.08\] {
background-color: color-mix(in oklab, var(--color-text) 8%, transparent);
}
.bg-ink\/\[0\.12\] {
background-color: color-mix(in oklab, var(--color-text) 12%, transparent);
}
.p-0\.5 {
padding: 0.125rem;
}
.p-1 {
padding: 0.25rem;
}
.p-1\.5 {
padding: 0.375rem;
}
.p-2 {
padding: 0.5rem;
}
.p-3 {
padding: 0.75rem;
}
.p-4 {
padding: 1rem;
}
.p-5 {
padding: 1.25rem;
}
.p-6 {
padding: 1.5rem;
}
.p-8 {
padding: 2rem;
}
.px-2 {
padding-inline: 0.5rem;
}
.px-3 {
padding-inline: 0.75rem;
}
.px-3\.5 {
padding-inline: 0.875rem;
}
.px-4 {
padding-inline: 1rem;
}
.px-5 {
padding-inline: 1.25rem;
}
.px-6 {
padding-inline: 1.5rem;
}
.px-8 {
padding-inline: 2rem;
}
.py-0\.5 {
padding-block: 0.125rem;
}
.py-1 {
padding-block: 0.25rem;
}
.py-1\.5 {
padding-block: 0.375rem;
}
.py-2 {
padding-block: 0.5rem;
}
.py-2\.5 {
padding-block: 0.625rem;
}
.py-3 {
padding-block: 0.75rem;
}
.py-3\.5 {
padding-block: 0.875rem;
}
.py-4 {
padding-block: 1rem;
}
.py-5 {
padding-block: 1.25rem;
}
.py-8 {
padding-block: 2rem;
}
.py-10 {
padding-block: 2.5rem;
}
.py-16 {
padding-block: 4rem;
}
.py-20 {
padding-block: 5rem;
}
.pt-14 {
padding-top: 3.5rem;
}
.pr-3 {
padding-right: 0.75rem;
}
.pl-7 {
padding-left: 1.75rem;
}
.text-center {
text-align: center;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-2xl {
font-size: 1.5rem;
line-height: 1.333333;
}
.text-3xl {
font-size: 1.875rem;
line-height: 1.2;
}
.text-4xl {
font-size: 2.25rem;
line-height: 1.111111;
}
.text-base {
font-size: 1rem;
line-height: 1.5;
}
.text-lg {
font-size: 1.125rem;
line-height: 1.555556;
}
.text-sm {
font-size: 0.875rem;
line-height: 1.428571;
}
.text-xl {
font-size: 1.25rem;
line-height: 1.4;
}
.text-xs {
font-size: 0.75rem;
line-height: 1.333333;
}
.text-\[10px\] {
font-size: 10px;
}
.text-\[11px\] {
font-size: 11px;
}
.text-\[12px\] {
font-size: 12px;
}
.text-\[13px\] {
font-size: 13px;
}
.text-\[14px\] {
font-size: 14px;
}
.text-\[15px\] {
font-size: 15px;
}
.text-\[22px\] {
font-size: 22px;
}
.leading-relaxed {
line-height: 1.625;
}
.font-bold {
font-weight: 700;
}
.font-medium {
font-weight: 500;
}
.font-normal {
font-weight: 400;
}
.font-semibold {
font-weight: 600;
}
.tracking-\[0\.14em\] {
letter-spacing: 0.14em;
}
.tracking-tight {
letter-spacing: -0.025em;
}
.tracking-wide {
letter-spacing: 0.025em;
}
.tracking-wider {
letter-spacing: 0.05em;
}
.tracking-widest {
letter-spacing: 0.1em;
}
.break-all {
word-break: break-all;
}
.text-amber-300 {
color: oklch(87.9% 0.169 91.605);
}
.text-amber-400 {
color: oklch(82.8% 0.189 84.429);
}
.text-amber-500 {
color: oklch(76.9% 0.188 70.08);
}
.text-bg {
color: var(--color-bg);
}
.text-black {
color: #000;
}
.text-brand {
color: var(--color-brand);
}
.text-brand-foreground {
color: var(--color-brand-foreground);
}
.text-danger {
color: var(--color-danger);
}
.text-emerald-400 {
color: oklch(76.5% 0.177 163.223);
}
.text-emerald-500 {
color: oklch(69.6% 0.17 162.48);
}
.text-red-400 {
color: oklch(70.4% 0.191 22.216);
}
.text-rose-400 {
color: oklch(71.2% 0.194 13.428);
}
.text-rose-500 {
color: oklch(64.5% 0.246 16.439);
}
.text-sky-300 {
color: oklch(82.8% 0.111 230.318);
}
.text-sky-400 {
color: oklch(74.6% 0.16 232.661);
}
.text-sky-500 {
color: oklch(68.5% 0.169 237.323);
}
.text-success {
color: var(--color-success);
}
.text-text {
color: var(--color-text);
}
.text-text-dim {
color: var(--color-text-dim);
}
.text-text-muted {
color: var(--color-text-muted);
}
.text-text-secondary {
color: var(--color-text-secondary);
}
.text-violet-400 {
color: oklch(70.2% 0.183 293.541);
}
.text-violet-500 {
color: oklch(60.6% 0.25 292.717);
}
.text-warning {
color: var(--color-warning);
}
.text-white {
color: #fff;
}
.text-ink\/20 {
color: color-mix(in oklab, var(--color-text) 20%, transparent);
}
.text-ink\/25 {
color: color-mix(in oklab, var(--color-text) 25%, transparent);
}
.text-ink\/30 {
color: color-mix(in oklab, var(--color-text) 30%, transparent);
}
.text-ink\/35 {
color: color-mix(in oklab, var(--color-text) 35%, transparent);
}
.text-ink\/40 {
color: color-mix(in oklab, var(--color-text) 40%, transparent);
}
.text-ink\/50 {
color: color-mix(in oklab, var(--color-text) 50%, transparent);
}
.text-ink\/60 {
color: color-mix(in oklab, var(--color-text) 60%, transparent);
}
.text-ink\/70 {
color: color-mix(in oklab, var(--color-text) 70%, transparent);
}
.text-ink\/80 {
color: color-mix(in oklab, var(--color-text) 80%, transparent);
}
.uppercase {
text-transform: uppercase;
}
.underline {
text-decoration-line: underline;
}
.antialiased {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.opacity-50 {
opacity: 50%;
}
.opacity-60 {
opacity: 60%;
}
.shadow-\[0_0_20px_rgba\(52\,211\,153\,0\.15\)\] {
box-shadow: 0 0 20px var(--shadow-color, rgba(52,211,153,0.15));
}
.shadow-\[0_0_20px_rgba\(56\,189\,248\,0\.15\)\] {
box-shadow: 0 0 20px var(--shadow-color, rgba(56,189,248,0.15));
}
.shadow-\[0_0_20px_rgba\(167\,139\,250\,0\.15\)\] {
box-shadow: 0 0 20px var(--shadow-color, rgba(167,139,250,0.15));
}
.shadow-\[0_0_20px_rgba\(251\,191\,36\,0\.15\)\] {
box-shadow: 0 0 20px var(--shadow-color, rgba(251,191,36,0.15));
}
.shadow-lg {
box-shadow: 0 10px 15px -3px var(--shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--shadow-color, rgb(0 0 0 / 0.1));
}
.ring-1 {
box-shadow: 0 0 0 1px var(--ring-color, currentcolor);
}
.shadow-brand\/20 {
--shadow-color: color-mix(in oklab, var(--color-brand) 20%, transparent);
}
.ring-amber-500\/20 {
--ring-color: color-mix(in oklab, oklch(76.9% 0.188 70.08) 20%, transparent);
}
.ring-emerald-500\/20 {
--ring-color: color-mix(in oklab, oklch(69.6% 0.17 162.48) 20%, transparent);
}
.ring-rose-500\/20 {
--ring-color: color-mix(in oklab, oklch(64.5% 0.246 16.439) 20%, transparent);
}
.ring-sky-500\/20 {
--ring-color: color-mix(in oklab, oklch(68.5% 0.169 237.323) 20%, transparent);
}
.ring-text-dim\/20 {
--ring-color: color-mix(in oklab, var(--color-text-dim) 20%, transparent);
}
.outline {
outline-style: solid;
outline-width: 1px;
}
.blur {
filter: blur(8px);
}
.blur-2xl {
filter: blur(40px);
}
.transition {
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --shadow-color, --ring-color, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.transition-all {
transition-property: all;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.transition-colors {
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --shadow-color, --ring-color;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.transition-transform {
transition-property: transform, translate, scale, rotate;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.duration-500 {
transition-duration: 500ms;
}
.duration-700 {
transition-duration: 700ms;
}
.outline-none {
outline-style: none;
}
.select-none {
-webkit-user-select: none;
user-select: none;
}
.group-hover\:text-text-muted {
&:is(:where(.group):hover *) {
@media (hover: hover) {
color: var(--color-text-muted);
}
}
}
.group-hover\:text-ink\/40 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
color: color-mix(in oklab, var(--color-text) 40%, transparent);
}
}
}
.group-hover\:text-ink\/50 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
color: color-mix(in oklab, var(--color-text) 50%, transparent);
}
}
}
.group-hover\:text-ink\/60 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
color: color-mix(in oklab, var(--color-text) 60%, transparent);
}
}
}
.placeholder\:text-text-dim {
&::placeholder {
color: var(--color-text-dim);
}
}
.last\:border-0 {
&:last-child {
border-style: solid;
border-width: 0px;
}
}
.hover\:border-border-strong {
&:hover {
@media (hover: hover) {
border-color: var(--color-border-strong);
}
}
}
.hover\:border-brand\/40 {
&:hover {
@media (hover: hover) {
border-color: color-mix(in oklab, var(--color-brand) 40%, transparent);
}
}
}
.hover\:border-ink\/\[0\.2\] {
&:hover {
@media (hover: hover) {
border-color: color-mix(in oklab, var(--color-text) 20%, transparent);
}
}
}
.hover\:border-ink\/\[0\.12\] {
&:hover {
@media (hover: hover) {
border-color: color-mix(in oklab, var(--color-text) 12%, transparent);
}
}
}
.hover\:border-ink\/\[0\.14\] {
&:hover {
@media (hover: hover) {
border-color: color-mix(in oklab, var(--color-text) 14.000000000000002%, transparent);
}
}
}
.hover\:bg-\[\#16161c\] {
&:hover {
@media (hover: hover) {
background-color: #16161c;
}
}
}
.hover\:bg-amber-400 {
&:hover {
@media (hover: hover) {
background-color: oklch(82.8% 0.189 84.429);
}
}
}
.hover\:bg-bg-card {
&:hover {
@media (hover: hover) {
background-color: var(--color-bg-card);
}
}
}
.hover\:bg-bg-elevated {
&:hover {
@media (hover: hover) {
background-color: var(--color-bg-elevated);
}
}
}
.hover\:bg-brand-hover {
&:hover {
@media (hover: hover) {
background-color: var(--color-brand-hover);
}
}
}
.hover\:bg-emerald-400 {
&:hover {
@media (hover: hover) {
background-color: oklch(76.5% 0.177 163.223);
}
}
}
.hover\:bg-rose-500 {
&:hover {
@media (hover: hover) {
background-color: oklch(64.5% 0.246 16.439);
}
}
}
.hover\:bg-rose-500\/10 {
&:hover {
@media (hover: hover) {
background-color: color-mix(in oklab, oklch(64.5% 0.246 16.439) 10%, transparent);
}
}
}
.hover\:bg-sky-400 {
&:hover {
@media (hover: hover) {
background-color: oklch(74.6% 0.16 232.661);
}
}
}
.hover\:bg-sky-500\/30 {
&:hover {
@media (hover: hover) {
background-color: color-mix(in oklab, oklch(68.5% 0.169 237.323) 30%, transparent);
}
}
}
.hover\:bg-ink\/\[0\.02\] {
&:hover {
@media (hover: hover) {
background-color: color-mix(in oklab, var(--color-text) 2%, transparent);
}
}
}
.hover\:bg-ink\/\[0\.03\] {
&:hover {
@media (hover: hover) {
background-color: color-mix(in oklab, var(--color-text) 3%, transparent);
}
}
}
.hover\:bg-ink\/\[0\.04\] {
&:hover {
@media (hover: hover) {
background-color: color-mix(in oklab, var(--color-text) 4%, transparent);
}
}
}
.hover\:bg-ink\/\[0\.05\] {
&:hover {
@media (hover: hover) {
background-color: color-mix(in oklab, var(--color-text) 5%, transparent);
}
}
}
.hover\:bg-ink\/\[0\.06\] {
&:hover {
@media (hover: hover) {
background-color: color-mix(in oklab, var(--color-text) 6%, transparent);
}
}
}
.hover\:bg-ink\/\[0\.12\] {
&:hover {
@media (hover: hover) {
background-color: color-mix(in oklab, var(--color-text) 12%, transparent);
}
}
}
.hover\:bg-ink\/\[0\.14\] {
&:hover {
@media (hover: hover) {
background-color: color-mix(in oklab, var(--color-text) 14.000000000000002%, transparent);
}
}
}
.hover\:text-rose-500 {
&:hover {
@media (hover: hover) {
color: oklch(64.5% 0.246 16.439);
}
}
}
.hover\:text-sky-300 {
&:hover {
@media (hover: hover) {
color: oklch(82.8% 0.111 230.318);
}
}
}
.hover\:text-text {
&:hover {
@media (hover: hover) {
color: var(--color-text);
}
}
}
.hover\:text-text-secondary {
&:hover {
@media (hover: hover) {
color: var(--color-text-secondary);
}
}
}
.hover\:text-text {
&:hover {
@media (hover: hover) {
color: var(--color-text);
}
}
}
.hover\:text-ink\/60 {
&:hover {
@media (hover: hover) {
color: color-mix(in oklab, var(--color-text) 60%, transparent);
}
}
}
.hover\:text-ink\/70 {
&:hover {
@media (hover: hover) {
color: color-mix(in oklab, var(--color-text) 70%, transparent);
}
}
}
.hover\:opacity-80 {
&:hover {
@media (hover: hover) {
opacity: 80%;
}
}
}
.hover\:brightness-110 {
&:hover {
@media (hover: hover) {
filter: brightness(110%);
}
}
}
.focus\:border-brand {
&:focus {
border-color: var(--color-brand);
}
}
.focus\:border-rose-500 {
&:focus {
border-color: oklch(64.5% 0.246 16.439);
}
}
.focus\:border-warning {
&:focus {
border-color: var(--color-warning);
}
}
.focus\:ring-1 {
&:focus {
box-shadow: 0 0 0 1px var(--ring-color, currentcolor);
}
}
.focus\:ring-brand {
&:focus {
--ring-color: var(--color-brand);
}
}
.focus\:ring-warning {
&:focus {
--ring-color: var(--color-warning);
}
}
.active\:scale-\[0\.96\] {
&:active {
scale: 0.96;
}
}
.active\:scale-\[0\.97\] {
&:active {
scale: 0.97;
}
}
.active\:scale-\[0\.98\] {
&:active {
scale: 0.98;
}
}
.active\:scale-\[0\.99\] {
&:active {
scale: 0.99;
}
}
.disabled\:cursor-not-allowed {
&:disabled {
cursor: not-allowed;
}
}
.disabled\:bg-ink\/\[0\.06\] {
&:disabled {
background-color: color-mix(in oklab, var(--color-text) 6%, transparent);
}
}
.disabled\:text-ink\/30 {
&:disabled {
color: color-mix(in oklab, var(--color-text) 30%, transparent);
}
}
.disabled\:opacity-30 {
&:disabled {
opacity: 30%;
}
}
.disabled\:opacity-40 {
&:disabled {
opacity: 40%;
}
}
.disabled\:opacity-60 {
&:disabled {
opacity: 60%;
}
}
.sm\:grid-cols-3 {
@media (width >= 40rem) {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
.sm\:grid-cols-6 {
@media (width >= 40rem) {
grid-template-columns: repeat(6, minmax(0, 1fr));
}
}
.md\:col-span-2 {
@media (width >= 48rem) {
grid-column: span 2 / span 2;
}
}
.md\:col-span-3 {
@media (width >= 48rem) {
grid-column: span 3 / span 3;
}
}
.md\:block {
@media (width >= 48rem) {
display: block;
}
}
.md\:hidden {
@media (width >= 48rem) {
display: none;
}
}
.md\:grid-cols-2 {
@media (width >= 48rem) {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
.md\:grid-cols-3 {
@media (width >= 48rem) {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
.md\:grid-cols-4 {
@media (width >= 48rem) {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
}
.lg\:grid-cols-6 {
@media (width >= 64rem) {
grid-template-columns: repeat(6, minmax(0, 1fr));
}
}
.xl\:col-span-2 {
@media (width >= 80rem) {
grid-column: span 2 / span 2;
}
}
.xl\:col-span-3 {
@media (width >= 80rem) {
grid-column: span 3 / span 3;
}
}
.xl\:grid-cols-3 {
@media (width >= 80rem) {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
.xl\:grid-cols-4 {
@media (width >= 80rem) {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
}
.xl\:grid-cols-5 {
@media (width >= 80rem) {
grid-template-columns: repeat(5, minmax(0, 1fr));
}
}
/* ── @hanzogui/shell chrome ──────────────────────────────────────────────── */
/* TenantHeader and its dropdowns ship bare class strings and no stylesheet,
so these rules are the header's half of the vocabulary. They were absent
from every build before this one: Tailwind's scanner skips node_modules,
which is why the app chrome only ever picked up the classes it happened to
share with this app's own markup. */
.top-0 {
top: 0;
}
.top-10 {
top: 2.5rem;
}
.z-\[9999\] {
z-index: 9999;
}
.max-h-\[80vh\] {
max-height: 80vh;
}
.w-72 {
width: 18rem;
}
.min-w-\[180px\] {
min-width: 180px;
}
.bg-black {
background-color: #000;
}
.bg-black\/90 {
background-color: color-mix(in oklab, #000 90%, transparent);
}
.object-cover {
object-fit: cover;
}
.pt-0\.5 {
padding-top: 0.125rem;
}
.pt-1 {
padding-top: 0.25rem;
}
.pt-2 {
padding-top: 0.5rem;
}
.pb-1 {
padding-bottom: 0.25rem;
}
.pb-2 {
padding-bottom: 0.5rem;
}
.leading-none {
line-height: 1;
}
.leading-tight {
line-height: 1.25;
}
.text-ink\/\[0\.15\] {
color: color-mix(in oklab, var(--color-text) 15%, transparent);
}
.capitalize {
text-transform: capitalize;
}
.shadow {
box-shadow: 0 1px 3px 0 var(--shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--shadow-color, rgb(0 0 0 / 0.1));
}
.shadow-2xl {
box-shadow: 0 25px 50px -12px var(--shadow-color, rgb(0 0 0 / 0.25));
}
.shadow-black\/60 {
--shadow-color: color-mix(in oklab, #000 60%, transparent);
}
.backdrop-blur-xl {
-webkit-backdrop-filter: blur(24px);
backdrop-filter: blur(24px);
}
.hover\:text-red-400\/70 {
&:hover {
@media (hover: hover) {
color: color-mix(in oklab, oklch(70.4% 0.191 22.216) 70%, transparent);
}
}
}
.hover\:text-ink\/80 {
&:hover {
@media (hover: hover) {
color: color-mix(in oklab, var(--color-text) 80%, transparent);
}
}
}
.hover\:text-ink\/90 {
&:hover {
@media (hover: hover) {
color: color-mix(in oklab, var(--color-text) 90%, transparent);
}
}
}
.focus-visible\:ring-2 {
&:focus-visible {
box-shadow: 0 0 0 2px var(--ring-color, currentcolor);
}
}
.focus-visible\:ring-ink\/20 {
&:focus-visible {
--ring-color: color-mix(in oklab, var(--color-text) 20%, transparent);
}
}
.focus-visible\:outline-none {
&:focus-visible {
outline-style: none;
}
}
.sm\:block {
@media (width >= 40rem) {
display: block;
}
}
.sm\:flex {
@media (width >= 40rem) {
display: flex;
}
}
/* The rail is desktop chrome. 240px of navigation on a 390px phone is most of
the screen, and every link it carries is already in the footer — so below
`md` the page is the page and nothing else. */
.hz-rail { display: flex; }
@media (max-width: 767px) {
.hz-rail { display: none; }
}