Files
DOSSIER/src/index.css
T
karim e19bbafe38 .native-control auch fuer Buttons — View-Toggle + BarButton system-nativ
User-Screenshot: dropdowns waren native, aber View-Toggle (Top/Front/...)
und die Icon-Buttons (Camera/Gear/Zoom/etc.) sahen weiterhin custom aus.

Grund: globales `button { border: none; background: none; }` strippt das
System-Push-Button-Styling fuer alle <button>s. `.native-control` deckte
nur select + input ab.

Fix:
- `.native-control` erweitert auf `button.native-control`: revert auf
  alle Button-Reset-Properties → WebKit rendert macOS-Push-Button-Chrome
- `.is-active`-Modifier: bold + accent-Tint fuer Toggle-Active-State
  (macOS-Native hat keinen "pressed-Toggle"-Look fuer normale Buttons)
- BarButton: className="native-control" + active=true → is-active
- View-Toggle (Top/Front/Right/Iso/Persp): pill-Container weg,
  individuelle native buttons mit is-active wenn matchView() true

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 22:18:37 +02:00

470 lines
12 KiB
CSS
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path d='M0 0l5 6 5-6z' fill='%23555550'/></svg>");
--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,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path d='M0 0l5 6 5-6z' fill='%23a8a8a8'/></svg>");
}
}
*, *::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. Gilt auch
fuer <button> die im globalen button{} alles abgestreift kriegen. */
select.native-control,
input.native-control,
button.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;
transition: none;
color: revert;
}
select.native-control:hover,
input.native-control:hover,
button.native-control:hover {
background: revert;
border-color: revert;
}
select.native-control:focus,
input.native-control:focus,
button.native-control:focus {
box-shadow: revert;
border-color: revert;
}
/* Default-Push-Button-Variante fuer aktive Toggles. macOS rendert das
als geful­ltes blaues Pulsing-Button — wir tinten es via accent-color. */
button.native-control.is-active {
font-weight: 600;
}
/* 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);
}