Files
WKVS/www/intern/css/einstellungen-ai.css
T

1064 lines
21 KiB
CSS

/* =========================================================
WKVS Einstellungen — Clean responsive UI
File: /intern/css/einstellungen.css
========================================================= */
/* ---------- Design tokens ---------- */
:root {
color-scheme: light;
--ui-bg: #f6f7f9;
--ui-bg-soft: #ffffff;
--ui-bg-muted: #eef1f5;
--ui-surface: rgba(255, 255, 255, 0.88);
--ui-surface-solid: #ffffff;
--ui-surface-raised: #ffffff;
--ui-text: #172033;
--ui-text-soft: #4e5a6d;
--ui-text-muted: #7b8494;
--ui-border: #dfe4ea;
--ui-border-soft: #edf0f4;
--ui-primary: #2563eb;
--ui-primary-hover: #1d4ed8;
--ui-primary-soft: rgba(37, 99, 235, 0.1);
--ui-success: #16a34a;
--ui-danger: #dc2626;
--ui-danger-soft: rgba(220, 38, 38, 0.08);
--ui-focus: rgba(37, 99, 235, 0.3);
--ui-radius-sm: 8px;
--ui-radius: 14px;
--ui-radius-lg: 20px;
--ui-shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.05);
--ui-shadow: 0 10px 30px rgba(15, 23, 42, 0.08);
--ui-shadow-hover: 0 16px 40px rgba(15, 23, 42, 0.12);
--ui-container-max: 1680px;
--ui-header-height: 76px;
/* Compatibility with existing inline styles */
--bg-top: var(--ui-primary);
--main-button: #36454F;
}
/* Optional manual theme override */
[data-theme="light"] {
color-scheme: light;
}
[data-theme="dark"] {
color-scheme: dark;
--ui-bg: #0f141d;
--ui-bg-soft: #141a24;
--ui-bg-muted: #1a2230;
--ui-surface: rgba(22, 29, 41, 0.9);
--ui-surface-solid: #161d29;
--ui-surface-raised: #1b2432;
--ui-text: #eef3fb;
--ui-text-soft: #c6cfdd;
--ui-text-muted: #8f9bad;
--ui-border: #2d3748;
--ui-border-soft: #222b3a;
--ui-primary: #60a5fa;
--ui-primary-hover: #3b82f6;
--ui-primary-soft: rgba(96, 165, 250, 0.14);
--ui-success: #22c55e;
--ui-danger: #f87171;
--ui-danger-soft: rgba(248, 113, 113, 0.12);
--ui-focus: rgba(96, 165, 250, 0.35);
--ui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.24);
--ui-shadow: 0 14px 36px rgba(0, 0, 0, 0.32);
--ui-shadow-hover: 0 20px 50px rgba(0, 0, 0, 0.42);
--bg-top: var(--ui-primary-hover);
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
color-scheme: dark;
--ui-bg: #0f141d;
--ui-bg-soft: #141a24;
--ui-bg-muted: #1a2230;
--ui-surface: rgba(22, 29, 41, 0.9);
--ui-surface-solid: #161d29;
--ui-surface-raised: #1b2432;
--ui-text: #eef3fb;
--ui-text-soft: #c6cfdd;
--ui-text-muted: #8f9bad;
--ui-border: #2d3748;
--ui-border-soft: #222b3a;
--ui-primary: #60a5fa;
--ui-primary-hover: #3b82f6;
--ui-primary-soft: rgba(96, 165, 250, 0.14);
--ui-success: #22c55e;
--ui-danger: #f87171;
--ui-danger-soft: rgba(248, 113, 113, 0.12);
--ui-focus: rgba(96, 165, 250, 0.35);
--ui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.24);
--ui-shadow: 0 14px 36px rgba(0, 0, 0, 0.32);
--ui-shadow-hover: 0 20px 50px rgba(0, 0, 0, 0.42);
--bg-top: var(--ui-primary-hover);
}
}
/* ---------- Base ---------- */
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
min-height: 100%;
background: var(--ui-bg);
}
body.einstellungen {
min-height: 100vh;
margin: 0;
background:
radial-gradient(circle at top left, var(--ui-primary-soft), transparent 34rem),
linear-gradient(180deg, var(--ui-bg), var(--ui-bg-muted));
color: var(--ui-text);
font-family:
Inter,
system-ui,
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
sans-serif;
font-size: 15px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
body.einstellungen div:not(.sidebar) a {
color: var(--ui-primary);
text-decoration: none;
text-underline-offset: 0.2em;
}
body.einstellungen div:not(.sidebar) a:hover {
text-decoration: underline;
}
body.einstellungen p {
margin: 0 0 0.8rem;
color: var(--ui-text-soft);
}
body.einstellungen b,
body.einstellungen strong {
color: var(--ui-text);
}
.light {
color: var(--ui-text-muted);
font-weight: 500;
}
/* ---------- Main layout ---------- */
.bgSection {
min-height: 100vh;
width: 100%;
padding: 1rem;
}
.headerDivTrainer {
position: sticky;
top: 0;
z-index: 20;
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
max-width: var(--ui-container-max);
min-height: var(--ui-header-height);
margin: 0 auto 1rem;
padding: 1rem 1.1rem;
background: color-mix(in srgb, var(--ui-surface-solid) 88%, transparent);
border: 1px solid var(--ui-border-soft);
border-radius: var(--ui-radius-lg);
box-shadow: var(--ui-shadow-sm);
backdrop-filter: blur(14px);
}
.headingPanelDiv {
display: flex;
align-items: center;
min-width: 0;
}
.headingPanel {
margin: 0;
color: var(--ui-text);
font-size: clamp(1.45rem, 2.5vw, 2.05rem);
font-weight: 750;
letter-spacing: -0.04em;
}
.menuWrapper {
display: flex;
align-items: center;
justify-content: flex-end;
flex: 0 0 auto;
}
.dashboardGrid {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 1rem;
max-width: var(--ui-container-max);
margin: 0 auto;
}
.twoColumDiv {
min-width: 0;
}
.twoColumDiv > div {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1rem;
}
/* ---------- Cards / sections ---------- */
.containerDiv {
position: relative;
min-width: 0;
padding: clamp(1rem, 2vw, 1.4rem);
background: var(--ui-surface);
border: 1px solid var(--ui-border-soft);
border-radius: var(--ui-radius-lg);
box-shadow: var(--ui-shadow);
backdrop-filter: blur(16px);
}
.containerDiv + .containerDiv,
.firstDiv + .secondDiv {
margin-top: 1rem;
}
.twoColumDiv .containerDiv + .containerDiv {
margin-top: 0;
}
.containerHeading {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: 0.35rem;
margin: 0 0 1rem;
color: var(--ui-text);
font-size: clamp(1.05rem, 1.4vw, 1.25rem);
font-weight: 720;
letter-spacing: -0.025em;
}
.containerDiv h3:not(.containerHeading) {
margin: 0 0 0.7rem;
color: var(--ui-text);
font-size: 1rem;
font-weight: 700;
letter-spacing: -0.015em;
}
/* ---------- Settings grids ---------- */
.settingsGrid {
display: grid;
grid-template-columns: 1fr;
gap: 1rem;
}
.settingsRowGroup,
.subSettingsRowGroup {
display: grid;
gap: 0.8rem;
align-content: start;
min-width: 0;
}
.subSettingsRowGroup {
padding: 0.9rem;
background: color-mix(in srgb, var(--ui-bg-soft) 70%, transparent);
border: 1px solid var(--ui-border-soft);
border-radius: var(--ui-radius);
}
.settingsRow {
display: grid;
grid-template-columns: minmax(160px, 0.95fr) minmax(190px, 1.2fr);
align-items: center;
gap: 0.75rem;
min-width: 0;
}
.settingsRow > span:not(.light), .settingsRow > div > span:not(.light) {
color: var(--ui-text-soft);
font-size: 0.92rem;
font-weight: 600;
}
/* ---------- Form controls ---------- */
body.einstellungen div:not(.clr-picker) input:not(.abmeldenbutton),
body.einstellungen select,
body.einstellungen textarea,
.paddingNormal.selectTrigger {
width: 100%;
max-width: 100%;
min-height: 40px;
color: var(--ui-text);
background: var(--ui-surface-solid);
border: 1px solid var(--ui-border);
border-radius: 10px;
outline: none;
font: inherit;
transition:
border-color 160ms ease,
box-shadow 160ms ease,
background-color 160ms ease,
transform 160ms ease;
}
body.einstellungen input:not([type="checkbox"]):not([type="file"]):not(.abmeldenbutton),
body.einstellungen select,
body.einstellungen textarea {
padding: 0.55rem 0.7rem;
}
/* Override inline table input styles without affecting layout */
.wkvsTabelle input:not([type="checkbox"]),
.wkvsTabelle select,
.addRow input:not([type="checkbox"]) {
padding: 0.5rem 0.65rem !important;
color: var(--ui-text) !important;
background: var(--ui-surface-solid) !important;
border: 1px solid var(--ui-border) !important;
border-radius: 9px !important;
}
.wkvsTabelle tbody tr:not(.addRow) input:not([type="checkbox"]),
.wkvsTabelle tbody tr:not(.addRow) select {
border-style: dashed !important;
}
body.einstellungen input::placeholder,
body.einstellungen textarea::placeholder {
color: var(--ui-text-muted);
}
body.einstellungen input:focus,
body.einstellungen select:focus,
body.einstellungen textarea:focus,
.paddingNormal.selectTrigger:focus {
border-color: var(--ui-primary);
box-shadow: 0 0 0 4px var(--ui-focus);
}
body.einstellungen input:hover,
body.einstellungen select:hover,
body.einstellungen textarea:hover,
.paddingNormal.selectTrigger:hover {
border-color: color-mix(in srgb, var(--ui-primary) 55%, var(--ui-border));
}
input[type="file"] {
padding: 0.55rem;
cursor: pointer;
}
input[type="file"]::file-selector-button {
margin-right: 0.75rem;
padding: 0.5rem 0.75rem;
color: var(--ui-text);
background: var(--ui-bg-muted);
border: 1px solid var(--ui-border);
border-radius: 8px;
cursor: pointer;
transition: background-color 160ms ease, border-color 160ms ease;
}
input[type="file"]::file-selector-button:hover {
background: var(--ui-primary-soft);
border-color: var(--ui-primary);
}
input[data-coloris] {
min-width: 120px;
}
/* ---------- Checkbox switch ---------- */
.checkbox {
display: flex;
align-items: center;
justify-content: center;
width: max-content;
cursor: pointer;
user-select: none;
}
.checkbox input {
position: absolute;
width: 1px;
height: 1px;
opacity: 0;
pointer-events: none;
}
.checkbox-ui {
position: relative;
display: inline-flex;
width: 42px;
height: 24px;
flex: 0 0 auto;
background: var(--ui-border);
border: 1px solid color-mix(in srgb, var(--ui-border) 80%, #000);
border-radius: 999px;
transition:
background-color 180ms ease,
border-color 180ms ease,
box-shadow 180ms ease;
}
.checkbox-ui::after {
content: "";
position: absolute;
top: 50%;
left: 3px;
width: 18px;
height: 18px;
background: #fff;
border-radius: 50%;
box-shadow: 0 2px 7px rgba(15, 23, 42, 0.22);
transform: translateY(-50%);
transition: transform 180ms ease;
}
.checkbox input:checked + .checkbox-ui {
background: var(--ui-primary);
border-color: var(--ui-primary);
}
.checkbox input:checked + .checkbox-ui::after {
transform: translate(18px, -50%);
}
.checkbox input:focus-visible + .checkbox-ui {
box-shadow: 0 0 0 4px var(--ui-focus);
}
/* ---------- Buttons ---------- */
button:not(.blackBtn),
.btn {
font: inherit;
}
.btn,
.cssCodeSaveBtn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.55rem;
min-height: 40px;
padding: 0.62rem 0.95rem;
color: #fff;
background: var(--ui-primary);
border: 1px solid transparent;
border-radius: 999px;
box-shadow: var(--ui-shadow-sm);
cursor: pointer;
font-weight: 700;
line-height: 1;
text-decoration: none;
transition:
transform 150ms ease,
box-shadow 150ms ease,
background-color 150ms ease,
border-color 150ms ease,
opacity 150ms ease;
}
.btn:hover,
.cssCodeSaveBtn:hover {
background: var(--ui-primary-hover);
box-shadow: var(--ui-shadow-hover);
transform: translateY(-1px);
}
.btn:active,
.cssCodeSaveBtn:active {
transform: translateY(0);
box-shadow: var(--ui-shadow-sm);
}
.btn:focus-visible,
.cssCodeSaveBtn:focus-visible {
outline: none;
box-shadow: 0 0 0 4px var(--ui-focus);
}
.btn:disabled,
.cssCodeSaveBtn:disabled {
opacity: 0.45;
cursor: not-allowed;
transform: none;
box-shadow: none;
}
.btn.newBtn svg {
width: 1.25rem;
height: 1.25rem;
}
/* Destructive icon buttons */
.deleteGeraete,
.deleteZeitplan,
.deleteZeitplanType,
.deleteNoten {
width: 38px;
min-height: 38px;
padding: 0 !important;
color: var(--ui-danger) !important;
background: transparent !important;
border: 1px solid transparent !important;
border-radius: 999px !important;
box-shadow: none !important;
}
.deleteGeraete:hover,
.deleteZeitplan:hover,
.deleteZeitplanType:hover,
.deleteNoten:hover {
background: var(--ui-danger-soft) !important;
border-color: color-mix(in srgb, var(--ui-danger) 25%, transparent) !important;
transform: none !important;
}
.deleteGeraete svg,
.deleteZeitplan svg,
.deleteZeitplanType svg,
.deleteNoten svg {
stroke: currentColor;
}
/* Inline add buttons */
#addGeraeteBtn,
#addZeitplanTypeBtn,
#addNotenBtn {
white-space: nowrap;
}
/* ---------- Presets ---------- */
.gridWKVSConfig {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1rem;
margin-top: 1.1rem;
}
.gridWKVSConfig > div {
min-width: 0;
padding: 1rem;
background: color-mix(in srgb, var(--ui-bg-soft) 72%, transparent);
border: 1px solid var(--ui-border-soft);
border-radius: var(--ui-radius);
}
.importWKVSConfigDiv {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
align-items: center;
gap: 0.75rem;
}
/* ---------- Tables ---------- */
.tableWraperOverflowY {
width: 100%;
max-width: 100%;
overflow-x: auto;
overflow-y: visible;
border: 1px solid var(--ui-border-soft);
border-radius: var(--ui-radius);
background: var(--ui-surface-solid);
box-shadow: var(--ui-shadow-sm);
-webkit-overflow-scrolling: touch;
}
.tableWraperOverflowY::-webkit-scrollbar {
height: 10px;
}
.tableWraperOverflowY::-webkit-scrollbar-track {
background: transparent;
}
.tableWraperOverflowY::-webkit-scrollbar-thumb {
background: color-mix(in srgb, var(--ui-text-muted) 42%, transparent);
border-radius: 999px;
}
.wkvsTabelle {
width: 100%;
min-width: 760px;
border-collapse: separate;
border-spacing: 0;
color: var(--ui-text);
background: transparent;
font-size: 0.9rem;
}
.tableNoten {
min-width: 1900px;
}
.wkvsTabelle thead th {
position: sticky;
top: 0;
z-index: 2;
padding: 0.8rem 0.75rem;
color: var(--ui-text-soft);
background: var(--ui-bg-muted);
border-bottom: 1px solid var(--ui-border);
font-size: 0.78rem;
font-weight: 800;
letter-spacing: 0.035em;
text-align: left;
text-transform: uppercase;
white-space: nowrap;
}
.wkvsTabelle tbody td {
padding: 0.65rem 0.75rem;
border-bottom: 1px solid var(--ui-border-soft);
vertical-align: middle;
}
.wkvsTabelle tbody tr {
transition: background-color 140ms ease;
}
.wkvsTabelle tbody tr:hover {
background: color-mix(in srgb, var(--ui-primary-soft) 60%, transparent);
}
.wkvsTabelle tbody tr:last-child td {
border-bottom: 0;
}
.wkvsTabelle td:first-child,
.wkvsTabelle th:first-child {
padding-left: 1rem;
}
.wkvsTabelle td:last-child,
.wkvsTabelle th:last-child {
padding-right: 1rem;
}
.addRow {
background: color-mix(in srgb, var(--ui-bg-muted) 60%, transparent);
}
.addRow td {
border-top: 1px solid var(--ui-border);
}
.addRow input:not([type="checkbox"]) {
border-style: solid !important;
}
.wkvsTabelle .checkbox {
margin: auto;
}
/* ---------- Custom select compatibility ---------- */
.customSelect {
position: relative;
min-width: 220px;
}
.wkvsTabelle .selectTrigger, .wkvsTabelle .selectTriggerBulk, .paddingNormal.selectTrigger {
padding: 0.5rem 0.65rem !important;
}
.selectTriggerBulk {
width: 100%;
justify-content: space-between !important;
color: var(--ui-text) !important;
background: var(--ui-surface-solid) !important;
border: 1px solid var(--ui-border) !important;
border-radius: 10px !important;
box-shadow: none !important;
}
.selectTriggerBulk:hover {
background: var(--ui-bg-soft) !important;
border-color: var(--ui-primary) !important;
transform: none !important;
}
.selectLabel {
overflow: hidden;
color: var(--ui-text);
text-overflow: ellipsis;
white-space: nowrap;
}
.selectLabel.placeholder {
color: var(--ui-text-muted);
}
.selectOptionsBulk {
background: var(--ui-surface-solid);
border: 1px solid var(--ui-border);
border-radius: 12px;
box-shadow: var(--ui-shadow);
}
.selectOptionsBulk li {
color: var(--ui-text);
}
.selectOptionsBulk li:hover,
.selectOptionsBulk li.selected {
background: var(--ui-primary-soft);
color: var(--ui-primary);
}
/* ---------- Image upload cards ---------- */
.containerImages {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
gap: 1rem;
}
.containerImages > div {
min-width: 0;
transition: opacity 160ms ease, transform 160ms ease;
}
.containerImages label {
position: relative;
display: grid;
gap: 0.65rem;
height: 100%;
padding: 0.75rem;
background: var(--ui-surface-solid);
border: 1px solid var(--ui-border-soft);
border-radius: var(--ui-radius);
box-shadow: var(--ui-shadow-sm);
cursor: pointer;
overflow: hidden;
transition:
border-color 160ms ease,
box-shadow 160ms ease,
transform 160ms ease;
}
.containerImages label:hover {
border-color: color-mix(in srgb, var(--ui-primary) 45%, var(--ui-border));
box-shadow: var(--ui-shadow);
transform: translateY(-2px);
}
.containerImages label > span {
color: var(--ui-text);
font-weight: 700;
}
.containerImages input[type="file"] {
width: 100%;
font-size: 0.82rem;
}
.containerImages img {
width: 100%;
aspect-ratio: 16 / 10;
object-fit: cover;
background: var(--ui-bg-muted);
border-radius: 12px;
border: 1px solid var(--ui-border-soft);
}
#imgIcon + img,
#imgLogo_normal + img {
object-fit: contain;
padding: 0.75rem;
}
/* ---------- CSS editor ---------- */
#csseditor {
overflow: hidden;
border-color: var(--ui-border) !important;
border-radius: var(--ui-radius) !important;
box-shadow: var(--ui-shadow-sm);
}
.cssCodeSaveBtn {
margin-top: 0.2rem;
}
/* ---------- Display settings area ---------- */
.oneOneGridDisplay {
display: grid;
grid-template-columns: minmax(320px, 0.95fr) minmax(0, 1.05fr);
gap: 1rem;
align-items: start;
}
.displayDivSettings {
border-radius: var(--ui-radius-lg);
}
.optionsDisplay {
grid-template-columns: minmax(0, 1fr);
}
.settingsRowGroupDisplay {
padding: 0;
background: transparent;
border: 0;
}
.settingsRowGroupDisplay.hidden,
.hidden {
display: none !important;
}
.subSettingsRowGroup button {
width: fit-content;
min-width: 120px;
}
.displayDiv.displayDivSettings {
width: 100%;
aspect-ratio: 5/3;
height: auto;
}
.displayDiv .scaled {
outline: 3px solid var(--ui-primary);
outline-offset: 4px;
transition: outline-color 160ms ease, transform 160ms ease;
transform: scale(1.015);
}
/* ---------- Message container fallback only ---------- */
/* Existing customMsg CSS remains responsible for actual message styling. */
.msgDiv {
position: fixed;
right: 1rem;
bottom: 1rem;
z-index: 1000;
max-width: min(420px, calc(100vw - 2rem));
}
/* ---------- Utility states ---------- */
.cTextHidden {
display: none !important;
}
/* diverse */
.tdDiv {
display: inline-flex;
align-items: center;
gap: 2px;
}
.blackBtn {
background: var(--main-button);
border: 1px solid #fff;
color: #ffffff;
padding: 10px 20px;
border-radius: 10px;
transition: transform 0.3s ease;
letter-spacing: 1px;
display: flex;
align-self: flex-start;
}
.blackBtn:hover {
transform: scale(1.02);
}
.blackBtn:active {
transform: scale(0.98);
}
.deleteProgramm {
appearance: none;
background: none;
border: none;
cursor: pointer;
}
.horizontalLabelWrapper {
display: flex;
flex-direction: column;
}
/* ---------- Responsive ---------- */
@media (max-width: 1180px) {
.twoColumDiv > div,
.settingsGrid,
.gridWKVSConfig,
.oneOneGridDisplay {
grid-template-columns: 1fr;
}
.twoColumDiv .containerDiv + .containerDiv {
margin-top: 1rem;
}
}
@media (max-width: 760px) {
.bgSection {
padding: 0.65rem;
}
.headerDivTrainer {
position: static;
min-height: auto;
padding: 0.9rem;
border-radius: var(--ui-radius);
}
.headingPanel {
font-size: 1.45rem;
}
.dashboardGrid {
gap: 0.75rem;
}
.containerDiv {
padding: 0.9rem;
border-radius: var(--ui-radius);
}
.settingsRow {
grid-template-columns: 1fr;
gap: 0.4rem;
}
.settingsRow > span, .settingsRow > div > span {
font-size: 0.88rem;
}
.subSettingsRowGroup {
padding: 0.75rem;
}
.importWKVSConfigDiv {
grid-template-columns: 1fr;
}
.btn.newBtn,
.cssCodeSaveBtn,
body.einstellungen button {
width: 100%;
}
.deleteGeraete,
.deleteZeitplan,
.deleteZeitplanType,
.deleteNoten {
width: 38px !important;
}
.containerImages {
grid-template-columns: repeat(auto-fit, minmax(145px, 1fr));
}
.wkvsTabelle {
font-size: 0.84rem;
}
.wkvsTabelle thead th,
.wkvsTabelle tbody td {
padding: 0.6rem;
}
.msgDiv {
right: 0.65rem;
bottom: 0.65rem;
left: 0.65rem;
max-width: none;
}
}
@media (max-width: 460px) {
body.einstellungen {
font-size: 14px;
}
.headerDivTrainer {
align-items: flex-start;
}
.containerImages {
grid-template-columns: 1fr;
}
input[type="file"]::file-selector-button {
display: block;
width: 100%;
margin: 0 0 0.45rem;
}
}
/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
}
}