Files
xTeVe/html/css/base.css
T
nathan 3532679235
continuous-integration/drone/push Build is failing
Phase 5c: CSS layers and light theme
- html/css split into tokens.css (custom properties), base.css (reset,
  typography, focus, skip link), components.css (buttons, inputs, tables,
  status cards, popups, menu, log lines) and layout.css (shell, sidebar,
  header, breakpoints); screen.css removed. Selectors and declarations
  moved as-is; three pairs of conflicting rules resolved in favour of the
  one that already won the cascade, two empty rules dropped.
- Every literal colour outside tokens.css is now a token (category badge
  borders excepted). color-scheme set so native controls follow.
- Light theme under prefers-color-scheme: light, with explicit
  data-theme="light"/"dark" overrides on :root for a future toggle.
  Body text 13.6:1, muted text 5.4:1, accent 5.1:1 on the light background.
- HTML: lang="en" everywhere, one h1 per page, maintenance page uses
  <main>, an id typo fixed.
2026-09-26 13:34:51 +10:00

353 lines
5.2 KiB
CSS

/*
* base.css - reset, typography, links, focus styles, skip link, generic
* form elements and small utility classes. Loaded after tokens.css.
*/
* {
-webkit-appearance: none;
-moz-appearance: none;
-ms-appearance: none;
box-sizing: border-box;
font-family: var(--font-sans);
letter-spacing: 0.02em;
}
::-webkit-scrollbar {
width: 11px;
height: 11px;
}
::-webkit-scrollbar-track {
border-radius: 999px;
background: var(--scroll-track);
}
::-webkit-scrollbar-thumb {
border-radius: 999px;
border: 2px solid var(--scroll-track);
background: linear-gradient(180deg, var(--scroll-thumb-a), var(--scroll-thumb-b));
}
::-webkit-scrollbar-thumb:hover {
background: linear-gradient(180deg, var(--scroll-thumb-hover-a), var(--scroll-thumb-hover-b));
}
::-webkit-scrollbar-corner {
background: transparent;
}
html,
body {
min-height: 100%;
margin: 0;
color: var(--text);
font-size: 14px;
background:
radial-gradient(circle at 15% 12%, var(--bg-glow-1), transparent 32%),
radial-gradient(circle at 88% 2%, var(--bg-glow-2), transparent 30%),
linear-gradient(180deg, var(--bg-1) 0%, var(--bg-0) 56%, var(--bg-deep) 100%);
}
body {
line-height: 1.45;
}
a {
color: var(--accent);
}
a:hover {
color: var(--accent-hover);
}
h1,
h2,
h3,
h4,
h5 {
margin: 0;
font-weight: 600;
letter-spacing: 0.03em;
}
h1 {
font-size: 1.72rem;
}
h2 {
font-size: 1.35rem;
}
h3 {
font-size: 1.2rem;
}
h4 {
font-size: 1.05rem;
}
h5 {
font-size: 0.92rem;
margin: 8px 0;
color: var(--text-muted);
}
p {
margin: 0;
padding: 0;
}
pre {
margin: 0;
color: var(--text-muted);
font-size: 12px;
white-space: pre-wrap;
line-height: 1.55;
letter-spacing: 0.015em;
font-family: var(--font-mono);
}
hr {
border: 0;
height: 1px;
margin: 12px 0;
background: linear-gradient(90deg, transparent, var(--line), transparent);
}
label {
margin-bottom: 8px;
display: block;
}
li {
list-style-type: none;
cursor: pointer;
transition: all 0.25s ease;
}
select,
input,
textarea,
button {
outline: none;
color: var(--text);
font-size: 13px;
}
:focus-visible {
outline: 2px solid var(--focus-ring-soft);
outline-offset: 2px;
}
input,
select {
margin: 4px 0;
}
input[type=text],
input[type=search],
input[type=password],
input[type=number],
select,
textarea {
width: 100%;
border-radius: var(--radius-s);
border: 1px solid var(--line);
background-color: var(--surface-input);
color: var(--text);
padding: 10px 11px;
transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
}
input[type=text]:focus,
input[type=search]:focus,
input[type=password]:focus,
input[type=number]:focus,
select:focus,
textarea:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-ring);
background-color: var(--surface-input-focus);
}
input[type=text]::placeholder,
input[type=search]::placeholder,
input[type=password]::placeholder,
textarea::placeholder {
color: var(--text-placeholder);
}
input[type=button]:focus-visible,
input[type=submit]:focus-visible,
button:focus-visible,
input[type=checkbox]:focus-visible,
a:focus-visible,
select:focus-visible,
textarea:focus-visible,
input[type=text]:focus-visible,
input[type=search]:focus-visible,
input[type=password]:focus-visible,
input[type=number]:focus-visible {
outline: 2px solid var(--focus-ring);
outline-offset: 2px;
}
.skip-link {
position: absolute;
top: 10px;
left: 10px;
z-index: 2600;
border-radius: 999px;
padding: 8px 12px;
font-size: 12px;
font-weight: 700;
color: var(--text-on-accent);
background: var(--accent-gradient);
transform: translateY(-180%);
transition: transform 0.2s ease;
}
.skip-link:focus-visible {
transform: translateY(0);
}
.sr-only {
border: 0 !important;
clip: rect(0 0 0 0) !important;
height: 1px !important;
margin: -1px !important;
overflow: hidden !important;
padding: 0 !important;
position: absolute !important;
white-space: nowrap !important;
width: 1px !important;
}
/* Utility classes */
.pointer {
cursor: pointer;
}
.pointer:hover {
color: var(--accent);
}
.sortThis {
color: var(--accent);
}
.w40px {
max-width: 40px;
}
.w50px {
max-width: 50px;
}
.w80px {
max-width: 80px;
}
.w150px {
max-width: 150px;
}
.w200px {
max-width: 200px;
min-width: 100px;
width: 200px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.w220px {
max-width: 220px;
cursor: alias;
}
.w300px {
max-width: 300px;
}
.footer {
font-size: 11px;
}
.center {
text-align: center;
}
.floatRight {
float: right;
}
.floatLeft {
float: left;
}
.borderSpace {
margin-bottom: 30px;
}
.block {
display: block;
}
.none {
display: none;
}
.showBulk {
display: inline-flex;
}
.hideBulk {
display: none;
}
.notVisible {
display: none;
opacity: 0;
height: 0;
}
.visible {
display: block;
opacity: 1;
}
.half {
width: 45%;
}
.tableEllipsis {
width: 150px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes popupIn {
0% {
opacity: 0;
transform: translateY(7px) scale(0.99);
}
100% {
opacity: 1;
transform: translateY(0) scale(1);
}
}