Files
DOSSIER/src/index.css
T
karim 3277f61ced Oeffnungen-Sublayer + Sturzlinien + Referenz-Layer + Pill-Inputs + Anordnen-Pill
- Oeffnungen-Subtree (Rahmen/Glas/Tuerblatt/Sims/Pane/Schwung/Sturz) als
  nested Children unter WAENDE im dossier_ebenen-Tree registriert + per-Kind
  Material (Glas mit Transparenz)
- Sturzlinien bei 1:100 Tueren mit Innen/Aussen/Beide/Keine-Dropdown
- Referenzlinien-Layer (19) als eigene Ebene fuer wand_axis + oeffnung_point
- Swisstopo Patch-Terrain (Brep.CreatePatch) ersetzt das falsche Loft
- Pill-Style fuer alle Inputs zentral via index.css
- 2x2 Anordnen-Pill in der Oberleiste (BringToFront/Forward/Backward/SendToBack
  via Rhinos DisplayOrder, kein Z-Offset)
- Chevron-Verschiebung in Ebenen-Panel ohne dass Siblings shiften
- Fix: _update_ebene_field walked nur Top-Level, nested Sublayer-Style-
  Changes wurden nicht persistiert
- Fix: Sturz-Linetype wurde bei jedem Wand-Regen zurueckgesetzt

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 16:07:44 +02:00

486 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: 999px;
padding: 4px 12px;
outline: none;
transition: border-color 0.16s, background 0.16s, box-shadow 0.16s;
}
input:hover {
border-color: var(--accent);
background: var(--bg-item-hover);
}
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; }
/* Checkboxes + Color-Picker: kein Pill — native rendering. */
input[type="checkbox"], input[type="radio"], input[type="color"],
input[type="file"], input[type="range"] {
border-radius: 0;
padding: 0;
background: transparent;
}
input[type="checkbox"]:hover, input[type="radio"]:hover,
input[type="color"]:hover, input[type="file"]:hover,
input[type="range"]:hover {
background: transparent;
border-color: var(--border);
}
/* 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);
}