mirror of
https://github.com/bigskysoftware/htmx.git
synced 2026-01-25 05:06:13 +00:00
518 lines
15 KiB
CSS
518 lines
15 KiB
CSS
@import "tailwindcss";
|
|
@plugin "@tailwindcss/typography";
|
|
|
|
@font-face {
|
|
font-family: 'ChicagoFLF';
|
|
src: url('/fonts/ChicagoFLF.ttf') format('truetype');
|
|
}
|
|
|
|
@theme {
|
|
--font-os9: 'ChicagoFLF', sans-serif;
|
|
--font-hyperlegible: 'Atkinson Hyperlegible', sans-serif;
|
|
|
|
/* Use blue colors that match the htmx logo */
|
|
--color-blue-50: #f1f6fd;
|
|
--color-blue-100: #dfecfa;
|
|
--color-blue-200: #c6def7;
|
|
--color-blue-300: #9ec9f2;
|
|
--color-blue-400: #70abea;
|
|
--color-blue-500: #4f8ce2;
|
|
--color-blue-600: #3d72d7;
|
|
--color-blue-700: #315cc4;
|
|
--color-blue-800: #2d4ca0;
|
|
--color-blue-900: #29427f;
|
|
--color-blue-950: #1d2a4e;
|
|
}
|
|
|
|
@layer base {
|
|
h1, h2, h3, h4, h5, h6 {
|
|
font-family: var(--font-os9);
|
|
letter-spacing: var(--tracking-tight);
|
|
}
|
|
|
|
a, a * {
|
|
text-decoration-thickness: 0.125em;
|
|
text-underline-offset: 0.25em;
|
|
}
|
|
|
|
/* To avoid layout shifts */
|
|
iconify-icon {
|
|
display: inline-block;
|
|
width: 1em;
|
|
height: 1em;
|
|
}
|
|
}
|
|
|
|
@layer components {
|
|
/*****************/
|
|
/* OS 9 Form Controls */
|
|
/*****************/
|
|
|
|
/* Text Inputs */
|
|
.os9-input {
|
|
border: 1px solid var(--color-neutral-400);
|
|
border-bottom-color: var(--color-neutral-300);
|
|
border-right-color: var(--color-neutral-300);
|
|
border-radius: 0.25rem;
|
|
box-shadow:
|
|
inset 2px 2px 3px var(--color-neutral-200),
|
|
inset -1px -1px 1px var(--color-neutral-100);
|
|
color: var(--color-neutral-950);
|
|
font-family: "Lucida Grande", Geneva, Verdana, sans-serif;
|
|
padding: 0.5rem 1rem;
|
|
margin: 0;
|
|
height: auto;
|
|
min-height: auto;
|
|
line-height: 1.3;
|
|
|
|
@variant dark {
|
|
background: var(--color-neutral-800);
|
|
border-color: var(--color-neutral-700);
|
|
border-bottom-color: var(--color-neutral-600);
|
|
border-right-color: var(--color-neutral-600);
|
|
color: var(--color-neutral-100);
|
|
box-shadow:
|
|
inset 2px 2px 3px rgba(0, 0, 0, 0.4),
|
|
inset -1px -1px 1px rgba(255, 255, 255, 0.05);
|
|
}
|
|
|
|
@variant focus {
|
|
border-color: var(--color-blue-600);
|
|
box-shadow:
|
|
inset 1px 1px 2px rgba(0, 0, 0, 0.1),
|
|
0 0 0 2px var(--color-blue-400);
|
|
outline: none;
|
|
}
|
|
|
|
@variant disabled {
|
|
opacity: 0.5;
|
|
cursor: not-allowed;
|
|
color: var(--color-neutral-500);
|
|
}
|
|
|
|
&:is(textarea) {
|
|
resize: vertical;
|
|
min-height: 60px;
|
|
line-height: 1.4;
|
|
}
|
|
|
|
input {
|
|
outline: none;
|
|
}
|
|
}
|
|
|
|
/* Select Dropdowns */
|
|
.os9-select {
|
|
background: var(--color-neutral-50);
|
|
border: 1px solid var(--color-neutral-600);
|
|
border-bottom-color: var(--color-neutral-500);
|
|
border-right-color: var(--color-neutral-500);
|
|
border-radius: 0.25rem;
|
|
box-shadow:
|
|
inset 2px 2px 3px rgba(0, 0, 0, 0.2),
|
|
inset -1px -1px 1px rgba(0, 0, 0, 0.05);
|
|
color: var(--color-neutral-950);
|
|
font-family: "Lucida Grande", Geneva, Verdana, sans-serif;
|
|
padding: 0.5rem 1rem;
|
|
margin: 0;
|
|
height: auto;
|
|
min-height: auto;
|
|
line-height: 1.3;
|
|
appearance: none;
|
|
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8"><path fill="%23333" d="M1 1l5 5 5-5H1z"/></svg>');
|
|
background-repeat: no-repeat;
|
|
background-position: right 6px center;
|
|
padding-right: 24px;
|
|
cursor: pointer;
|
|
|
|
@variant dark {
|
|
background-color: var(--color-neutral-800);
|
|
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8"><path fill="%23d4d4d4" d="M1 1l5 5 5-5H1z"/></svg>');
|
|
border-color: var(--color-neutral-700);
|
|
border-bottom-color: var(--color-neutral-600);
|
|
border-right-color: var(--color-neutral-600);
|
|
color: var(--color-neutral-100);
|
|
box-shadow:
|
|
inset 2px 2px 3px rgba(0, 0, 0, 0.4),
|
|
inset -1px -1px 1px rgba(255, 255, 255, 0.05);
|
|
}
|
|
|
|
@variant focus {
|
|
border-color: var(--color-blue-600);
|
|
box-shadow:
|
|
inset 1px 1px 2px rgba(0, 0, 0, 0.1),
|
|
0 0 0 2px var(--color-blue-400);
|
|
outline: none;
|
|
}
|
|
|
|
@variant disabled {
|
|
opacity: 0.5;
|
|
cursor: not-allowed;
|
|
color: var(--color-neutral-500);
|
|
}
|
|
}
|
|
|
|
/* Checkboxes */
|
|
.os9-checkbox {
|
|
appearance: none;
|
|
width: 13px;
|
|
height: 13px;
|
|
background: white;
|
|
border: 1px solid var(--color-neutral-600);
|
|
border-radius: 2px;
|
|
box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.15);
|
|
cursor: pointer;
|
|
position: relative;
|
|
margin-right: 6px;
|
|
|
|
@variant dark {
|
|
background: var(--color-neutral-700);
|
|
border-color: var(--color-neutral-500);
|
|
box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
@variant checked {
|
|
&::before {
|
|
content: "✓";
|
|
position: absolute;
|
|
top: -3px;
|
|
left: 1px;
|
|
font-size: 14px;
|
|
font-weight: bold;
|
|
color: var(--color-neutral-950);
|
|
|
|
@variant dark {
|
|
color: var(--color-neutral-50);
|
|
}
|
|
}
|
|
}
|
|
|
|
@variant focus {
|
|
outline: 2px solid var(--color-blue-600);
|
|
outline-offset: 2px;
|
|
}
|
|
}
|
|
|
|
/* Radio Buttons */
|
|
.os9-radio {
|
|
appearance: none;
|
|
width: 13px;
|
|
height: 13px;
|
|
background: white;
|
|
border: 1px solid var(--color-neutral-600);
|
|
border-radius: 50%;
|
|
box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.15);
|
|
cursor: pointer;
|
|
position: relative;
|
|
margin-right: 6px;
|
|
|
|
@variant dark {
|
|
background: var(--color-neutral-700);
|
|
border-color: var(--color-neutral-500);
|
|
box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
@variant checked {
|
|
&::before {
|
|
content: "";
|
|
position: absolute;
|
|
top: 3px;
|
|
left: 3px;
|
|
width: 5px;
|
|
height: 5px;
|
|
background: var(--color-neutral-950);
|
|
border-radius: 50%;
|
|
|
|
@variant dark {
|
|
background: var(--color-neutral-50);
|
|
}
|
|
}
|
|
}
|
|
|
|
@variant focus {
|
|
outline: 2px solid var(--color-blue-600);
|
|
outline-offset: 2px;
|
|
}
|
|
}
|
|
|
|
/* Range Slider */
|
|
.os9-range {
|
|
appearance: none;
|
|
height: 16px;
|
|
background: transparent;
|
|
|
|
&::-webkit-slider-runnable-track, &::-moz-range-track {
|
|
height: 4px;
|
|
background: var(--color-neutral-300);
|
|
border: 1px solid var(--color-neutral-600);
|
|
border-radius: 2px;
|
|
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2);
|
|
|
|
@variant dark {
|
|
background: var(--color-neutral-700);
|
|
border-color: var(--color-neutral-600);
|
|
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.4);
|
|
}
|
|
}
|
|
|
|
&::-webkit-slider-thumb, &::-moz-range-thumb {
|
|
appearance: none;
|
|
width: 16px;
|
|
height: 16px;
|
|
background: linear-gradient(to bottom, #fefefe 0%, #ddd 50%, #ccc 51%, #bbb 100%);
|
|
border: 1px solid var(--color-neutral-600);
|
|
border-radius: 2px;
|
|
box-shadow:
|
|
inset 1px 1px 0 var(--color-neutral-50),
|
|
0 1px 2px rgba(0, 0, 0, 0.2);
|
|
cursor: pointer;
|
|
|
|
@variant dark {
|
|
background: linear-gradient(to bottom, #6b6b6b 0%, #505050 50%, #454545 51%, #3a3a3a 100%);
|
|
border-color: var(--color-neutral-500);
|
|
box-shadow:
|
|
inset 1px 1px 0 rgba(255, 255, 255, 0.1),
|
|
0 1px 2px rgba(0, 0, 0, 0.5);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Progress Bar */
|
|
.os9-progress {
|
|
appearance: none;
|
|
height: 16px;
|
|
border: 1px solid var(--color-neutral-600);
|
|
border-radius: 3px;
|
|
background: white;
|
|
box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.1);
|
|
|
|
@variant dark {
|
|
background: var(--color-neutral-800);
|
|
border-color: var(--color-neutral-600);
|
|
box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
&::-webkit-progress-bar {
|
|
background: white;
|
|
border-radius: 3px;
|
|
|
|
@variant dark {
|
|
background: var(--color-neutral-800);
|
|
}
|
|
}
|
|
|
|
&::-webkit-progress-value, &::-moz-progress-bar {
|
|
background: linear-gradient(to bottom,
|
|
var(--color-blue-400) 0%,
|
|
var(--color-blue-600) 50%,
|
|
#0055c0 100%);
|
|
border-radius: 2px;
|
|
}
|
|
}
|
|
|
|
|
|
/* Fieldset */
|
|
.os9-fieldset {
|
|
border: 1px solid var(--color-neutral-500);
|
|
border-radius: 4px;
|
|
padding: 12px;
|
|
background: rgba(255, 255, 255, 0.3);
|
|
|
|
@variant dark {
|
|
border-color: var(--color-neutral-600);
|
|
background: rgba(0, 0, 0, 0.2);
|
|
}
|
|
|
|
legend {
|
|
padding: 0 6px;
|
|
font-weight: bold;
|
|
color: var(--color-neutral-950);
|
|
|
|
@variant dark {
|
|
color: var(--color-neutral-50);
|
|
}
|
|
}
|
|
}
|
|
|
|
.os9-button {
|
|
background: linear-gradient(to bottom, #fefefe 0%, #ddd 50%, #ccc 51%, #bbb 100%);
|
|
border: 1px solid var(--color-neutral-600);
|
|
border-radius: 4px;
|
|
box-shadow:
|
|
inset 1px 1px 0 var(--color-neutral-50),
|
|
inset -1px -1px 0 var(--color-neutral-500),
|
|
0 1px 2px rgba(0, 0, 0, 0.2);
|
|
color: var(--color-neutral-950);
|
|
font-family: "ChicagoFLF", "Lucida Grande", Geneva, Verdana, sans-serif;
|
|
font-size: var(--text-xs);
|
|
padding: 0.5rem 1rem;
|
|
margin: 0;
|
|
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
|
|
cursor: pointer;
|
|
height: auto;
|
|
min-height: auto;
|
|
line-height: 1.3;
|
|
white-space: nowrap;
|
|
|
|
@variant dark {
|
|
/*background: linear-gradient(to bottom, #6b6b6b 0%, #505050 50%, #454545 51%, #3a3a3a 100%);*/
|
|
border-color: var(--color-neutral-500);
|
|
box-shadow:
|
|
inset 1px 1px 0 rgba(255, 255, 255, 0.1),
|
|
inset -1px -1px 0 rgba(0, 0, 0, 0.3),
|
|
0 1px 2px rgba(0, 0, 0, 0.5);
|
|
/*color: var(--color-neutral-50);*/
|
|
/*text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);*/
|
|
}
|
|
|
|
@variant hover {
|
|
background: linear-gradient(to bottom, #fff 0%, #e5e5e5 50%, #d5d5d5 51%, #c5c5c5 100%);
|
|
opacity: 1;
|
|
|
|
@variant dark {
|
|
/*background: linear-gradient(to bottom, #757575 0%, #5a5a5a 50%, #4f4f4f 51%, #444444 100%);*/
|
|
}
|
|
}
|
|
|
|
@variant active {
|
|
background: linear-gradient(to bottom, #bbb 0%, #ccc 50%, #ddd 51%, #e0e0e0 100%);
|
|
box-shadow:
|
|
inset 1px 1px 2px rgba(0, 0, 0, 0.2),
|
|
inset -1px -1px 0 var(--color-neutral-50);
|
|
|
|
@variant dark {
|
|
background: linear-gradient(to bottom, #3a3a3a 0%, #454545 50%, #505050 51%, #5a5a5a 100%);
|
|
box-shadow:
|
|
inset 1px 1px 2px rgba(0, 0, 0, 0.5),
|
|
inset -1px -1px 0 rgba(255, 255, 255, 0.05);
|
|
}
|
|
}
|
|
|
|
@variant focus {
|
|
outline: 2px solid var(--color-blue-600);
|
|
outline-offset: 2px;
|
|
}
|
|
}
|
|
|
|
|
|
/* Migration Note Callout */
|
|
.migration-note {
|
|
@apply bg-[#e7f3ff] border border-blue-400 border-l-4 p-0 my-8 rounded;
|
|
}
|
|
|
|
.migration-note summary {
|
|
@apply px-6 py-4 cursor-pointer font-bold text-blue-800 select-none;
|
|
}
|
|
|
|
.migration-note summary:hover {
|
|
@apply bg-[#d6e9ff];
|
|
}
|
|
|
|
.migration-note[open] summary {
|
|
@apply border-b border-blue-400
|
|
}
|
|
|
|
.migration-note > *:not(summary) {
|
|
@apply px-8 leading-relaxed text-[#1a1a1a];
|
|
}
|
|
|
|
.migration-note > *:first-of-type:not(summary) {
|
|
padding-top: 1.25em;
|
|
}
|
|
|
|
.migration-note > *:last-child {
|
|
padding-bottom: 1.5em;
|
|
}
|
|
|
|
.migration-note p {
|
|
margin: 0.75em 0;
|
|
}
|
|
|
|
.migration-note ul, .migration-note ol {
|
|
@apply my-2 pl-6;
|
|
}
|
|
|
|
.migration-note li {
|
|
margin: 0.25em 0;
|
|
}
|
|
|
|
.migration-note strong {
|
|
@apply text-blue-800
|
|
}
|
|
|
|
.migration-note code {
|
|
@apply bg-[#d6e9ff] px-2 py-1 rounded text-sm;
|
|
}
|
|
|
|
.migration-note pre {
|
|
@apply bg-[#d6e9ff] border border-blue-400 p-3 my-3 rounded;
|
|
}
|
|
|
|
.migration-note pre code {
|
|
@apply bg-transparent p-0;
|
|
}
|
|
|
|
/* Anchor Links */
|
|
.zola-anchor {
|
|
@apply text-neutral-950 dark:text-neutral-50 no-underline hover:underline
|
|
}
|
|
.zola-anchor:hover::after {
|
|
content: " #";
|
|
}
|
|
|
|
/* Info Table - Responsive tables */
|
|
.info-table {
|
|
@apply overflow-x-auto;
|
|
max-width: 100%;
|
|
}
|
|
|
|
.info-table table {
|
|
@apply w-full;
|
|
}
|
|
|
|
/* First column (attributes) should not wrap */
|
|
.info-table td:first-child,
|
|
.info-table th:first-child {
|
|
white-space: nowrap;
|
|
width: 1%;
|
|
}
|
|
|
|
/* Second column takes remaining space and wraps */
|
|
.info-table td:last-child,
|
|
.info-table th:last-child {
|
|
width: 99%;
|
|
}
|
|
}
|
|
|
|
@utility scan-lines {
|
|
mask-size: 100% max(1.5px, 0.02em);
|
|
mask-image: linear-gradient(to bottom, transparent 0%, black 15%);
|
|
|
|
@variant dark {
|
|
mask-image: linear-gradient(to bottom, transparent 0%, black 30%);
|
|
}
|
|
}
|
|
|
|
@utility prose {
|
|
--tw-prose-body: var(--color-neutral-900);
|
|
--tw-prose-headings: var(--color-neutral-950);
|
|
--tw-prose-bold: var(--color-neutral-950);
|
|
--tw-prose-links: var(--color-blue-600);
|
|
|
|
--tw-prose-invert-body: var(--color-neutral-100);
|
|
--tw-prose-invert-headings: var(--color-neutral-50);
|
|
--tw-prose-invert-links: var(--color-blue-400);
|
|
}
|
|
@utility text-shadow-3d-* {
|
|
text-shadow:
|
|
0 0.0125em 0 color-mix(in srgb, --value(--color-*) 40%, transparent),
|
|
0 0.025em 0 color-mix(in srgb, --value(--color-*) 35%, transparent),
|
|
0 0.0375em 0 color-mix(in srgb, --value(--color-*) 30%, transparent),
|
|
0 0.05em 0 color-mix(in srgb, --value(--color-*) 25%, transparent),
|
|
0 0.0625em 0 color-mix(in srgb, --value(--color-*) 20%, transparent),
|
|
0 0.075em 0 color-mix(in srgb, --value(--color-*) 15%, transparent),
|
|
0 0.0875em 0 color-mix(in srgb, --value(--color-*) 12%, transparent),
|
|
0 0.1em 0 color-mix(in srgb, --value(--color-*) 10%, transparent),
|
|
0 0.125em 0 color-mix(in srgb, black 10%, transparent);
|
|
}
|