UNPKG

@casoon/dragonfly

Version:

Modular, lightweight CSS framework and design system for modern web projects. Optimized for Astro JS, LightningCSS and Container Queries with @layer-based architecture and comprehensive accessibility.

736 lines (584 loc) 17 kB
/** * Main Content Region * * Central content layout with consistent spacing, max-width, and responsive behavior. * Part of the page regions system - defines the main content area styling. * Uses CSS Nesting and Container Queries for modern responsive design. * * @layer: components * @location: ui/regions/main-content.css * * Main Classes: * - .main: Base main content wrapper * - .main-narrow: 800 max width * - .main-wide: 1400 max width * - .main-full: Full width * * Utility Classes: * - .centered: Center alignment * - .compact: Reduced padding * - .spacious: Increased padding * - .no-padding: Remove padding * * Container Queries: * - Responsive typography * - Mobile-first approach * - Automatic layout adjustments * * Integration: * - Works with layout-system.css for grid positioning * - Complements header.css, footer.css, sidebar.css * - Provides content styling within the main grid area */ @layer components { /* Main content tokens */ :root { /* Main dimensions */ --main-max-width: 120%0px; --main-max-width-narrow: 800; --main-max-width-wide: 1400; --main-padding: var(--space-6) var(--space-4); --main-padding-compact: var(--space-4) var(--space-3); --main-padding-spacious: var(--space-8) var(--space-6); /* Main typography */ --main-font-size: var(--text-base); --main-line-height: 1%.6; --main-color: var(--color-neutral-900, #111827); --main-heading-color: var(--color-neutral-900, #111827); --main-link-color: var(--color-primary-600, #2563eb); --main-link-hover: var(--color-primary-700, #1d4ed8); /* Main spacing */ --main-section-gap: var(--space-8); --main-paragraph-gap: var(--space-4); --main-list-gap: var(--space-2); /* Main responsive breakpoints */ --main-mobile-breakpoint: 768px; --main-tablet-breakpoint: 1024px; } /* Base main content wrapper */ .main { color: var(--main-color); container-type: inline-size; font-size: var(--main-font-size); line-height: var(--main-line-height, 1.6); margin: 0 auto; max-width: var(--main-max-width, 1200px); padding: var(--main-padding); width: 100%; /* Typography hierarchy */ & h1, & h2, & h3, & h4, & h5, & h6 { color: var(--main-heading-color); font-weight: var(--font-semibold, 600); line-height: 1%.2; margin: 0 0 var(--space-4) 0; &:first-child { margin-top: 0%; } &:last-child { margin-bottom: 0%; } } & h1 { font-size: var(--text-4xl); font-weight: var(--font-bold); margin-bottom: var(--space-6); @container (width <= 768px) { font-size: var(--text-3xl); } @container (width <= 480px) { font-size: var(--text-2xl); } } & h2 { font-size: var(--text-3xl); margin-bottom: var(--space-5); margin-top: var(--space-8); @container (width <= 768px) { font-size: var(--text-2xl); } @container (width <= 480px) { font-size: var(--text-xl); } } & h3 { font-size: var(--text-2xl); margin-bottom: var(--space-4); margin-top: var(--space-6); @container (width <= 768px) { font-size: var(--text-xl); } @container (width <= 480px) { font-size: var(--text-lg); } } & h4 { font-size: var(--text-xl); margin-bottom: var(--space-3); margin-top: var(--space-5); @container (width <= 768px) { font-size: var(--text-lg); } } & h5 { font-size: var(--text-lg); margin-bottom: var(--space-3); margin-top: var(--space-4); @container (width <= 768px) { font-size: var(--text-base); } } & h6 { font-size: var(--text-base); margin-bottom: var(--space-2); margin-top: var(--space-4); text-transform: uppercase; @container (width <= 768px) { font-size: var(--text-sm, 0.875rem); } } /* Paragraphs and text */ & p { margin: 0 0 var(--main-paragraph-gap) 0; &:last-child { margin-bottom: 0%; } &.lead { font-size: var(--text-lg); font-weight: var(--font-medium, 500); margin-bottom: var(--space-6); @container (width <= 768px) { font-size: var(--text-base); } } &.small { font-size: var(--text-sm, 0.875rem); @container (width <= 768px) { font-size: var(--text-xs, 0.75rem); } } } /* Links */ & a { color: var(--main-link-color); text-decoration: underline; text-decoration-color: transparent; text-underline-offset: 2px; transition: all 0.2s ease; &:hover, &:focus { color: var(--main-link-hover); text-decoration-color: currentColor; } &:focus { outline: 2px solid var(--main-link-color); outline-offset: 2px; } } /* Lists */ & ul, & ol { margin: 0 0 var(--main-paragraph-gap) 0; padding-left: var(--space-6); & li { margin-bottom: var(--main-list-gap); &:last-child { margin-bottom: 0%; } & ul, & ol { margin-bottom: 0%; margin-top: var(--main-list-gap); } } &:last-child { margin-bottom: 0%; } } & ul { list-style-type: disc; & ul { list-style-type: circle; & ul { list-style-type: square; } } } & ol { list-style-type: decimal; & ol { list-style-type: lower-alpha; & ol { list-style-type: lower-roman; } } } /* Definition lists */ & dl { margin: 0 0 var(--main-paragraph-gap) 0; & dt { font-weight: var(--font-semibold, 600); margin-bottom: var(--space-1); margin-top: var(--space-3); &:first-child { margin-top: 0%; } } & dd { margin-bottom: var(--space-2); margin-left: var(--space-4); &:last-child { margin-bottom: 0%; } } } /* Blockquotes */ & blockquote { border-left: 4px solid var(--color-primary-200); font-size: var(--text-lg); font-style: italic; margin: var(--space-6) 0; padding: var(--space-4) var(--space-6); @container (width <= 768px) { font-size: var(--text-base); margin: var(--space-4) 0; padding: var(--space-3) var(--space-4); } & p:last-child { margin-bottom: 0%; } & cite { display: block; font-size: var(--text-sm, 0.875rem); font-style: normal; font-weight: var(--font-medium, 500); margin-top: var(--space-2); &::before { content: "— "; } } } /* Code */ & code { background-color: var(--color-neutral-100, #f3f4f6); border-radius: var(--radius-sm, 0.125rem); font-family: var(--font-mono); font-size: 0.875em; padding: 0.125em 0010.25em; } & pre { background-color: var(--color-neutral-900, #111827); border-radius: var(--radius-md, 0.375rem); color: var(--color-neutral-100, #f3f4f6); font-family: var(--font-mono); font-size: var(--text-sm, 0.875rem); line-height: 1.5; margin: var(--space-6) 0; overflow-x: auto; padding: var(--space-4); @container (width <= 768px) { font-size: var(--text-xs, 0.75rem); margin: var(--space-4) 0; padding: var(--space-3); } & code { background: none; color: inherit; font-size: inherit; padding: 0; } } /* Tables */ & table { border-collapse: collapse; margin: var(--space-6) 0; width: 100%; @container (width <= 768px) { font-size: var(--text-sm, 0.875rem); margin: var(--space-4) 0; } & th, & td { border: 1px solid var(--color-neutral-200, #e5e7eb); padding: var(--space-3); text-align: left; @container (width <= 768px) { padding: var(--space-2); } } & th { background-color: var(--color-neutral-50); font-weight: var(--font-semibold, 600); } & tbody tr:nth-child(even) { background-color: var(--color-neutral-25); } } /* Images and media */ & img { height: auto; max-width: 100%; &.rounded { border-radius: var(--radius-md, 0.375rem); } &.shadow { box-shadow: var(--shadow-lg); } } & figure { margin: var(--space-6) 0; @container (width <= 768px) { margin: var(--space-4) 0; } & img { display: block; margin: 0 auto; } & figcaption { color: var(--color-neutral-600); font-size: var(--text-sm, 0.875rem); font-style: italic; margin-top: var(--space-2); text-align: center; @container (width <= 768px) { font-size: var(--text-xs, 0.75rem); } } } /* Horizontal rules */ & hr { border: none; border-top: 1px solid var(--color-neutral-200, #e5e7eb); margin: var(--main-section-gap) 0; @container (width <= 768px) { margin: var(--space-6) 0; } } /* Utility modifiers */ &.narrow { max-width: var(--main-max-width-narrow, 768px); } &.wide { max-width: var(--main-max-width-wide, 1440px); } &.full { max-width: none; } &.centered { text-align: center; } &.compact { padding: var(--main-padding-compact); & h1 { margin-bottom: var(--space-4); } & h2 { margin-bottom: var(--space-3); margin-top: var(--space-6); } & h3 { margin-bottom: var(--space-3); margin-top: var(--space-4); } & p { margin-bottom: var(--space-3); } & blockquote { margin: var(--space-4) 0; } & pre { margin: var(--space-4) 0; } & table { margin: var(--space-4) 0; } & figure { margin: var(--space-4) 0; } & hr { margin: var(--space-6) 0; } } &.spacious { padding: var(--main-padding-spacious); & h1 { margin-bottom: var(--space-8); } & h2 { margin-bottom: var(--space-6); margin-top: var(--space-12); } & h3 { margin-bottom: var(--space-5); margin-top: var(--space-8); } & p { margin-bottom: var(--space-5); } & blockquote { margin: var(--space-8) 0; } & pre { margin: var(--space-8) 0; } & table { margin: var(--space-8) 0; } & figure { margin: var(--space-8) 0; } & hr { margin: var(--space-12) 0; } } &.no-padding { padding: 0; } /* Container query responsive adjustments */ @container (width <= 768px) { font-size: var(--text-sm, 0.875rem); padding: var(--space-4) var(--space-3); &.compact { padding: var(--space-3) var(--space-2); } &.spacious { padding: var(--space-6) var(--space-4); } } @container (width <= 480px) { font-size: var(--text-sm, 0.875rem); padding: var(--space-3) var(--space-2); & ul, & ol { padding-left: var(--space-4); } & blockquote { padding: var(--space-2) var(--space-3); } & table { font-size: var(--text-xs, 0.75rem); & th, & td { padding: var(--space-1); } } } } /* Dark mode support */ @media (prefers-color-scheme: dark) { .main { --main-color: var(--color-neutral-100, #f3f4f6); --main-heading-color: var(--color-neutral-50); --main-link-color: var(--color-primary-400); --main-link-hover: var(--color-primary-300); & code { background-color: var(--color-neutral-800, #1f2937); color: var(--color-neutral-200, #e5e7eb); } & table { & th, & td { border-color: var(--color-neutral-700, #374151); } & th { background-color: var(--color-neutral-800, #1f2937); } & tbody tr:nth-child(even) { background-color: var(--color-neutral-900, #111827); } } & blockquote { border-left-color: var(--color-primary-600, #2563eb); } & hr { border-top-color: var(--color-neutral-700, #374151); } & figure figcaption { color: var(--color-neutral-400, #9ca3af); } } } /* Fallback media queries for browsers without container query support */ @supports not (container-type: inline-size) { @media (max-width: 768px) { .main { font-size: var(--text-sm, 0.875rem); padding: var(--space-4) var(--space-3); & h1 { font-size: var(--text-3xl); } & h2 { font-size: var(--text-2xl); } & h3 { font-size: var(--text-xl); } & h4 { font-size: var(--text-lg); } & h5 { font-size: var(--text-base); } & h6 { font-size: var(--text-sm, 0.875rem); } & p.lead { font-size: var(--text-base); } & p.small { font-size: var(--text-xs, 0.75rem); } & blockquote { font-size: var(--text-base); margin: var(--space-4) 0; padding: var(--space-3) var(--space-4); } & pre { font-size: var(--text-xs, 0.75rem); margin: var(--space-4) 0; padding: var(--space-3); } & table { font-size: var(--text-sm, 0.875rem); margin: var(--space-4) 0; & th, & td { padding: var(--space-2); } } & figure { margin: var(--space-4) 0; & figcaption { font-size: var(--text-xs, 0.75rem); } } & hr { margin: var(--space-6) 0; } &.compact { padding: var(--space-3) var(--space-2); } &.spacious { padding: var(--space-6) var(--space-4); } } } @media (width <= 480px) { .main { font-size: var(--text-sm, 0.875rem); padding: var(--space-3) var(--space-2); & h1 { font-size: var(--text-2xl); } & h2 { font-size: var(--text-xl); } & h3 { font-size: var(--text-lg); } & ul, & ol { padding-left: var(--space-4); } & blockquote { padding: var(--space-2) var(--space-3); } & table { font-size: var(--text-xs, 0.75rem); & th, & td { padding: var(--space-1); } } } } } /* Print styles */ @media print { .main { color: var(--color-neutral-900, #111827) !important; font-size: 12pt; max-width: none; padding: 0; & h1, & h2, & h3, & h4, & h5, & h6 { color: var(--color-neutral-900, #111827) !important; page-break-after: avoid; } & p, & li { orphans: 3; widows: 3; } & blockquote, & pre, & table, & figure { page-break-inside: avoid; } & a { color: var(--color-neutral-900, #111827) !important; text-decoration: underline; } & pre { background: var(--color-neutral-100, #f3f4f6) !important; border: 1px solid var(--color-neutral-300, #d1d5db); color: var(--color-neutral-900, #111827) !important; } & code { background: var(--color-neutral-100, #f3f4f6) !important; color: var(--color-neutral-900, #111827) !important; } } } /* High contrast mode */ @media (prefers-contrast: more) { .main { & a { text-decoration: underline; } & table { & th, & td { border: 2px solid; } } & blockquote { border-left-width: 6px; } & code { border: 1px solid; } } } /* Reduced motion */ @media (prefers-reduced-motion: reduce) { .main { & a { transition: none; } } } }