Refactors dashboard to use external CSS file

Moves inline styles to dedicated dashboard.css
Updates HTML to reference external stylesheet
Improves code organization and maintainability

Relates to refac branch
This commit is contained in:
Janus C. H. Knudsen 2025-12-31 00:36:32 +01:00
parent 0fa5b60a6b
commit 7b2080a7bf
10 changed files with 9481 additions and 899 deletions

View file

@ -0,0 +1,576 @@
/* ==========================================
INDSTILLINGER (SETTINGS) STYLES
========================================== */
/* ==========================================
PAGE LAYOUT
========================================== */
swp-page-container {
display: block;
max-width: 900px;
margin: 0 auto;
padding: 24px;
}
swp-page-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 32px;
}
swp-page-title {
display: flex;
flex-direction: column;
gap: 4px;
}
swp-page-title h1 {
font-size: 22px;
font-weight: 600;
color: var(--color-text);
margin: 0;
}
swp-page-title p {
font-size: 13px;
color: var(--color-text-secondary);
margin: 0;
}
/* ==========================================
SETTINGS SECTIONS
========================================== */
swp-settings-section {
display: block;
background: var(--color-surface);
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
margin-bottom: 24px;
}
swp-section-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 24px;
border-bottom: 1px solid var(--color-border);
}
swp-section-title {
display: flex;
align-items: center;
gap: 12px;
}
swp-section-title i {
font-size: 22px;
color: var(--color-teal);
}
swp-section-title h2 {
font-size: 16px;
font-weight: 600;
color: var(--color-text);
margin: 0;
}
swp-section-content {
display: block;
padding: 24px;
}
swp-section-footer {
display: flex;
justify-content: flex-end;
padding: 16px 24px;
border-top: 1px solid var(--color-border);
background: var(--color-background-alt);
border-radius: 0 0 8px 8px;
}
/* ==========================================
FORM ELEMENTS
========================================== */
swp-form-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
}
swp-form-grid.single-column {
grid-template-columns: 1fr;
}
swp-form-row {
display: flex;
flex-direction: column;
gap: 6px;
}
swp-form-row.full-width {
grid-column: 1 / -1;
}
swp-form-label {
display: block;
font-size: 13px;
font-weight: 500;
color: var(--color-text);
}
swp-form-label span.optional {
font-weight: 400;
color: var(--color-text-secondary);
margin-left: 4px;
}
swp-form-input {
display: block;
width: 100%;
padding: 10px 14px;
font-size: 14px;
font-family: var(--font-family);
color: var(--color-text);
background: var(--color-background);
border: 1px solid var(--color-border);
border-radius: 6px;
transition: all 150ms ease;
}
swp-form-input:focus {
outline: none;
border-color: var(--color-teal);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-teal) 15%, transparent);
}
swp-form-input::placeholder {
color: var(--color-text-secondary);
}
swp-form-input[type="time"] {
padding: 8px 14px;
}
swp-form-textarea {
display: block;
width: 100%;
padding: 10px 14px;
font-size: 14px;
font-family: var(--font-family);
color: var(--color-text);
background: var(--color-background);
border: 1px solid var(--color-border);
border-radius: 6px;
resize: vertical;
min-height: 80px;
transition: all 150ms ease;
}
swp-form-textarea:focus {
outline: none;
border-color: var(--color-teal);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-teal) 15%, transparent);
}
swp-form-select {
display: block;
width: 100%;
padding: 10px 14px;
font-size: 14px;
font-family: var(--font-family);
color: var(--color-text);
background: var(--color-background);
border: 1px solid var(--color-border);
border-radius: 6px;
cursor: pointer;
transition: all 150ms ease;
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 256 256'%3E%3Cpath fill='%23666' d='M213.66 101.66l-80 80a8 8 0 0 1-11.32 0l-80-80A8 8 0 0 1 48 88h160a8 8 0 0 1 5.66 13.66z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 12px center;
padding-right: 40px;
}
swp-form-select:focus {
outline: none;
border-color: var(--color-teal);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-teal) 15%, transparent);
}
swp-form-hint {
display: block;
font-size: 12px;
color: var(--color-text-secondary);
margin-top: 4px;
}
/* ==========================================
TOGGLE SWITCH
========================================== */
swp-toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 0;
border-bottom: 1px solid var(--color-border);
}
swp-toggle-row:last-child {
border-bottom: none;
}
swp-toggle-info {
display: flex;
flex-direction: column;
gap: 2px;
}
swp-toggle-label {
font-size: 14px;
font-weight: 500;
color: var(--color-text);
}
swp-toggle-desc {
font-size: 12px;
color: var(--color-text-secondary);
}
swp-toggle {
position: relative;
width: 44px;
height: 24px;
background: var(--color-border);
border-radius: 12px;
cursor: pointer;
transition: background 200ms ease;
flex-shrink: 0;
}
swp-toggle.active {
background: var(--color-teal);
}
swp-toggle-knob {
position: absolute;
top: 2px;
left: 2px;
width: 20px;
height: 20px;
background: white;
border-radius: 50%;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
transition: transform 200ms ease;
}
swp-toggle.active swp-toggle-knob {
transform: translateX(20px);
}
/* ==========================================
OPENING HOURS TABLE
========================================== */
swp-hours-table {
display: flex;
flex-direction: column;
gap: 0;
}
swp-hours-row {
display: grid;
grid-template-columns: 100px 80px 1fr 1fr auto;
gap: 16px;
align-items: center;
padding: 12px 0;
border-bottom: 1px solid var(--color-border);
}
swp-hours-row:last-child {
border-bottom: none;
}
swp-hours-day {
font-size: 14px;
font-weight: 500;
color: var(--color-text);
}
swp-hours-status {
display: flex;
align-items: center;
gap: 8px;
}
swp-hours-badge {
display: inline-flex;
align-items: center;
padding: 4px 10px;
font-size: 12px;
font-weight: 500;
border-radius: 4px;
background: color-mix(in srgb, var(--color-green) 15%, transparent);
color: var(--color-green);
}
swp-hours-badge.closed {
background: var(--color-background);
color: var(--color-text-secondary);
}
swp-hours-time {
display: flex;
align-items: center;
gap: 8px;
}
swp-hours-time span {
font-size: 13px;
color: var(--color-text-secondary);
}
swp-hours-time swp-form-input {
width: 100px;
padding: 8px 12px;
font-size: 13px;
text-align: center;
}
swp-hours-actions {
display: flex;
align-items: center;
gap: 8px;
}
/* ==========================================
LOGO UPLOAD
========================================== */
swp-logo-upload {
display: flex;
align-items: center;
gap: 20px;
}
swp-logo-preview {
width: 80px;
height: 80px;
background: var(--color-background);
border: 2px dashed var(--color-border);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
swp-logo-preview.has-logo {
border-style: solid;
}
swp-logo-preview img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
swp-logo-preview i {
font-size: 32px;
color: var(--color-text-secondary);
opacity: 0.5;
}
swp-logo-actions {
display: flex;
flex-direction: column;
gap: 8px;
}
swp-logo-actions swp-btn {
justify-content: center;
}
/* ==========================================
URL FIELD WITH COPY
========================================== */
swp-url-field {
display: flex;
align-items: stretch;
border: 1px solid var(--color-border);
border-radius: 6px;
overflow: hidden;
background: var(--color-background);
}
swp-url-field swp-form-input {
border: none;
border-radius: 0;
background: transparent;
}
swp-url-field swp-form-input:focus {
box-shadow: none;
}
swp-url-copy {
display: flex;
align-items: center;
justify-content: center;
padding: 0 14px;
background: var(--color-surface);
border-left: 1px solid var(--color-border);
cursor: pointer;
transition: all 150ms ease;
color: var(--color-text-secondary);
}
swp-url-copy:hover {
background: var(--color-background-hover);
color: var(--color-teal);
}
swp-url-copy i {
font-size: 18px;
}
/* ==========================================
BUTTONS
========================================== */
swp-btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 18px;
font-size: 13px;
font-weight: 500;
font-family: var(--font-family);
border-radius: 6px;
cursor: pointer;
transition: all 150ms ease;
border: none;
}
swp-btn i {
font-size: 18px;
}
swp-btn.primary {
background: var(--color-teal);
color: white;
}
swp-btn.primary:hover {
background: #00796b;
}
swp-btn.secondary {
background: var(--color-surface);
border: 1px solid var(--color-border);
color: var(--color-text);
}
swp-btn.secondary:hover {
background: var(--color-background-hover);
}
swp-btn.small {
padding: 6px 12px;
font-size: 12px;
}
swp-btn.small i {
font-size: 16px;
}
swp-btn.danger {
background: transparent;
border: 1px solid var(--color-border);
color: var(--color-text-secondary);
}
swp-btn.danger:hover {
background: color-mix(in srgb, var(--color-red) 10%, transparent);
border-color: var(--color-red);
color: var(--color-red);
}
/* ==========================================
ICON BUTTON
========================================== */
swp-icon-btn {
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border: none;
background: transparent;
border-radius: 6px;
cursor: pointer;
color: var(--color-text-secondary);
transition: all 150ms ease;
}
swp-icon-btn:hover {
background: var(--color-background-hover);
color: var(--color-text);
}
swp-icon-btn i {
font-size: 18px;
}
/* ==========================================
INFO BOX
========================================== */
swp-info-box {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 14px 16px;
background: color-mix(in srgb, var(--color-blue) 8%, transparent);
border: 1px solid color-mix(in srgb, var(--color-blue) 20%, transparent);
border-radius: 6px;
margin-bottom: 20px;
}
swp-info-box i {
font-size: 20px;
color: var(--color-blue);
flex-shrink: 0;
margin-top: 1px;
}
swp-info-box p {
font-size: 13px;
color: var(--color-text);
margin: 0;
line-height: 1.5;
}
/* ==========================================
RESPONSIVE
========================================== */
@media (max-width: 768px) {
swp-page-container {
padding: 16px;
}
swp-form-grid {
grid-template-columns: 1fr;
}
swp-hours-row {
grid-template-columns: 1fr;
gap: 12px;
}
swp-hours-time {
flex-wrap: wrap;
}
swp-section-header {
flex-direction: column;
align-items: flex-start;
gap: 12px;
}
}