:root { --paddingSite: 40px; --card-radius: 20px; --card-bg: #ffffff; --bg: #FDFDFD; --bg-top: rgb(74, 85, 104); --bg-top-raw: 74 85 104; --card-shadow: 0 10px 30px rgba(15, 23, 42, 0.08); --accent: #4a5568; --accent-soft: #f0f5ff; --border-subtle: #d4d7e1; --text-main: #191919; --text-muted: #5e5e5e; --disabled-bg: #f3f4f6; --disabled-border: #cbd5f5; } /* ── Base ─────────────────────────────────────────────── */ *, *::after, *::before { box-sizing: border-box; -webkit-tap-highlight-color: transparent; font-family: "Google Sans Flex", sans-serif; font-optical-sizing: auto; font-style: normal; font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0, "ROND" 0; } .hidden { display: none !important; } html, body, section { margin: 0; overscroll-behavior: none; } body { margin: 0; width: 100vw; background: var(--bg); } ::selection { background: #0000003d; color: #ffffffff; } ::-moz-selection { background: #a4bf4a99; color: #000; } input { border: none; } /* ── Layout ───────────────────────────────────────────── */ .bgSection { position: relative; margin-left: auto; width: 100vw; box-sizing: border-box !important; background: none; } @media (min-width: 1000px) { .bgSection.open { width: calc(100vw - 380px); } } /* ── Header ───────────────────────────────────────────── */ .headerDivTrainer { padding: var(--paddingSite); background-color: var(--bg-top); margin-bottom: var(--paddingSite); position: relative; z-index: 3; display: flex; justify-content: space-between; align-items: center; } .headingPanelDiv { display: flex; flex-direction: column; } .headingPanelDiv>* { color: var(--bg); } .headingPanel { margin: 0; font-weight: 200; } /* ── Actions bar (new user / new verein) ──────────────── */ .bg-erfassen { display: flex; flex-wrap: wrap; gap: 12px; padding: 0 var(--paddingSite) 10px; } .bg-erfassen button[type="submit"] { appearance: none; border: 1px dashed var(--accent); background: none; color: var(--text-main); padding: 10px 22px; border-radius: 8px; font-size: 0.95rem; font-weight: 500; cursor: pointer; height: 39px; transition: all 0.25s ease; } .bg-erfassen button[type="submit"]:hover { background: var(--bg-top); border-color: var(--bg-top); color: #fff; } /* ── Section headings (Vereine / Benutzer) ────────────── */ h3.vereine, h3.benutzer { padding: 0 var(--paddingSite); font-weight: 400; font-size: 1.15rem; color: var(--text-main); margin: 30px 0 12px; letter-spacing: 0.02em; } /* ── Inner section (card list) ────────────────────────── */ .inner-pw-set-bg { padding: 0 var(--paddingSite); display: flex; flex-direction: column; gap: 14px; margin-bottom: 20px; align-items: start; } /* ── User / Verein card ───────────────────────────────── */ .single_pwedit, .newUserLink { background: var(--card-bg); border-radius: var(--card-radius); box-shadow: var(--card-shadow); padding: 24px 28px; transition: box-shadow 0.25s ease; } .single_pwedit:hover, .newUserLink:hover { box-shadow: 0 14px 40px rgba(15, 23, 42, 0.12); } .single_pwedit.verein, .newUserLink.verein { border-left: 4px solid var(--bg-top); } /* ── Form fields inside user card ─────────────────────── */ .single_pwedit form, .newUserLink form { display: flex; flex-wrap: wrap; gap: 14px 24px; align-items: flex-end; } .single_pwedit label, .newUserLink label { display: block; font-size: 0.8rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); margin-bottom: 5px; } .single_pwedit .field-group, .newUserLink .field-group { flex: 1 1 200px; min-width: 0; } .single_pwedit input[type="text"], .newUserLink input[type="text"] { width: 100%; padding: 9px 12px; border: 1px dashed #999; border-radius: 6px; font-size: 0.95rem; font-weight: 300; color: var(--text-main); background: #fff; transition: border-color 0.2s ease, box-shadow 0.2s ease; } .single_pwedit input[type="text"]:focus, .newUserLink input[type="text"]:focus { outline: none; border: 1px solid var(--bg-top); box-shadow: 0 0 0 3px rgba(var(--bg-top-raw) / 0.12); } .single_pwedit input[type="text"]::placeholder, .newUserLink input[type="text"]::placeholder { color: #b0b0b0; font-style: italic; } /* ── Buttons inside cards ─────────────────────────────── */ .single_pwedit button[type="submit"], .newUserLink button[type="submit"] { appearance: none; border: 1px solid #7777778e; background: #7777778e; color: var(--bg); padding: 9px 20px; border-radius: 6px; font-size: 0.9rem; font-weight: 400; cursor: pointer; transition: all 0.25s ease; white-space: nowrap; } .single_pwedit button[type="submit"]:hover, .newUserLink button[type="submit"]:hover { background: var(--bg-top); border-color: var(--bg-top); color: #fff; font-weight: 600; } .delete-user-btn, .delete-verein-btn { appearance: none; background: none; border: 1px solid #fca5a5; color: #b91c1c; padding: 8px 18px; border-radius: 6px; font-size: 0.85rem; font-weight: 500; cursor: pointer; margin-top: 10px; transition: all 0.25s ease; } .delete-user-btn:hover, .delete-verein-btn:hover { background: #fef2f2; border-color: #ef4444; color: #dc2626; } .createOturl { appearance: none; background: none; border: 1px solid var(--border-subtle); color: var(--text-muted); padding: 8px 18px; border-radius: 6px; font-size: 0.85rem; font-weight: 500; cursor: pointer; margin-top: 10px; margin-left: 8px; transition: all 0.25s ease; } .createOturl:hover { background: var(--accent-soft); border-color: var(--bg-top); color: var(--bg-top); } .bgNewUserLink { position: fixed; top: 0; left: 0; height: 100dvh; width: 100dvw; display: flex; align-items: center; justify-content: center; background-color: #39393941; backdrop-filter: blur(2px); } .newUserLink { max-width: 600px; max-height: 500px; overflow-y: auto; z-index: 9999; } /* ── Permission dropdown ──────────────────────────────── */ .perm-section { width: 100%; margin-top: 12px; border: 1px solid #e5e7eb; border-radius: 10px; overflow: hidden; transition: box-shadow 0.2s ease; } .perm-section:hover { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04); } .perm-section-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; background: #f9fafb; cursor: pointer; user-select: none; transition: background 0.15s ease; } .perm-section-header:hover { background: #f3f4f6; } .perm-section-title { font-size: 0.85rem; font-weight: 600; color: var(--text-main); display: flex; align-items: center; gap: 8px; } .perm-section-title .perm-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 22px; padding: 0 6px; border-radius: 11px; background: var(--bg-top); color: #fff; font-size: 0.7rem; font-weight: 700; } .perm-section-chevron { width: 20px; height: 20px; transition: transform 0.3s ease; color: var(--text-muted); } .perm-section.open .perm-section-chevron { transform: rotate(180deg); } .perm-section-body { max-height: 0; overflow: hidden; transition: max-height 0.35s cubic-bezier(0.4, 0, 0.2, 1), padding 0.35s cubic-bezier(0.4, 0, 0.2, 1); padding: 0 16px; } .perm-section.open .perm-section-body { max-height: 500px; padding: 12px 16px 16px; } .perm-section-body label { display: flex; align-items: center; gap: 8px; padding: 6px 0; font-size: 0.9rem; font-weight: 400; color: var(--text-main); text-transform: none; letter-spacing: 0; cursor: pointer; transition: color 0.15s ease; } .perm-section-body label:hover { color: var(--bg-top); } .perm-section-body input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--bg-top); cursor: pointer; flex-shrink: 0; } /* ── Programme section ────────────────────────────────── */ section:has(> div > h1) { padding: 0 var(--paddingSite) var(--paddingSite); } section h1 { font-weight: 400; font-size: 1.3rem; color: var(--text-main); margin-bottom: 16px; } .neuProgrammForm { display: flex; gap: 12px; margin-bottom: 20px; align-items: center; } .neuProgrammForm input[type="text"] { padding: 9px 12px; border: 1px dashed #999; border-radius: 6px; font-size: 0.95rem; font-weight: 300; color: var(--text-main); min-width: 200px; transition: border-color 0.2s ease; } .neuProgrammForm input[type="text"]:focus { outline: none; border-color: var(--bg-top); } .neuProgrammForm input[type="submit"] { padding: 9px 20px; border: 1px solid #7777778e; background: #7777778e; color: var(--bg); border-radius: 6px; font-size: 0.9rem; cursor: pointer; transition: all 0.25s ease; } .neuProgrammForm input[type="submit"]:hover { background: var(--bg-top); border-color: var(--bg-top); color: #fff; } /* ── Programme table ──────────────────────────────────── */ table { border-collapse: collapse; margin: 0; padding: 0; width: 100%; } .wkvsTabelle th { color: #424242; border-bottom: solid 1px #0000007d; font-weight: 600; padding: 14px 15px; font-size: 16px; } .wkvsTabelle td { background: none; color: #191919; font-weight: 400; padding: 10px 15px; border-bottom: solid 1px #6262624d; } .wkvsTabelle.trainer td { padding: 8px 15px; } .wkvsTabelle tr:hover { background-color: #f4f4f4; } .inputPreisProgramm, .inputAktivProgramm { padding: 6px 10px; border: 1px dashed #999; border-radius: 4px; font-size: 0.9rem; transition: border-color 0.2s ease, background-color 0.4s ease; } .inputPreisProgramm:focus, .inputAktivProgramm:focus { outline: none; border-color: var(--bg-top); } input[type="number"] { -moz-appearance: textfield; } input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } .deleteProgramm { appearance: none; background: none; border: none; cursor: pointer; } select { appearance: none; -webkit-appearance: none; -moz-appearance: none; width: 100%; padding: 8px 35px 8px 12px !important; font-size: 14px; border: 1px solid #ccc; border-radius: 6px; background-color: #fff; background-image: url("data:image/svg+xml;utf8,"); background-repeat: no-repeat; background-position: right 10px center; background-size: 18px; cursor: pointer; } /* ── One-time URL Modal ───────────────────────────────── */ .ot-modal { display: none; position: fixed; inset: 0; background: rgba(0, 0, 0, 0.4); backdrop-filter: blur(4px); z-index: 9999; align-items: center; justify-content: center; } .ot-modal-content { background: #fff; border-radius: 16px; padding: 28px 32px; max-width: 520px; width: 90%; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2); } .ot-modal-top-content { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } .ot-title { font-size: 1.1rem; font-weight: 600; color: var(--text-main); } .ot-close-btn { appearance: none; background: none; border: none; font-size: 1.3rem; color: #888; cursor: pointer; transition: color 0.2s ease; padding: 4px 8px; } .ot-close-btn:hover { color: #d63638; } .ot-url { display: block; word-break: break-all; padding: 12px 16px; background: #f9fafb; border: 1px solid #e5e7eb; border-radius: 8px; color: var(--bg-top); font-size: 0.85rem; font-weight: 500; margin-bottom: 12px; text-decoration: none; transition: background 0.2s ease; } .ot-url:hover { background: #f0f1f3; } #oturlGb { font-size: 0.82rem; color: var(--text-muted); margin: 0 0 16px; } .ot-copy-btn { appearance: none; width: 100%; padding: 10px; background: var(--bg-top); color: #fff; border: none; border-radius: 8px; font-size: 0.95rem; font-weight: 600; cursor: pointer; transition: filter 0.2s ease; } .ot-copy-btn:hover { filter: brightness(1.15); } /* ── Success / Error Overlays ─────────────────────────── */ .divSucsess, .divError { position: fixed; bottom: 30px; right: 30px; padding: 14px 28px; border-radius: 10px; font-weight: 600; font-size: 0.95rem; z-index: 10000; transform: translateX(calc(100% + 60px)); transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); } .divSucsess { background: #ecfdf3; color: #15803d; border-left: 4px solid #4ade80; } .divError { background: #fef2f2; color: #b91c1c; border-left: 4px solid #fca5a5; } .divSucsess.show, .divError.show { transform: translateX(0); } /* ── Loading overlays ─────────────────────────────────── */ #loading-overlay, #new-overlay, #new-reload { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 9999; text-align: center; } #loading-overlay, #new-overlay { background: rgba(0, 0, 0, 0.5); } #new-reload { background: rgba(0, 100, 0, 0.5); } #loading-overlay>div, #new-overlay>div, #new-reload>div { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: white; font-size: 1.2rem; font-weight: 400; } /* ── Burger / sidebar (shared with other pages) ───────── */ .trainerBurgerMenuDiv { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; cursor: pointer; z-index: 99; color: var(--bg); } .trainerBurgerMenuDiv svg { width: 100%; height: 100%; stroke: currentColor; transition: transform 0.3s ease; } .trainerBurgerMenuDiv.open svg { transform: rotate(-90deg); } .internMenuDiv { background-color: #fff; box-shadow: none; position: fixed; left: 0; top: 0; height: 100svh; width: 100%; max-width: 380px; transform: translateX(-100%); z-index: 100; padding: 20px; transition: transform 0.45s cubic-bezier(.4, 0, .2, 1); opacity: 1; } .internMenuDiv.open { transform: translateX(0); box-shadow: 4px 0 20px rgba(0, 0, 0, 0.15); } .innerInternMenuDiv { display: flex; flex-direction: column; gap: 14px; height: 100dvh; overflow-y: auto; padding-bottom: 80px; } .innerInternMenuDiv input[type="submit"], .innerInternMenuDiv select { width: 100%; padding: 12px 14px; border-radius: 10px; border: 1px solid #ccc; font-size: 0.95rem; transition: all 0.3s ease; } .innerInternMenuDiv input[type="submit"]:focus, .innerInternMenuDiv select:focus { outline: none; border-color: var(--bg-top); box-shadow: 0 0 6px rgba(var(--bg-top-raw) / 0.3); } .innerInternMenuDiv .button-secondary { background: linear-gradient(135deg, var(--bg-top), #1f4f75); color: #fff; border: none; border-radius: 12px; font-weight: 600; cursor: pointer; padding: 12px 18px; transition: transform 0.2s ease, background 0.3s ease; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); } .innerInternMenuDiv .button-secondary:hover { filter: brightness(0.9); transform: translateY(-2px); } .footerInternMenu { display: flex; flex-direction: row; justify-content: space-between; position: absolute; bottom: 12px; gap: 40px; width: calc(100% - 40px); } .footerInternMenu>* { display: flex; } .menuBg { position: fixed; inset: 0; z-index: 98; user-select: none; pointer-events: none; opacity: 0; } .menuBg.menuTransition { transition: opacity 0.6s ease-out; } .menuTransition { transition: all 0.6s ease-out; } .closeInternMenuMobileDiv { display: none; width: 5vw; height: 100px; position: absolute; top: 30px; right: -5vw; background-color: #09090966; border-radius: 0 10px 10px 0; } /* ── Responsive ───────────────────────────────────────── */ @media (max-width: 480px) { .internMenuDiv { max-width: 95vw; } .internMenuDiv.open .closeInternMenuMobileDiv { display: block; } } @media (max-width: 600px) { :root { --paddingSite: 20px; } .single_pwedit { padding: 18px 16px; border-radius: 14px; } .single_pwedit form { flex-direction: column; } .single_pwedit .field-group { flex: 1 1 100%; } .bg-erfassen { flex-direction: column; } } @media (min-width: 768px) { .inner-pw-set-bg { display: grid; grid-template-columns: repeat(auto-fill, minmax(420px, 1fr)); } } .checkbox { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; position: relative; } .checkbox input { position: absolute; top: 0; left: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; pointer-events: all; } /* Custom box */ .checkbox-ui { width: 16px; height: 16px; background: rgb(212, 212, 212); border-radius: 3px; display: inline-flex; align-items: center; justify-content: center; transition: background 0.2s, border-color 0.2s; } /* Checked state */ .checkbox input:checked+.checkbox-ui, .checkbox-ui.manuelChecked { background: #1cde60ff; } /* Focus state */ .checkbox input:focus-visible+.checkbox-ui { outline: 2px solid #93c5fd; outline-offset: 2px; } .addRow input { padding: 6px 10px; border: 1px dashed var(--bg-top); border-radius: 4px; font-size: 0.9rem; width: 100%; } .addRow button { padding: 6px 14px; border: 1px solid var(--bg-top); background: var(--bg-top); color: #fff; border-radius: 4px; font-size: 0.85rem; font-weight: 500; cursor: pointer; transition: all 0.2s; } .containerSection { padding: var(--paddingSite) calc(var(--paddingSite) * 1.5); margin-bottom: var(--paddingSite); } #qrcode { display: inline-flex; padding: 12px 16px; background: #f9fafb; border: 1px solid #e5e7eb; border-radius: 8px; color: var(--bg-top); font-size: 0.85rem; font-weight: 500; margin-bottom: 12px; text-decoration: none; transition: background 0.2s ease; } .qrcodeWrapper { display: flex; align-items: center; justify-content: center; margin: 30px 0; }