3277f61ced
- 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>
486 lines
12 KiB
CSS
486 lines
12 KiB
CSS
@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 gefulltes 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);
|
||
}
|