1258d61d05
CSS Refactoring: - Split 2,287-line monolith into 6 focused modules - New structure: Navigation, Scroll, Buttons, Modals, Zoom, Breakpoints - Organized by ITCSS layers (Interactive + Responsive) - 245 lines saved through better organization - Site verified working at localhost:1999 New CSS Files: - 04-interactive/_navigation.css (357 lines, 8.2KB) - 04-interactive/_scroll-behavior.css (200 lines, 5.0KB) - 04-interactive/_buttons.css (184 lines, 4.7KB) - 04-interactive/_modals.css (487 lines, 16KB) - 04-interactive/_zoom-control.css (253 lines, 6.3KB) - 05-responsive/_breakpoints.css (561 lines, 14KB) Documentation Updates: - Added doc/12-CSS-ARCHITECTURE.md (comprehensive CSS guide) - Updated doc/README.md (new entry + correct numbering) - Updated tests/README.md (test count 8 → 27) - Updated tests/TEST-SUMMARY.md (coverage expansion) - Rewrote tests/mjs/README.md (complete test listing) Removed: - static/css/04-interactive/_remaining.css (replaced by modules)
254 lines
6.3 KiB
CSS
254 lines
6.3 KiB
CSS
/* ==========================================================================
|
|
ZOOM CONTROL - Fixed Bottom Center
|
|
========================================================================== */
|
|
|
|
.zoom-control {
|
|
position: fixed;
|
|
bottom: 100px; /* Default position, can be dragged */
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
z-index: 900;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.75rem;
|
|
padding: 0.65rem 1.25rem;
|
|
background: rgba(128, 128, 128, 0.7);
|
|
backdrop-filter: blur(10px);
|
|
-webkit-backdrop-filter: blur(10px);
|
|
border-radius: 50px;
|
|
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2);
|
|
transition: all 0.3s ease;
|
|
opacity: 0.7;
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
|
|
cursor: move; /* Indicate draggability */
|
|
user-select: none; /* Prevent text selection while dragging */
|
|
}
|
|
|
|
/* Zoom control highlight when hovering zoom toggle button */
|
|
.zoom-control.zoom-highlight {
|
|
opacity: 1;
|
|
box-shadow: 0px 0px 10px 4px rgb(1 113 188 / 80%);
|
|
background: rgb(91 91 91);
|
|
}
|
|
|
|
/* Hidden state for zoom control and show button */
|
|
.zoom-hidden {
|
|
display: none !important;
|
|
}
|
|
|
|
/* Close button for zoom control */
|
|
.zoom-close-btn {
|
|
position: absolute;
|
|
top: -8px;
|
|
right: -8px;
|
|
width: 24px;
|
|
height: 24px;
|
|
background: rgba(128, 128, 128, 0.6); /* Subtle grey */
|
|
border: 2px solid rgba(255, 255, 255, 0.3);
|
|
border-radius: 50%;
|
|
color: rgba(255, 255, 255, 0.8); /* Light grey icon */
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 0;
|
|
transition: all 0.2s ease;
|
|
z-index: 1;
|
|
opacity: 0.7; /* Subtle by default */
|
|
}
|
|
|
|
.zoom-close-btn:hover {
|
|
background: rgba(220, 53, 69, 0.9); /* Red on hover */
|
|
color: white; /* White icon on hover */
|
|
opacity: 1; /* Fully visible on hover */
|
|
transform: scale(1.1);
|
|
box-shadow: 0 2px 8px rgba(220, 53, 69, 0.4);
|
|
}
|
|
|
|
.zoom-control:hover {
|
|
opacity: 1;
|
|
background: rgb(91 91 91);
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
/* Zoom Values (Labels) */
|
|
.zoom-value {
|
|
color: rgba(255, 255, 255, 1); /* 100% white */
|
|
font-size: 0.95rem; /* Bigger */
|
|
font-weight: 500; /* Medium weight */
|
|
min-width: 30px;
|
|
text-align: center;
|
|
}
|
|
|
|
.zoom-value-current {
|
|
color: rgba(255, 255, 255, 1); /* 100% white */
|
|
font-weight: 600;
|
|
font-size: 1.05rem; /* Bigger */
|
|
min-width: 35px;
|
|
}
|
|
|
|
/* Range Slider Styling */
|
|
.zoom-slider {
|
|
-webkit-appearance: none;
|
|
appearance: none;
|
|
width: 180px;
|
|
height: 5px;
|
|
border-radius: 3px;
|
|
background: rgba(200, 200, 200, 0.5);
|
|
outline: none;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
/* Solid blue color on hover - no gradient */
|
|
.zoom-control:hover .zoom-slider,
|
|
.zoom-slider:hover {
|
|
background: rgba(145, 190, 236, 1); /* solid blue */
|
|
}
|
|
|
|
.zoom-slider:focus {
|
|
outline: 2px solid rgba(255, 255, 255, 0.6);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
/* Webkit Slider Thumb */
|
|
.zoom-slider::-webkit-slider-thumb {
|
|
-webkit-appearance: none;
|
|
appearance: none;
|
|
width: 18px;
|
|
height: 18px;
|
|
border-radius: 50%;
|
|
background: white;
|
|
border: 2px solid rgba(180, 180, 180, 0.8);
|
|
cursor: pointer;
|
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.zoom-slider::-webkit-slider-thumb:hover {
|
|
transform: scale(1.1);
|
|
border-color: rgba(200, 200, 200, 1);
|
|
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
.zoom-slider::-webkit-slider-thumb:active {
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
/* Firefox Slider Thumb */
|
|
.zoom-slider::-moz-range-thumb {
|
|
width: 18px;
|
|
height: 18px;
|
|
border-radius: 50%;
|
|
background: white;
|
|
border: 2px solid rgba(180, 180, 180, 0.8);
|
|
cursor: pointer;
|
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.zoom-slider::-moz-range-thumb:hover {
|
|
transform: scale(1.1);
|
|
border-color: rgba(200, 200, 200, 1);
|
|
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
.zoom-slider::-moz-range-thumb:active {
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
/* Firefox Range Track */
|
|
.zoom-slider::-moz-range-track {
|
|
height: 5px;
|
|
border-radius: 3px;
|
|
background: rgba(200, 200, 200, 0.5);
|
|
transition: all 0.3s ease;
|
|
}
|
|
|
|
/* Firefox Range Track - Solid blue on hover */
|
|
.zoom-control:hover .zoom-slider::-moz-range-track,
|
|
.zoom-slider:hover::-moz-range-track {
|
|
background: #3b82f6; /* solid blue */
|
|
}
|
|
|
|
/* Reset Button - Circular with dynamic value inside */
|
|
.zoom-reset-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-width: 44px;
|
|
min-height: 44px;
|
|
padding: 0.5rem;
|
|
background: rgba(200, 200, 200, 0.2);
|
|
border: 2px solid rgba(220, 220, 220, 0.3);
|
|
border-radius: 50%;
|
|
color: rgba(255, 255, 255, 0.8);
|
|
font-size: 0.85rem;
|
|
font-weight: 700;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
flex-shrink: 0;
|
|
margin: 0 -5px 0 10px;
|
|
}
|
|
|
|
.zoom-reset-btn #zoom-value-current {
|
|
color: inherit;
|
|
font-size: inherit;
|
|
font-weight: inherit;
|
|
min-width: auto;
|
|
}
|
|
|
|
.zoom-reset-btn:hover {
|
|
background: rgba(220, 220, 220, 0.4);
|
|
border-color: rgba(240, 240, 240, 0.6);
|
|
color: white;
|
|
}
|
|
|
|
/* Green hover only when zoom is not at default (100) */
|
|
.zoom-reset-btn.zoom-not-default:hover {
|
|
background: #74aacd;
|
|
border-color: #74aacd;
|
|
color: white;
|
|
}
|
|
|
|
.zoom-reset-btn:active {
|
|
transform: scale(0.95);
|
|
}
|
|
|
|
.zoom-reset-btn:focus {
|
|
outline: 2px solid rgba(255, 255, 255, 0.6);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
/* Mobile Responsive - Horizontal button layout defined below (around line 2867) */
|
|
/* Old mobile styles removed - now using horizontal layout with all three buttons */
|
|
|
|
/* Very Small Screens - Ultra Compact */
|
|
@media (max-width: 480px) {
|
|
.zoom-control {
|
|
bottom: 40px;
|
|
padding: 0.35rem 0.7rem;
|
|
gap: 0.35rem;
|
|
}
|
|
|
|
.zoom-slider {
|
|
width: 100px;
|
|
}
|
|
|
|
/* Hide min/max labels on very small screens */
|
|
.zoom-value-min,
|
|
.zoom-value-max {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
/* =============================================================================
|
|
HTMX CSS TRANSITIONS
|
|
============================================================================= */
|
|
|
|
/* Inline loading transition styles moved to main section above (~line 1677) */
|
|
/* Prevent layout shift during content fade */
|
|
.cv-page-content-wrapper {
|
|
position: relative;
|
|
}
|