Files
htmx/www/static/css/input.css
2025-11-10 11:12:51 -07:00

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);
}