Files
sunday/static/css/style.css
2025-11-16 13:17:07 +10:00

1285 lines
27 KiB
CSS

/* ============================================================
SUNDAY COMICS - CORE STYLES
============================================================
This file contains the framework CSS that references variables
defined in variables.css. When updating from upstream, this file
may change, but your customizations in variables.css will be preserved.
Do not edit this file directly for design changes - use variables.css instead.
============================================================ */
/* Reset and base styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: var(--font-family);
line-height: var(--line-height-base);
color: var(--color-text);
background-color: var(--color-background);
}
/* Screen reader only content - visually hidden but accessible to assistive technologies */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
/* Skip to main content link - hidden until focused */
.skip-to-main {
position: absolute;
top: -100px;
left: 0;
z-index: 9999;
padding: var(--space-md) var(--space-lg);
background-color: var(--color-primary);
color: var(--color-background);
text-decoration: none;
font-weight: bold;
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
border: var(--border-width-thick) solid var(--color-primary);
}
.skip-to-main:focus {
top: 0;
outline: 3px solid var(--color-primary);
outline-offset: 2px;
}
/* Focus indicators for accessibility */
a:focus,
button:focus,
input:focus,
.btn:focus,
.btn-nav:focus,
.btn-icon-nav:focus {
outline: 3px solid var(--color-primary);
outline-offset: 2px;
}
/* Focus visible for modern browsers (shows focus only on keyboard navigation) */
a:focus-visible,
button:focus-visible,
input:focus-visible,
.btn:focus-visible,
.btn-nav:focus-visible,
.btn-icon-nav:focus-visible {
outline: 3px solid var(--color-primary);
outline-offset: 2px;
}
/* Ensure disabled buttons don't show interactive focus */
.btn-disabled:focus,
.btn-icon-disabled:focus {
outline: 2px solid var(--color-disabled);
outline-offset: 2px;
}
.container {
max-width: var(--container-max-width);
margin: 0 auto;
padding: 0 var(--space-md);
}
/* Site Header Image */
.site-header-image {
width: 100%;
overflow: hidden;
margin-bottom: 0;
}
.site-header-image img {
width: 100%;
height: auto;
display: block;
}
/* Site Footer Image */
.site-footer-image {
width: 100%;
overflow: hidden;
margin-top: 0;
}
.site-footer-image img {
width: 100%;
height: auto;
display: block;
}
/* Header and Navigation */
header {
border-bottom: var(--border-width-thick) solid var(--border-color);
padding: var(--space-lg) 0;
margin-bottom: var(--space-xl);
}
/* Header with image variant - no border, no padding, centered nav */
header.header-with-image {
border-bottom: none;
padding: var(--space-md) 0 0 0;
margin-bottom: var(--space-sm);
}
header.header-with-image nav .container {
justify-content: center;
}
header.header-with-image .nav-links a {
font-size: var(--font-size-xl);
font-weight: bold;
}
nav .container {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: var(--space-md);
}
.nav-brand a {
color: var(--color-text);
text-decoration: none;
font-size: var(--font-size-2xl);
font-weight: bold;
text-transform: uppercase;
letter-spacing: var(--letter-spacing-wide);
display: inline-flex;
align-items: center;
gap: var(--space-sm);
}
.nav-logo {
height: 2.5rem;
width: auto;
display: inline-block;
vertical-align: middle;
}
.nav-logo-beside {
/* Logo displayed beside the title */
}
.nav-logo-replace {
/* Logo replaces the title - can be larger */
height: 3rem;
}
.nav-title {
/* Title text when displayed beside logo */
display: inline-block;
}
.nav-links {
display: flex;
list-style: none;
gap: var(--space-lg);
}
.nav-links a {
color: var(--color-text);
text-decoration: none;
text-transform: lowercase;
display: inline-flex;
align-items: center;
gap: 0.3rem;
}
.nav-links a:hover,
.nav-links a.active {
text-decoration: underline;
}
.nav-icon {
height: 1rem;
width: auto;
display: inline-block;
vertical-align: middle;
}
/* Main content */
main {
min-height: calc(100vh - 250px);
padding: 0 0 var(--space-2xl) 0;
}
/* Page header */
.page-header {
margin-bottom: var(--space-xl);
padding-bottom: var(--space-md);
border-bottom: var(--border-width-thin) solid var(--border-color);
}
.page-header h1 {
color: var(--color-text);
font-size: var(--font-size-3xl);
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
}
.page-header p {
margin-top: var(--space-sm);
font-size: var(--font-size-lg);
}
/* Content sections */
.about-content {
max-width: var(--content-max-width);
}
.about-content h2 {
color: var(--color-text);
margin-top: var(--space-xl);
margin-bottom: var(--space-sm);
text-transform: uppercase;
font-size: var(--font-size-xl);
letter-spacing: var(--letter-spacing-tight);
}
.about-content p {
margin-bottom: var(--space-md);
}
.about-content ul {
margin-left: var(--space-lg);
margin-bottom: var(--space-md);
}
.about-content li {
margin-bottom: 0.3rem;
}
/* Button */
.btn {
display: inline-block;
padding: 0.6rem 1.2rem;
background-color: var(--color-primary);
color: var(--color-background);
text-decoration: none;
border: var(--border-width-thin) solid var(--border-color);
cursor: pointer;
font-size: var(--font-size-lg);
font-family: var(--font-family);
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
}
.btn:hover {
background-color: var(--color-background);
color: var(--color-primary);
}
/* Error page */
.error-page {
text-align: center;
padding: var(--space-3xl) var(--space-md);
}
.error-page h1 {
font-size: var(--font-size-4xl);
color: var(--color-text);
margin-bottom: var(--space-md);
}
.error-page h2 {
color: var(--color-text);
margin-bottom: var(--space-md);
text-transform: uppercase;
}
.error-page p {
color: var(--color-text);
margin-bottom: var(--space-xl);
}
/* Comic Container */
.comic-container {
border: var(--border-width-thick) solid var(--border-color);
padding: var(--space-md);
}
/* Full-width comic variant */
.comic-container-fullwidth {
border: none;
padding: 0;
}
.comic-container-fullwidth .comic-header,
.comic-container-fullwidth .comic-navigation,
.comic-container-fullwidth .comic-transcript {
max-width: var(--container-max-width);
margin-left: auto;
margin-right: auto;
padding-left: var(--space-md);
padding-right: var(--space-md);
}
.comic-container-fullwidth .comic-image {
width: calc(100vw - 4rem);
max-width: calc(100vw - 4rem);
margin-left: calc(-1 * (50vw - 50% - 2rem));
margin-right: calc(-1 * (50vw - 50% - 2rem));
}
.comic-container-fullwidth .comic-image img {
width: 100%;
max-width: 100%;
}
/* Plain comic variant - no header, no nav border */
.comic-container-plain .comic-navigation {
border-top: none;
padding-top: 0;
}
.comic-header {
margin-bottom: var(--space-lg);
padding-bottom: var(--space-md);
border-bottom: var(--border-width-thin) solid var(--border-color);
}
.comic-header h1 {
color: var(--color-text);
font-size: var(--font-size-2xl);
margin-bottom: var(--space-xs);
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
}
.comic-date {
color: var(--color-text);
font-size: var(--font-size-md);
}
/* Comic Image */
.comic-image {
text-align: center;
margin-bottom: var(--space-lg);
padding: var(--space-sm);
background: var(--color-background);
}
/* Remove outline when comic image container is focused programmatically (for keyboard nav) */
.comic-image:focus {
outline: none;
}
.comic-image a {
display: block;
cursor: pointer;
}
.comic-image img {
max-width: 100%;
height: auto;
display: block;
margin: 0 auto;
}
/* Multi-image comics (webtoon style) */
.comic-image-multi {
padding: 0; /* Remove padding for seamless stacking */
}
.comic-image-multi img {
display: block;
width: 100%;
margin: 0;
padding: 0;
vertical-align: bottom; /* Removes tiny gap below images */
}
/* Lazy-loaded images - placeholder while loading */
.comic-image-multi img.lazy-load {
min-height: 200px;
background: var(--color-hover-bg);
}
.comic-image-multi img.lazy-load.loaded {
min-height: auto;
background: none;
}
/* Comic Navigation */
.comic-navigation {
border-top: var(--border-width-thin) solid var(--border-color);
padding-top: var(--space-md);
margin-bottom: var(--space-md);
}
.nav-buttons {
display: flex;
justify-content: center;
align-items: center;
gap: var(--space-sm);
flex-wrap: wrap;
}
.btn-nav {
padding: 0.4rem 0.8rem;
font-size: 0.8rem;
}
.btn-disabled {
background-color: var(--color-background);
color: var(--color-disabled);
border-color: var(--color-disabled);
cursor: not-allowed;
}
.btn-disabled:hover {
background-color: var(--color-background);
color: var(--color-disabled);
}
/* Icon-based navigation buttons */
.btn-icon-nav {
display: inline-block;
cursor: pointer;
transition: opacity var(--transition-speed);
}
.btn-icon-nav img {
height: 2rem;
width: auto;
display: block;
}
.btn-icon-nav:hover {
opacity: 0.7;
}
.btn-icon-disabled {
opacity: 0.3;
cursor: not-allowed;
}
.btn-icon-disabled:hover {
opacity: 0.3;
}
.comic-date-display {
padding: 0 var(--space-sm);
color: var(--color-text);
font-weight: bold;
margin: 0 var(--space-xs);
font-size: var(--font-size-md);
font-style: italic;
}
/* Comic Transcript */
.comic-transcript {
border: var(--border-width-thin) solid var(--border-color);
padding: var(--space-md);
margin-top: var(--space-md);
}
.comic-transcript h3 {
color: var(--color-text);
margin-bottom: var(--space-sm);
text-transform: uppercase;
font-size: var(--font-size-lg);
letter-spacing: var(--letter-spacing-tight);
}
.comic-transcript p {
color: var(--color-text);
line-height: var(--line-height-relaxed);
font-size: var(--font-size-lg);
}
.comic-transcript ul,
.comic-transcript ol {
margin-left: var(--space-lg);
margin-bottom: var(--space-md);
color: var(--color-text);
line-height: var(--line-height-relaxed);
font-size: var(--font-size-lg);
}
.comic-transcript li {
margin-bottom: 0.3rem;
}
/* Archive Content */
.archive-content {
margin-top: var(--space-md);
}
/* Section Headers for Archive */
.section-header {
margin-top: var(--space-2xl);
margin-bottom: var(--space-lg);
padding-bottom: var(--space-sm);
border-bottom: var(--border-width-thin) solid var(--border-color);
}
.section-header:first-child {
margin-top: 0;
}
.section-header h2 {
color: var(--color-text);
font-size: var(--font-size-xl);
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
}
.archive-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(var(--archive-grid-min), 1fr));
gap: var(--space-md);
}
.archive-item {
border: var(--border-width-thin) solid var(--border-color);
overflow: hidden;
}
.archive-item:hover {
background: var(--color-hover-bg);
}
.archive-item a {
text-decoration: none;
color: var(--color-text);
display: block;
}
/* Enhanced focus indicator for archive items */
.archive-item a:focus,
.archive-item a:focus-visible {
outline: 3px solid var(--color-primary);
outline-offset: -3px; /* Inset the outline so it's inside the border */
background: var(--color-hover-bg);
}
.archive-item img {
width: 100%;
height: var(--archive-thumbnail-height);
object-fit: cover;
display: block;
border-bottom: var(--border-width-thin) solid var(--border-color);
}
.archive-info {
padding: 0.75rem;
}
.archive-info h3 {
color: var(--color-text);
font-size: var(--font-size-md);
margin-bottom: var(--space-xs);
line-height: var(--line-height-tight);
text-transform: uppercase;
}
.archive-date {
color: var(--color-text);
font-size: var(--font-size-sm);
}
/* Full-width Archive Mode */
.page-header-fullwidth {
padding: 0 var(--space-xl);
}
.archive-content-fullwidth {
max-width: 100%;
padding: 0 var(--space-xl);
}
.archive-grid-fullwidth {
grid-template-columns: repeat(4, 1fr);
gap: var(--space-lg);
}
.archive-item-fullwidth img {
width: 100%;
height: auto;
aspect-ratio: 1;
object-fit: cover;
}
.archive-item-fullwidth .archive-info {
text-align: center;
padding: var(--space-sm);
}
.archive-item-fullwidth .archive-date {
font-size: var(--font-size-md);
margin: 0;
}
/* Responsive adjustments */
@media (max-width: 768px) {
.nav-brand a {
font-size: var(--font-size-xl);
}
.nav-logo {
height: 2rem;
}
.nav-logo-replace {
height: 2.5rem;
}
.nav-links {
gap: var(--space-md);
}
.btn-nav {
padding: 0.3rem 0.6rem;
font-size: var(--font-size-sm);
}
.btn-icon-nav img {
height: 1.5rem;
}
.comic-date-display {
font-size: var(--font-size-xs);
flex-basis: 100%;
text-align: center;
padding-top: var(--space-xs);
}
/* Keep icon navigation on single line on mobile */
.nav-buttons:has(.btn-icon-nav) {
flex-wrap: nowrap;
}
.nav-buttons:has(.btn-icon-nav) .comic-date-display {
flex-basis: auto;
padding-top: 0;
font-size: var(--font-size-xs);
white-space: nowrap;
}
.nav-buttons {
flex-wrap: wrap;
}
.archive-grid {
grid-template-columns: repeat(auto-fill, minmax(var(--archive-grid-min-mobile), 1fr));
gap: 0.75rem;
}
.archive-grid-fullwidth {
grid-template-columns: repeat(2, 1fr);
gap: var(--space-md);
}
.page-header-fullwidth {
padding: 0 var(--space-md);
}
.archive-content-fullwidth {
padding: 0 var(--space-md);
}
.comic-container {
padding: 0.75rem;
}
/* Compact footer mobile adjustments */
footer.compact-footer .container {
max-width: none;
flex-direction: column;
align-items: center;
text-align: center;
gap: var(--space-xs);
}
footer.compact-footer .footer-content {
flex-direction: column;
align-items: center;
gap: var(--space-xs);
}
footer.compact-footer .footer-section {
flex-direction: column;
gap: var(--space-xs);
}
footer.compact-footer .footer-section::after {
display: none;
}
footer.compact-footer .social-links {
flex-direction: column;
}
footer.compact-footer .footer-bottom::before {
display: none;
}
.footer-divider {
display: none;
}
.footer-bottom {
gap: var(--space-sm);
}
.footer-bottom p,
.footer-terms {
flex-basis: 100%;
text-align: center;
}
.site-credit {
flex-basis: 100%;
display: flex;
justify-content: center;
align-items: center;
}
}
/* Footer */
footer {
border-top: var(--border-width-thick) solid var(--border-color);
padding: var(--space-xl) 0;
margin-top: var(--space-2xl);
}
.footer-content {
display: flex;
justify-content: space-around;
gap: var(--space-xl);
margin-bottom: var(--space-xl);
flex-wrap: wrap;
}
.footer-section {
flex: 1;
min-width: 200px;
}
.footer-section h3 {
color: var(--color-text);
font-size: var(--font-size-lg);
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
margin-bottom: var(--space-md);
}
.social-links {
display: flex;
flex-direction: column;
gap: var(--space-sm);
}
.social-links a {
color: var(--color-text);
text-decoration: none;
font-size: var(--font-size-md);
}
.social-links a:hover {
text-decoration: underline;
}
.social-icon {
height: 1.5rem;
width: auto;
display: block;
transition: opacity var(--transition-speed);
}
.social-icon:hover {
opacity: 0.7;
}
/* Icon-only social links layout */
.social-links-icons {
flex-direction: row;
align-items: center;
}
.social-links-icons a:hover {
text-decoration: none;
}
.newsletter-form {
display: flex;
gap: var(--space-sm);
}
.newsletter-form input[type="email"] {
flex: 1;
padding: var(--space-sm);
border: var(--border-width-thin) solid var(--border-color);
font-family: var(--font-family);
font-size: var(--font-size-md);
}
.newsletter-form button {
padding: var(--space-sm) var(--space-md);
background-color: var(--color-primary);
color: var(--color-background);
border: var(--border-width-thin) solid var(--border-color);
cursor: pointer;
font-family: var(--font-family);
font-size: var(--font-size-md);
text-transform: uppercase;
}
.newsletter-form button:hover {
background-color: var(--color-background);
color: var(--color-primary);
}
.newsletter-placeholder {
font-size: var(--font-size-md);
color: var(--color-text-muted);
}
.shareable-banner {
display: flex;
flex-direction: column;
gap: var(--space-sm);
}
.banner-image {
display: block;
max-width: 100%;
height: auto;
}
.banner-code {
font-size: var(--font-size-sm);
}
.banner-code summary {
cursor: pointer;
color: var(--color-text-muted);
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
padding: var(--space-xs) 0;
}
.banner-code summary:hover {
color: var(--color-text);
}
.banner-code summary:focus {
outline: 3px solid var(--color-primary);
outline-offset: 2px;
}
.banner-code textarea {
width: 100%;
font-family: var(--font-family);
font-size: var(--font-size-xs);
padding: var(--space-sm);
margin-top: var(--space-xs);
border: var(--border-width-thin) solid var(--border-color);
background-color: var(--color-background);
color: var(--color-text);
resize: vertical;
min-height: 60px;
}
.banner-code textarea:focus {
outline: 3px solid var(--color-primary);
outline-offset: 2px;
}
.site-credit {
display: flex;
flex-direction: column;
}
.credit-image {
display: block;
max-width: 100%;
height: auto;
}
.footer-bottom {
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-md);
padding-top: var(--space-lg);
border-top: var(--border-width-thin) solid var(--border-color);
flex-wrap: wrap;
}
.footer-bottom p {
margin: 0;
color: var(--color-text);
font-size: var(--font-size-md);
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
}
.footer-divider {
color: var(--color-text);
font-size: var(--font-size-md);
}
.footer-bottom a.api-link {
color: var(--color-text);
text-decoration: none;
font-size: var(--font-size-md);
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
}
.footer-bottom a.api-link:hover {
text-decoration: underline;
}
.footer-terms {
color: var(--color-text);
text-decoration: none;
font-size: var(--font-size-md);
transition: opacity 0.2s ease;
}
.footer-terms:hover {
text-decoration: underline;
opacity: 0.8;
}
/* Compact Footer Mode */
footer.compact-footer {
border-top: none;
padding: 0;
margin-top: 0;
}
footer.compact-footer .container {
max-width: none;
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-md);
flex-wrap: wrap;
}
footer.compact-footer .footer-content {
display: flex;
align-items: center;
gap: var(--space-md);
margin-bottom: 0;
flex-wrap: wrap;
}
footer.compact-footer .footer-section {
flex: none;
min-width: auto;
display: flex;
align-items: center;
gap: var(--space-sm);
}
footer.compact-footer .footer-section h3 {
font-size: var(--font-size-sm);
margin-bottom: 0;
display: inline;
}
footer.compact-footer .social-links {
flex-direction: row;
gap: var(--space-sm);
}
footer.compact-footer .social-links-icons {
gap: var(--space-md);
}
footer.compact-footer .social-links a {
font-size: var(--font-size-sm);
}
footer.compact-footer .newsletter-placeholder {
font-size: var(--font-size-sm);
margin: 0;
}
footer.compact-footer .footer-bottom {
border-top: none;
padding-top: 0;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--space-xs);
}
footer.compact-footer .footer-bottom::before {
content: '|';
margin-right: var(--space-md);
color: var(--color-text-muted);
}
footer.compact-footer .footer-bottom p {
font-size: var(--font-size-sm);
margin: 0;
}
footer.compact-footer .footer-bottom a.api-link {
font-size: var(--font-size-sm);
}
footer.compact-footer .footer-bottom a.api-link::before {
content: '|';
margin: 0 var(--space-sm);
color: var(--color-text-muted);
}
/* Add separator between sections in compact mode */
footer.compact-footer .footer-section:not(:last-child)::after {
content: '|';
margin-left: var(--space-md);
color: var(--color-text-muted);
}
/* ============================================================
SHARE/EMBED FEATURE STYLES
============================================================ */
/* Share section (contains permalink and embed buttons) */
.comic-share-section {
margin-top: var(--space-lg);
text-align: center;
display: flex;
justify-content: center;
gap: var(--space-md);
flex-wrap: wrap;
}
/* Permalink button */
.btn-permalink {
padding: var(--space-sm) var(--space-lg);
background-color: var(--color-background);
border: var(--border-width-thin) solid var(--color-border);
color: var(--color-text);
font-family: var(--font-family);
font-size: var(--font-size-md);
cursor: pointer;
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
transition: background-color var(--transition-speed);
}
.btn-permalink:hover {
background-color: var(--color-hover-bg);
}
.btn-permalink:focus {
outline: 3px solid var(--color-primary);
outline-offset: 2px;
}
.btn-permalink.copied {
background-color: var(--color-primary);
color: var(--color-background);
}
/* Embed button */
.btn-embed {
padding: var(--space-sm) var(--space-lg);
background-color: var(--color-background);
border: var(--border-width-thin) solid var(--color-border);
color: var(--color-text);
font-family: var(--font-family);
font-size: var(--font-size-md);
cursor: pointer;
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
transition: background-color var(--transition-speed);
}
.btn-embed:hover {
background-color: var(--color-hover-bg);
}
.btn-embed:focus {
outline: 3px solid var(--color-primary);
outline-offset: 2px;
}
/* Share button icons */
.btn-with-icon {
display: inline-flex;
align-items: center;
gap: var(--space-sm);
}
.btn-with-icon .btn-icon {
width: 16px;
height: 16px;
flex-shrink: 0;
}
.btn-permalink.copied .btn-icon {
filter: invert(1);
}
/* Modal overlay */
.modal {
display: none; /* Hidden by default */
position: fixed;
z-index: 10000;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0, 0, 0, 0.6);
}
/* Modal content box */
.modal-content {
background-color: var(--color-background);
margin: 10% auto;
padding: 0;
border: var(--border-width-thick) solid var(--color-border);
max-width: 600px;
width: 90%;
}
/* Modal header */
.modal-header {
padding: var(--space-md) var(--space-lg);
border-bottom: var(--border-width-thin) solid var(--color-border);
display: flex;
justify-content: space-between;
align-items: center;
}
.modal-header h2 {
margin: 0;
font-size: var(--font-size-xl);
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
}
/* Modal close button */
.modal-close {
background: none;
border: none;
font-size: var(--font-size-3xl);
font-weight: bold;
cursor: pointer;
color: var(--color-text);
line-height: 1;
padding: 0;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
}
.modal-close:hover,
.modal-close:focus {
color: var(--color-text-muted);
outline: none;
}
/* Modal body */
.modal-body {
padding: var(--space-lg);
}
.modal-body p {
margin-bottom: var(--space-md);
font-size: var(--font-size-md);
}
/* Embed code textarea */
#embed-code {
width: 100%;
min-height: 100px;
padding: var(--space-md);
font-family: var(--font-family);
font-size: var(--font-size-sm);
border: var(--border-width-thin) solid var(--color-border);
background-color: var(--color-background);
color: var(--color-text);
resize: vertical;
margin-bottom: var(--space-md);
}
#embed-code:focus {
outline: 3px solid var(--color-primary);
outline-offset: 2px;
}
/* Copy button */
.btn-copy {
padding: var(--space-sm) var(--space-lg);
background-color: var(--color-primary);
border: var(--border-width-thin) solid var(--color-border);
color: var(--color-background);
font-family: var(--font-family);
font-size: var(--font-size-md);
cursor: pointer;
text-transform: uppercase;
letter-spacing: var(--letter-spacing-tight);
width: 100%;
transition: background-color var(--transition-speed);
}
.btn-copy:hover {
background-color: var(--color-text);
}
.btn-copy:focus {
outline: 3px solid var(--color-primary);
outline-offset: 2px;
}
.btn-copy.copied {
background-color: var(--color-text-muted);
}
/* Embed preview link */
.embed-preview-link {
margin-top: var(--space-md);
font-size: var(--font-size-sm);
text-align: center;
}
.embed-preview-link a {
color: var(--color-text);
text-decoration: underline;
}
.embed-preview-link a:hover {
color: var(--color-text-muted);
}
/* Mobile responsive modal */
@media (max-width: 768px) {
.modal-content {
margin: 20% auto;
width: 95%;
}
.modal-header h2 {
font-size: var(--font-size-lg);
}
#embed-code {
font-size: var(--font-size-xs);
}
}