@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200');
.material-symbols-outlined {
font-family: 'Material Symbols Outlined';
font-weight: normal;
font-style: normal;
display: inline-block;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
-webkit-font-feature-settings: 'liga';
-webkit-font-smoothing: antialiased;
user-select: none;
font-variation-settings: 'FILL' 0, 'wght' 400, 'opsz' 20;
}
:root {
/* Native OS-Controls (selects, scrollbars) sollen dem aktuellen Theme
folgen. Wert wird im prefers-color-scheme: dark Block ueberschrieben. */
color-scheme: light;
/* === LIGHT MODE (RAPPORT cream + olive + deep green) === */
--bg-base: #e0dbd4;
--bg-panel: #e0dbd4;
--bg-section: #e0dbd4;
--bg-item: #e0dbd4;
--bg-item-hover: #d4cfc8;
--bg-input: #ece8e2;
--bg-dialog: #e4dfd7;
--bg-overlay: rgba(26, 26, 24, 0.36);
--border: #c8c2ba;
--border-light: #d4cfc8;
--border-focus: #2f5d54;
--text-primary: #1a1a18;
--text-secondary:#555550;
--text-muted: #8a8580;
--text-label: #1a1a18;
/* Petrol-Gruen (von Rapport-HTML uebernommen) */
--accent: #2f5d54;
--accent-light: #4a8a7c;
--accent-dim: #e6efed;
--accent-border: rgba(47, 93, 84, 0.35);
/* Active-Marker (aktives Geschoss / aktive Ebene) — saturiertes Petrol */
--active: #1a655a;
--active-light: #2f8275;
--active-dim: rgba(26, 101, 90, 0.10);
--warn: #b5621e;
--warn-light: #d47a30;
--warn-dim: #fdf0e8;
--danger: #8a1a1a;
--danger-light: #b03030;
--overlay-hover: rgba(26, 26, 24, 0.05);
--overlay-active:rgba(26, 26, 24, 0.10);
--r: 4px;
--r-lg: 8px;
--shadow-1: 0 1px 2px rgba(26,26,24,0.08);
--shadow-2: 0 2px 8px rgba(26,26,24,0.12);
--shadow-3: 0 6px 24px rgba(26,26,24,0.18);
--select-arrow: url("data:image/svg+xml;utf8,");
--font: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
--font-mono: 'DM Mono', 'SF Mono', monospace;
}
/* === DARK MODE (Rhino-tonig) === */
@media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
--bg-base: #2a2a2a;
--bg-panel: #2a2a2a;
--bg-section: #2a2a2a;
--bg-item: #2a2a2a;
--bg-item-hover: #353535;
--bg-input: #1f1f1f;
--bg-dialog: #2c2c2c;
--bg-overlay: rgba(0,0,0,0.55);
--border: #4a4a4a;
--border-light: #3d3d3d;
--border-focus: #5fa896;
--text-primary: #e8e8e8;
--text-secondary:#a8a8a8;
--text-muted: #707070;
--text-label: #c8c8c8;
/* Petrol-Gruen (von Rapport-HTML uebernommen) */
--accent: #5fa896;
--accent-light: #6db5a4;
--accent-dim: rgba(95, 168, 150, 0.15);
--accent-border: rgba(95, 168, 150, 0.4);
/* Active-Marker — saturiertes Petrol, distinct vom accent */
--active: #7dc8b8;
--active-light: #8ad1bf;
--active-dim: rgba(125, 200, 184, 0.16);
--warn: #d48030;
--warn-light: #e09040;
--warn-dim: rgba(212, 128, 48, 0.18);
--danger: #c85050;
--danger-light: #d86060;
--overlay-hover: rgba(255,255,255,0.06);
--overlay-active:rgba(255,255,255,0.10);
--shadow-1: 0 1px 2px rgba(0,0,0,0.30);
--shadow-2: 0 2px 8px rgba(0,0,0,0.40);
--shadow-3: 0 6px 24px rgba(0,0,0,0.55);
--select-arrow: url("data:image/svg+xml;utf8,");
}
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: var(--font);
font-size: 12px;
background: var(--bg-base);
color: var(--text-primary);
-webkit-font-smoothing: antialiased;
letter-spacing: 0.01em;
}
#root { display: flex; flex-direction: column; height: 100vh; overflow: hidden; }
button {
font-family: var(--font);
cursor: pointer;
border: none;
outline: none;
background: none;
color: inherit;
position: relative;
transition:
background 0.18s cubic-bezier(0.4, 0, 0.2, 1),
color 0.14s cubic-bezier(0.4, 0, 0.2, 1),
border-color 0.18s cubic-bezier(0.4, 0, 0.2, 1),
box-shadow 0.22s cubic-bezier(0.4, 0, 0.2, 1);
}
input, select {
font-family: var(--font-mono);
font-size: 11px;
background: var(--bg-input);
color: var(--text-primary);
border: 1px solid var(--border);
border-radius: var(--r);
padding: 5px 8px;
outline: none;
transition: border-color 0.16s, box-shadow 0.16s;
}
input:hover { border-color: var(--text-muted); }
input:focus, select:focus {
border-color: var(--accent);
box-shadow: 0 0 0 2px var(--accent-dim);
}
input[type="number"]::-webkit-inner-spin-button { opacity: 0.3; }
/* Pill-shaped select */
select {
appearance: none;
-webkit-appearance: none;
background-color: var(--bg-item);
background-image: var(--select-arrow);
background-repeat: no-repeat;
background-position: right 10px center;
padding: 5px 26px 5px 14px;
border-radius: 999px;
border: 1px solid var(--border);
font-family: var(--font);
font-weight: 500;
font-size: 10px;
letter-spacing: 0.04em;
cursor: pointer;
color: var(--text-primary);
}
select:hover {
background-color: var(--bg-item-hover);
border-color: var(--text-muted);
}
/* Opt-out: System-native Chrome (Oberleiste). Setzt die globalen
pill/appearance:none Overrides zurueck und ueberlaesst WebKit das
Rendering — Standard-macOS-Combobox + Native-Popup-Menue. */
select.native-control,
input.native-control {
appearance: auto;
-webkit-appearance: auto;
background: revert;
background-image: none;
border: revert;
border-radius: revert;
padding: revert;
font: revert;
letter-spacing: revert;
box-shadow: none;
}
select.native-control:hover,
input.native-control:hover {
background: revert;
border-color: revert;
}
select.native-control:focus,
input.native-control:focus {
box-shadow: revert;
border-color: revert;
}
/* Utility */
.label-xs {
font-size: 10px;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-muted);
}
/* --- Buttons --- */
.btn-outlined {
font-size: 10px;
font-weight: 500;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 4px 12px;
border-radius: 999px;
border: 1px solid var(--border);
background: var(--bg-item);
color: var(--text-secondary);
height: 26px;
display: inline-flex; align-items: center; justify-content: center;
gap: 4px;
}
.btn-outlined:hover {
background: var(--bg-item-hover);
border-color: var(--text-secondary);
color: var(--text-primary);
}
.btn-outlined:disabled {
opacity: 0.4;
cursor: not-allowed;
}
.btn-contained {
font-size: 10px;
font-weight: 500;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 5px 16px;
border-radius: 999px;
border: none;
background: var(--accent);
color: #fff;
box-shadow: var(--shadow-1);
height: 28px;
display: inline-flex; align-items: center; justify-content: center;
gap: 4px;
}
.btn-contained:hover {
background: var(--accent-light);
box-shadow: var(--shadow-2);
}
.btn-text {
font-size: 10px;
font-weight: 500;
letter-spacing: 0.08em;
text-transform: uppercase;
padding: 5px 12px;
border-radius: 999px;
background: transparent;
color: var(--text-secondary);
height: 28px;
display: inline-flex; align-items: center; justify-content: center;
}
.btn-text:hover {
background: var(--overlay-hover);
color: var(--text-primary);
}
/* Icon button (circular hover) */
.btn-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 26px;
height: 26px;
border-radius: 50%;
background: transparent;
color: var(--text-secondary);
font-size: 12px;
flex-shrink: 0;
}
.btn-icon:hover {
background: var(--overlay-hover);
color: var(--text-primary);
}
.btn-icon:active {
background: var(--overlay-active);
}
.btn-icon-sm {
display: inline-flex;
align-items: center;
justify-content: center;
width: 22px;
height: 22px;
border-radius: 50%;
background: transparent;
color: var(--text-muted);
flex-shrink: 0;
}
.btn-icon-sm:hover {
background: var(--overlay-hover);
color: var(--text-primary);
}
.btn-icon-sm.is-on {
color: var(--text-primary);
}
.btn-icon-xs {
display: inline-flex;
align-items: center;
justify-content: center;
width: 18px;
height: 18px;
border-radius: 50%;
background: transparent;
color: var(--text-muted);
flex-shrink: 0;
}
.btn-icon-xs:hover {
background: var(--overlay-hover);
color: var(--text-primary);
}
/* Icon button — danger variant */
.btn-icon-danger {
display: inline-flex;
align-items: center;
justify-content: center;
width: 26px;
height: 26px;
border-radius: 50%;
background: transparent;
color: var(--danger);
flex-shrink: 0;
}
.btn-icon-danger:hover {
background: var(--danger-light);
color: #fff;
}
.btn-icon-danger:disabled {
opacity: 0.35;
cursor: not-allowed;
}
/* Tonal icon button (subtle filled) */
.btn-icon-tonal {
display: inline-flex;
align-items: center;
justify-content: center;
width: 26px;
height: 26px;
border-radius: 50%;
background: var(--bg-item);
color: var(--text-secondary);
border: 1px solid var(--border);
flex-shrink: 0;
}
.btn-icon-tonal:hover {
background: var(--bg-item-hover);
color: var(--text-primary);
border-color: var(--text-secondary);
}
/* FAB-style add button */
.btn-add {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border-radius: 50%;
background: var(--accent);
color: #fff;
border: none;
box-shadow: var(--shadow-1);
}
.btn-add:hover {
background: var(--accent-light);
box-shadow: var(--shadow-2);
}
.btn-add:active {
box-shadow: var(--shadow-1);
}
/* Tiny stepper for lw etc. */
.btn-step {
display: inline-flex;
align-items: center;
justify-content: center;
width: 14px;
height: 10px;
border-radius: 2px;
background: transparent;
color: var(--text-muted);
line-height: 1;
}
.btn-step:hover {
background: var(--overlay-hover);
color: var(--text-primary);
}
/* Chip-style badge */
.chip {
font-size: 9px;
font-weight: 600;
letter-spacing: 0.06em;
padding: 2px 8px;
border-radius: 999px;
border: 1px solid var(--border);
background: var(--bg-item);
color: var(--text-secondary);
display: inline-flex; align-items: center;
}
.chip-accent {
background: var(--accent-dim);
border-color: var(--accent-border);
color: var(--accent);
}
.chip-info {
background: var(--active-dim);
border-color: rgba(26, 78, 138, 0.3);
color: var(--active);
}
.chip-warn {
background: var(--warn-dim);
border-color: rgba(181, 98, 30, 0.3);
color: var(--warn);
}