3b6d5e781a
Dev-only toggle button enables/disables photo backgrounds. Photos are auto-discovered from static/images/backgrounds/ and randomly selected on each page load. Production is unaffected — no button, no photo.
48 lines
1.4 KiB
CSS
48 lines
1.4 KiB
CSS
/* ============================================================================
|
|
CSS RESET - Normalize & Base Styles
|
|
============================================================================ */
|
|
|
|
/* Box sizing reset */
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
/* Body base */
|
|
body {
|
|
background-color: var(--page-bg, #d6d6d6);
|
|
background-image: var(--page-bg-pattern, none);
|
|
background-size: 40px 40px;
|
|
background-attachment: fixed;
|
|
max-width: 100vw; /* Prevent horizontal overflow */
|
|
overflow-x: clip; /* Clip prevents horizontal scroll WITHOUT breaking position: sticky */
|
|
}
|
|
|
|
/* Background photo layer — activated via JS in dev mode */
|
|
body.bg-photo {
|
|
background-image:
|
|
var(--page-bg-pattern, none),
|
|
linear-gradient(var(--page-bg-tint, rgba(214,214,214,0.85)), var(--page-bg-tint, rgba(214,214,214,0.85))),
|
|
var(--bg-photo-url, none);
|
|
background-size: auto, auto, cover;
|
|
background-position: 0 0, 0 0, center;
|
|
background-repeat: repeat, repeat, no-repeat;
|
|
background-attachment: fixed;
|
|
}
|
|
|
|
/* Smooth scrolling */
|
|
html {
|
|
scroll-behavior: smooth;
|
|
scroll-padding-top: 70px; /* Account for fixed header */
|
|
max-width: 100vw; /* Prevent horizontal overflow */
|
|
overflow-x: clip; /* Clip prevents horizontal scroll WITHOUT breaking position: sticky */
|
|
}
|
|
|
|
/* Ensure Iconify icons display properly */
|
|
.iconify,
|
|
iconify-icon {
|
|
display: inline-block;
|
|
vertical-align: middle;
|
|
}
|