/* Kein backdrop-filter: bricht nach FiveM-Updates zu einem schwarzen Kasten auf. */ :root { --accent: #38bdf8; --accent-dim: rgba(56, 189, 248, 0.15); --warn: #fbbf24; --danger: #f87171; --text: #e2e8f0; --muted: #94a3b8; --panel: rgba(9, 18, 28, 0.72); --ring: 327; /* 2 * PI * 52, Umfang des Gauge-Kreises */ } * { margin: 0; padding: 0; box-sizing: border-box; } body { overflow: hidden; background: transparent; font-family: 'Segoe UI', 'Roboto', system-ui, sans-serif; user-select: none; } /* Grid statt Flex: so sitzen Tiefe, Ring und Druck garantiert auf einer gemeinsamen Mittelachse, und die Lampen-Leiste hängt in einer zweiten Zeile mittig unter dem Ring - ohne Ausgleichs-Margins. */ #hud { position: absolute; left: 50%; bottom: 7vh; transform: translateX(-50%) translateY(0); display: grid; grid-template-columns: auto auto auto; grid-template-rows: auto auto; align-items: center; justify-items: center; column-gap: 22px; row-gap: 8px; padding: 14px 22px; border-radius: 16px; background: var(--panel); border: 1px solid rgba(148, 163, 184, 0.18); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.45); color: var(--text); transition: opacity 220ms ease, transform 220ms ease; } #hud.hidden { opacity: 0; transform: translateX(-50%) translateY(14px); pointer-events: none; } /* --- Luft-Gauge --- */ .gauge { position: relative; width: 92px; height: 92px; grid-column: 2; grid-row: 1; } .gauge svg { width: 100%; height: 100%; transform: rotate(-90deg); } .gauge circle { fill: none; stroke-width: 8; stroke-linecap: round; } .gauge-track { stroke: rgba(148, 163, 184, 0.16); } .gauge-fill { stroke: var(--accent); stroke-dasharray: var(--ring); stroke-dashoffset: 0; transition: stroke-dashoffset 260ms linear, stroke 260ms ease; } .gauge-inner { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; } #air-value { font-size: 21px; font-weight: 600; font-variant-numeric: tabular-nums; letter-spacing: 0.5px; line-height: 1; } .caption { font-size: 9px; font-weight: 600; letter-spacing: 1.4px; color: var(--muted); text-transform: uppercase; } /* --- Tiefe + Lampe --- */ .readout { display: flex; flex-direction: column; gap: 3px; min-width: 84px; grid-row: 1; } /* Tiefe spiegelt den Druck: Werte zeigen jeweils zum Ring hin. */ .readout--right { align-items: flex-end; grid-column: 1; justify-self: end; } .readout--right .value { justify-content: flex-end; } #pressure { grid-column: 3; justify-self: start; } .value { display: flex; align-items: baseline; gap: 3px; font-size: 26px; font-weight: 600; font-variant-numeric: tabular-nums; line-height: 1; transition: color 260ms ease; } .unit { font-size: 13px; font-weight: 500; color: var(--muted); } .lamp { grid-column: 2; grid-row: 2; display: flex; align-items: center; gap: 6px; padding: 5px 9px; border-radius: 8px; background: rgba(148, 163, 184, 0.1); font-size: 10px; font-weight: 600; letter-spacing: 1.2px; text-transform: uppercase; color: var(--muted); transition: background 200ms ease, color 200ms ease; } .lamp svg { width: 13px; height: 13px; fill: currentColor; } .lamp.hidden { display: none; } .lamp.on { background: var(--accent-dim); color: var(--accent); } /* --- Warnzustaende --- */ #hud.warn .gauge-fill { stroke: var(--warn); } #hud.warn #air-value { color: var(--warn); } #hud.danger .gauge-fill { stroke: var(--danger); } #hud.danger #air-value { color: var(--danger); } #hud.danger .gauge { animation: pulse 1s ease-in-out infinite; } #hud.deep #depth-value { color: var(--warn); } /* Tiefengrenze des Atemgases überschritten - Tiefenrausch läuft. */ #hud.overlimit #depth-value { color: var(--danger); animation: pulse 1s ease-in-out infinite; } /* Reservedruck: in der Tauchpraxis die Schwelle zum Aufstieg. */ #pressure.reserve .value { color: var(--danger); } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.45; } }