feat: implement hide app name feature with toggle in admin settings and update branding context
Some checks failed
Build & Push Docker Image / build (push) Has been cancelled

This commit is contained in:
2026-03-04 10:11:35 +01:00
parent bac4e8ae7c
commit ce2cf499dc
11 changed files with 627 additions and 61 deletions

View File

@@ -714,39 +714,6 @@
transition-all duration-200;
}
/* ── Styled date/time picker wrapper ── */
.datetime-picker {
@apply relative;
}
.datetime-picker .datetime-icon {
@apply absolute left-3.5 top-1/2 -translate-y-1/2 pointer-events-none text-th-text-s z-10;
}
.datetime-picker input[type="datetime-local"],
.datetime-picker input[type="date"],
.datetime-picker input[type="time"] {
@apply w-full pl-11 pr-3 py-2.5 rounded-lg
bg-th-input text-th-text
border border-th-input-b
focus:outline-none focus:ring-2 focus:ring-th-ring focus:border-transparent
transition-all duration-200;
font-variant-numeric: tabular-nums;
}
.datetime-picker input::-webkit-calendar-picker-indicator {
cursor: pointer;
border-radius: 4px;
padding: 4px;
opacity: 0.6;
transition: opacity 0.15s;
filter: var(--picker-icon-filter, none);
}
.datetime-picker input::-webkit-calendar-picker-indicator:hover {
opacity: 1;
}
.card {
@apply bg-th-card rounded-xl border border-th-border
shadow-th transition-all duration-200;
@@ -772,3 +739,317 @@
background: linear-gradient(135deg, var(--gradient-start), var(--gradient-end));
}
}
/* ═══════════════════════════════════════════════════════════════
CUSTOM DATE/TIME PICKER — fully themed via CSS variables
═══════════════════════════════════════════════════════════════ */
/* ── Wrapper & trigger button ─────────────────────────────────── */
.dtp-dp-wrapper {
width: 100%;
}
.dtp-input-wrap {
position: relative;
width: 100%;
}
.dtp-icon {
position: absolute;
left: 0.875rem;
top: 50%;
transform: translateY(-50%);
color: var(--text-secondary);
pointer-events: none;
z-index: 1;
}
.dtp-custom-input {
width: 100%;
display: flex;
align-items: center;
padding: 0.625rem 0.875rem 0.625rem 2.5rem;
border-radius: 0.5rem;
background: var(--input-bg);
border: 1px solid var(--input-border);
color: var(--text-primary);
font-size: 0.875rem;
text-align: left;
transition: border-color 0.15s, box-shadow 0.15s;
cursor: pointer;
line-height: 1.5;
}
.dtp-custom-input:focus,
.dtp-custom-input:focus-visible {
outline: none;
border-color: transparent;
box-shadow: 0 0 0 2px var(--ring);
}
.dtp-custom-input:hover {
border-color: var(--accent);
}
.dtp-placeholder {
color: var(--text-secondary);
}
.dtp-value {
color: var(--text-primary);
font-variant-numeric: tabular-nums;
}
/* ── Popper & calendar container ──────────────────────────────── */
.react-datepicker-popper {
z-index: 100 !important;
}
.dtp-calendar.react-datepicker {
background: var(--card-bg);
border: 1px solid var(--border);
border-radius: 0.75rem;
box-shadow: 0 10px 25px -5px var(--shadow-color), 0 4px 10px -6px var(--shadow-color);
font-family: inherit;
font-size: 0.8125rem;
color: var(--text-primary);
overflow: hidden;
display: flex;
}
/* hide the default triangle/arrow */
.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle,
.react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle {
display: none;
}
/* ── Header (custom rendered) ─────────────────────────────────── */
.dtp-calendar .react-datepicker__header {
background: var(--bg-secondary);
border-bottom: 1px solid var(--border);
padding: 0;
}
.dtp-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.625rem 0.75rem 0.5rem;
}
.dtp-month-label {
font-weight: 600;
font-size: 0.875rem;
color: var(--text-primary);
letter-spacing: 0.01em;
}
.dtp-nav-btn {
width: 1.75rem;
height: 1.75rem;
display: flex;
align-items: center;
justify-content: center;
border-radius: 0.375rem;
background: transparent;
border: none;
color: var(--text-secondary);
font-size: 1.2rem;
cursor: pointer;
transition: background 0.15s, color 0.15s;
line-height: 1;
padding-bottom: 1px;
}
.dtp-nav-btn:hover:not(:disabled) {
background: var(--hover-bg);
color: var(--text-primary);
}
.dtp-nav-btn:disabled {
opacity: 0.3;
cursor: default;
}
/* ── Day names row ────────────────────────────────────────────── */
.dtp-calendar .react-datepicker__day-names {
background: var(--bg-secondary);
border-bottom: 1px solid var(--border);
display: flex;
justify-content: space-around;
padding: 0.25rem 0.5rem 0.375rem;
margin: 0;
}
.dtp-calendar .react-datepicker__day-name {
color: var(--text-secondary);
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
width: 2rem;
text-align: center;
line-height: 1.5;
}
/* ── Month / days grid ────────────────────────────────────────── */
.dtp-calendar .react-datepicker__month {
background: var(--card-bg);
padding: 0.5rem;
margin: 0;
}
.dtp-calendar .react-datepicker__week {
display: flex;
justify-content: space-around;
}
.dtp-calendar .react-datepicker__day {
width: 2rem;
height: 2rem;
line-height: 2rem;
border-radius: 0.375rem;
color: var(--text-primary);
font-size: 0.8125rem;
transition: background 0.12s, color 0.12s;
margin: 0.1rem;
text-align: center;
}
.dtp-calendar .react-datepicker__day:hover:not(.react-datepicker__day--selected):not(.react-datepicker__day--disabled) {
background: var(--hover-bg);
color: var(--text-primary);
border-radius: 0.375rem;
}
.dtp-calendar .react-datepicker__day--selected,
.dtp-calendar .react-datepicker__day--keyboard-selected {
background: var(--accent) !important;
color: var(--accent-text) !important;
border-radius: 0.375rem;
font-weight: 600;
}
.dtp-calendar .react-datepicker__day--today:not(.react-datepicker__day--selected) {
font-weight: 700;
color: var(--accent);
position: relative;
}
.dtp-calendar .react-datepicker__day--today:not(.react-datepicker__day--selected)::after {
content: '';
position: absolute;
bottom: 3px;
left: 50%;
transform: translateX(-50%);
width: 4px;
height: 4px;
border-radius: 50%;
background: var(--accent);
}
.dtp-calendar .react-datepicker__day--outside-month {
color: var(--text-secondary);
opacity: 0.4;
}
.dtp-calendar .react-datepicker__day--disabled {
color: var(--text-secondary);
opacity: 0.3;
cursor: not-allowed;
}
/* ── Time column ──────────────────────────────────────────────── */
.dtp-calendar .react-datepicker__time-container {
border-left: 1px solid var(--border);
background: var(--card-bg);
width: 90px;
}
.dtp-calendar .react-datepicker__time-container .react-datepicker__header {
padding: 0.5rem;
text-align: center;
}
.dtp-calendar .react-datepicker__header--time {
background: var(--bg-secondary);
border-bottom: 1px solid var(--border);
padding: 0.5rem !important;
}
.dtp-calendar .react-datepicker__header--time .react-datepicker-time__header {
font-size: 0.75rem;
font-weight: 600;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.dtp-calendar .react-datepicker__time {
background: var(--card-bg);
}
.dtp-calendar .react-datepicker__time-box {
width: 90px !important;
}
.dtp-calendar .react-datepicker__time-list {
scrollbar-width: thin;
scrollbar-color: var(--border) transparent;
}
.dtp-calendar .react-datepicker__time-list-item {
display: flex;
align-items: center;
justify-content: center;
padding: 0.375rem 0 !important;
height: auto !important;
font-size: 0.8125rem;
color: var(--text-primary);
transition: background 0.1s, color 0.1s;
border-radius: 0;
}
.dtp-calendar .react-datepicker__time-list-item:hover:not(.react-datepicker__time-list-item--selected) {
background: var(--hover-bg) !important;
color: var(--text-primary);
}
.dtp-calendar .react-datepicker__time-list-item--selected {
background: var(--accent) !important;
color: var(--accent-text) !important;
font-weight: 600;
}
.dtp-calendar .react-datepicker__time-list-item--disabled {
color: var(--text-secondary);
opacity: 0.3;
}
/* ── Clear button ─────────────────────────────────────────────── */
.react-datepicker__close-icon {
right: 0.5rem;
padding: 0;
}
.react-datepicker__close-icon::after {
background: var(--bg-tertiary) !important;
color: var(--text-secondary) !important;
font-size: 0.875rem;
width: 1.25rem;
height: 1.25rem;
line-height: 1.25rem;
border-radius: 0.25rem;
transition: background 0.15s, color 0.15s;
}
.react-datepicker__close-icon:hover::after {
background: var(--error) !important;
color: #fff !important;
}
/* ── Month navigation (react-datepicker default, hidden since custom header used) ── */
.dtp-calendar .react-datepicker__navigation {
display: none;
}