/* ========================================================================== {{site.name}} - CSS Framework Generated by /create-local-pbn ========================================================================== */ /* -------------------------------------------------------------------------- CSS Variables -------------------------------------------------------------------------- */ :root { /* Colors - Brand palette */ --color-primary: #C86437; /* Primary brand color */ --color-primary-dark: #A84F2C; --color-primary-light: #FBF0E8; --color-secondary: #8B2E14; --color-secondary-dark: #6E2410; --color-secondary-light: #B5442A; --color-accent: #8B2E14; /* Neutrals */ --color-white: #FFFFFF; --color-cream: #FAF8F5; --color-gray-100: #F5F3F0; --color-gray-200: #E8E4DF; --color-gray-300: #D4CFC8; --color-gray-400: #A9A29A; --color-gray-500: #7A746C; --color-gray-600: #5A544D; --color-gray-700: #3D3935; --color-gray-800: #2A2724; --color-black: #1A1817; /* Typography */ --font-primary: 'Playfair Display', Georgia, 'Times New Roman', serif; --font-secondary: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --font-size-xs: 0.75rem; --font-size-sm: 0.875rem; --font-size-base: 1rem; --font-size-lg: 1.125rem; --font-size-xl: 1.25rem; --font-size-2xl: 1.5rem; --font-size-3xl: 1.875rem; --font-size-4xl: 2.25rem; --font-size-5xl: 3rem; --line-height-tight: 1.25; --line-height-normal: 1.5; --line-height-relaxed: 1.75; /* Spacing */ --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem; --space-10: 2.5rem; --space-12: 3rem; --space-16: 4rem; --space-20: 5rem; --space-24: 6rem; /* Layout */ --container-sm: 640px; --container-md: 768px; --container-lg: 1024px; --container-xl: 1200px; /* Borders */ --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; --radius-xl: 16px; --radius-full: 9999px; --border-radius: var(--radius-lg); /* Shadows */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07); --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1); --shadow-xl: 0 20px 25px rgba(0, 0, 0, 0.1); /* Transitions */ --transition-fast: 150ms ease; --transition-normal: 250ms ease; --transition-slow: 350ms ease; } /* -------------------------------------------------------------------------- Reset & Base -------------------------------------------------------------------------- */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; scroll-behavior: smooth; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body { font-family: var(--font-secondary); font-size: var(--font-size-base); line-height: var(--line-height-normal); color: var(--color-gray-700); background-color: var(--color-cream); } img { max-width: 100%; height: auto; display: block; } a { color: var(--color-primary); text-decoration: none; transition: color var(--transition-fast); } a:hover { color: var(--color-primary-dark); } /* -------------------------------------------------------------------------- Skip Link (Accessibility) -------------------------------------------------------------------------- */ .skip-link { position: absolute; left: -9999px; top: auto; width: 1px; height: 1px; overflow: hidden; z-index: 9999; } .skip-link:focus { position: fixed; top: 0; left: 0; width: auto; height: auto; overflow: visible; padding: var(--space-3) var(--space-6); background: var(--color-primary); color: var(--color-white); font-weight: 600; text-decoration: none; z-index: 9999; } /* -------------------------------------------------------------------------- Typography -------------------------------------------------------------------------- */ h1, h2, h3, h4, h5, h6 { font-family: var(--font-primary); font-weight: 400; line-height: var(--line-height-tight); color: var(--color-gray-800); margin-bottom: var(--space-4); } h1 { font-size: var(--font-size-4xl); letter-spacing: -0.02em; } h2 { font-size: var(--font-size-3xl); } h3 { font-size: var(--font-size-2xl); } h4 { font-size: var(--font-size-xl); } h5 { font-size: var(--font-size-lg); } h6 { font-size: var(--font-size-base); font-weight: 600; } p { margin-bottom: var(--space-4); } p:last-child { margin-bottom: 0; } .lead { font-size: var(--font-size-lg); line-height: var(--line-height-relaxed); color: var(--color-gray-600); } .small { font-size: var(--font-size-sm); } strong, b { font-weight: 600; } /* -------------------------------------------------------------------------- Layout -------------------------------------------------------------------------- */ .container { width: 100%; max-width: var(--container-xl); margin: 0 auto; padding: 0 var(--space-4); } .container-sm { max-width: var(--container-sm); } .container-md { max-width: var(--container-md); } .container-lg { max-width: var(--container-lg); } section { padding: var(--space-16) 0; } .section-alt { background-color: var(--color-white); } /* Grid */ .grid { display: grid; gap: var(--space-6); } .grid-2 { grid-template-columns: repeat(2, 1fr); } .grid-3 { grid-template-columns: repeat(3, 1fr); } .grid-4 { grid-template-columns: repeat(4, 1fr); } @media (max-width: 768px) { .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; } } @media (min-width: 769px) and (max-width: 1024px) { .grid-3 { grid-template-columns: repeat(2, 1fr); } .grid-4 { grid-template-columns: repeat(2, 1fr); } } /* Flexbox utilities */ .flex { display: flex; } .flex-col { flex-direction: column; } .flex-wrap { flex-wrap: wrap; } .items-center { align-items: center; } .items-start { align-items: flex-start; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .gap-2 { gap: var(--space-2); } .gap-4 { gap: var(--space-4); } .gap-6 { gap: var(--space-6); } .gap-8 { gap: var(--space-8); } /* -------------------------------------------------------------------------- Header -------------------------------------------------------------------------- */ .header { background-color: var(--color-white); padding: var(--space-4) 0; position: sticky; top: 0; z-index: 100; box-shadow: var(--shadow-sm); } .header-inner { display: flex; align-items: center; justify-content: space-between; } .logo { font-family: var(--font-primary); font-size: var(--font-size-xl); color: var(--color-primary); font-weight: 400; } .logo span { color: var(--color-gray-500); font-weight: 300; } .nav { display: flex; gap: var(--space-6); } .nav a { color: var(--color-gray-600); font-size: var(--font-size-sm); font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; padding: var(--space-2) 0; border-bottom: 2px solid transparent; transition: all var(--transition-fast); } .nav a:hover, .nav a.active { color: var(--color-primary); border-bottom-color: var(--color-primary); } /* Mobile nav toggle */ .nav-toggle { display: none; background: none; border: none; cursor: pointer; padding: var(--space-2); } .nav-toggle span { display: block; width: 24px; height: 2px; background-color: var(--color-gray-700); margin: 5px 0; transition: var(--transition-fast); } @media (max-width: 768px) { .nav { display: none; position: absolute; top: 100%; left: 0; right: 0; background: var(--color-white); flex-direction: column; padding: var(--space-4); box-shadow: var(--shadow-md); } .nav.active { display: flex; } .nav-toggle { display: block; } } /* -------------------------------------------------------------------------- Hero -------------------------------------------------------------------------- */ .hero { background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-dark) 100%); color: var(--color-white); padding: var(--space-20) 0; text-align: center; } .hero h1 { color: var(--color-white); margin-bottom: var(--space-4); } .hero .lead { color: rgba(255, 255, 255, 0.9); max-width: 600px; margin: 0 auto var(--space-8); } .hero-light { background: var(--color-gray-100); color: var(--color-gray-700); } .hero-light h1 { color: var(--color-gray-800); } .hero-light .lead { color: var(--color-gray-600); } /* -------------------------------------------------------------------------- Buttons -------------------------------------------------------------------------- */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: var(--space-3) var(--space-6); font-family: var(--font-secondary); font-size: var(--font-size-sm); font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; border-radius: var(--radius-md); border: 2px solid transparent; cursor: pointer; transition: all var(--transition-fast); } .btn-primary { background-color: var(--color-primary); color: var(--color-white); } .btn-primary:hover { background-color: var(--color-primary-dark); color: var(--color-white); } .btn-secondary { background-color: var(--color-secondary); color: var(--color-white); } .btn-secondary:hover { background-color: var(--color-secondary-dark); color: var(--color-white); } .btn-outline { background-color: transparent; border-color: var(--color-primary); color: var(--color-primary); } .btn-outline:hover { background-color: var(--color-primary); color: var(--color-white); } .btn-white { background-color: var(--color-white); color: var(--color-primary); } .btn-white:hover { background-color: var(--color-cream); color: var(--color-primary-dark); } .btn-lg { padding: var(--space-4) var(--space-8); font-size: var(--font-size-base); } /* -------------------------------------------------------------------------- Cards -------------------------------------------------------------------------- */ .card { background-color: var(--color-white); border-radius: var(--radius-lg); box-shadow: var(--shadow-md); overflow: hidden; transition: transform var(--transition-normal), box-shadow var(--transition-normal); } .card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); } .card-body { padding: var(--space-6); } .card-title { font-size: var(--font-size-xl); margin-bottom: var(--space-2); } .card-subtitle { font-size: var(--font-size-sm); color: var(--color-gray-500); margin-bottom: var(--space-4); } .card-text { color: var(--color-gray-600); } .card-featured { border: 2px solid var(--color-primary); position: relative; } .card-featured::before { content: 'Featured'; position: absolute; top: var(--space-4); right: var(--space-4); background-color: var(--color-primary); color: var(--color-white); font-size: var(--font-size-xs); font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; padding: var(--space-1) var(--space-3); border-radius: var(--radius-full); } /* -------------------------------------------------------------------------- Business Listing Card (Directory) -------------------------------------------------------------------------- */ .listing-card { background-color: var(--color-white); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); padding: var(--space-6); display: grid; gap: var(--space-4); transition: box-shadow var(--transition-normal); } .listing-card:hover { box-shadow: var(--shadow-md); } .listing-rank { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; background-color: var(--color-primary); color: var(--color-white); font-weight: 700; font-size: var(--font-size-sm); border-radius: var(--radius-full); } .listing-header { display: flex; align-items: flex-start; gap: var(--space-4); } .listing-info { flex: 1; } .listing-name { font-size: var(--font-size-xl); font-family: var(--font-primary); margin-bottom: var(--space-1); } .listing-name a { color: var(--color-gray-800); } .listing-name a:hover { color: var(--color-primary); } .listing-tagline { font-size: var(--font-size-sm); color: var(--color-gray-500); font-style: italic; } .listing-rating { display: flex; align-items: center; gap: var(--space-2); font-size: var(--font-size-sm); } .listing-stars { color: var(--color-secondary); } .listing-reviews { color: var(--color-gray-500); } .listing-details { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-3); font-size: var(--font-size-sm); color: var(--color-gray-600); } .listing-detail { display: flex; align-items: flex-start; gap: var(--space-2); } .listing-detail-icon { color: var(--color-primary); flex-shrink: 0; width: 16px; } .listing-description { color: var(--color-gray-600); line-height: var(--line-height-relaxed); } .listing-services { display: flex; flex-wrap: wrap; gap: var(--space-2); } .listing-service-tag { background-color: var(--color-gray-100); color: var(--color-gray-600); font-size: var(--font-size-xs); padding: var(--space-1) var(--space-3); border-radius: var(--radius-full); } .listing-cta { display: flex; gap: var(--space-3); padding-top: var(--space-4); border-top: 1px solid var(--color-gray-200); } .listing-featured { border: 2px solid var(--color-primary); background: linear-gradient(135deg, var(--color-white) 0%, var(--color-gray-100) 100%); } .listing-featured .listing-rank { width: 40px; height: 40px; font-size: var(--font-size-lg); } /* -------------------------------------------------------------------------- Section Headers -------------------------------------------------------------------------- */ .section-header { text-align: center; margin-bottom: var(--space-12); } .section-header h2 { margin-bottom: var(--space-4); } .section-header p { max-width: 600px; margin: 0 auto; color: var(--color-gray-600); } .section-header-left { text-align: left; } .section-header-left p { margin: 0; } /* -------------------------------------------------------------------------- Article Content -------------------------------------------------------------------------- */ .article { max-width: var(--container-md); margin: 0 auto; } .article h2 { margin-top: var(--space-12); padding-top: var(--space-8); border-top: 1px solid var(--color-gray-200); } .article h2:first-child { margin-top: 0; padding-top: 0; border-top: none; } .article h3 { margin-top: var(--space-8); } .article ul, .article ol { margin-bottom: var(--space-4); padding-left: var(--space-6); } .article li { margin-bottom: var(--space-2); } .article blockquote { border-left: 4px solid var(--color-primary); padding-left: var(--space-6); margin: var(--space-8) 0; font-style: italic; color: var(--color-gray-600); } /* -------------------------------------------------------------------------- Callout Boxes -------------------------------------------------------------------------- */ .callout { padding: var(--space-6); border-radius: var(--radius-lg); margin: var(--space-8) 0; } .callout-tip { background-color: rgba(91, 138, 114, 0.1); border-left: 4px solid var(--color-primary); } .callout-info { background-color: rgba(91, 138, 114, 0.05); border-left: 4px solid var(--color-primary-light); } .callout-warning { background-color: rgba(212, 165, 116, 0.1); border-left: 4px solid var(--color-secondary); } .callout-title { font-weight: 600; margin-bottom: var(--space-2); display: flex; align-items: center; gap: var(--space-2); } /* -------------------------------------------------------------------------- Breadcrumbs -------------------------------------------------------------------------- */ .breadcrumbs { font-size: var(--font-size-sm); color: var(--color-gray-500); margin-bottom: var(--space-6); } .breadcrumbs a { color: var(--color-gray-500); } .breadcrumbs a:hover { color: var(--color-primary); } .breadcrumbs span { margin: 0 var(--space-2); } /* -------------------------------------------------------------------------- Footer -------------------------------------------------------------------------- */ .footer { background-color: var(--color-gray-800); color: var(--color-gray-300); padding: var(--space-16) 0 var(--space-8); } .footer-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-8); margin-bottom: var(--space-12); } .footer-col h4 { color: var(--color-white); font-family: var(--font-secondary); font-size: var(--font-size-sm); font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--space-4); } .footer-col ul { list-style: none; } .footer-col li { margin-bottom: var(--space-2); } .footer-col a { color: var(--color-gray-400); font-size: var(--font-size-sm); } .footer-col a:hover { color: var(--color-white); } .footer-bottom { border-top: 1px solid var(--color-gray-700); padding-top: var(--space-8); text-align: center; font-size: var(--font-size-sm); color: var(--color-gray-500); } /* -------------------------------------------------------------------------- Utilities -------------------------------------------------------------------------- */ .text-center { text-align: center; } .text-left { text-align: left; } .text-right { text-align: right; } .text-primary { color: var(--color-primary); } .text-secondary { color: var(--color-secondary); } .text-muted { color: var(--color-gray-500); } .mt-0 { margin-top: 0; } .mt-4 { margin-top: var(--space-4); } .mt-8 { margin-top: var(--space-8); } .mt-12 { margin-top: var(--space-12); } .mb-0 { margin-bottom: 0; } .mb-4 { margin-bottom: var(--space-4); } .mb-8 { margin-bottom: var(--space-8); } .mb-12 { margin-bottom: var(--space-12); } .py-8 { padding-top: var(--space-8); padding-bottom: var(--space-8); } .py-12 { padding-top: var(--space-12); padding-bottom: var(--space-12); } .py-16 { padding-top: var(--space-16); padding-bottom: var(--space-16); } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } /* -------------------------------------------------------------------------- Responsive Typography -------------------------------------------------------------------------- */ @media (max-width: 768px) { h1 { font-size: var(--font-size-3xl); } h2 { font-size: var(--font-size-2xl); } h3 { font-size: var(--font-size-xl); } section { padding: var(--space-12) 0; } .hero { padding: var(--space-12) 0; } } /* -------------------------------------------------------------------------- Images -------------------------------------------------------------------------- */ .article-image { margin: var(--space-8) 0; border-radius: var(--border-radius); overflow: hidden; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); } .article-image img { width: 100%; height: auto; display: block; } .hero-image { margin: var(--space-6) 0; border-radius: var(--border-radius); overflow: hidden; max-height: 400px; box-shadow: 0 6px 16px rgba(0, 0, 0, 0.10); } .hero-image img { width: 100%; height: 100%; object-fit: cover; object-position: center; } @media (max-width: 768px) { .hero-image { max-height: 250px; } .article-image { margin: var(--space-6) 0; } } .page-image { margin: 0 0 var(--space-8); border-radius: var(--border-radius); overflow: hidden; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); } .page-image img { width: 100%; height: auto; display: block; max-height: 420px; object-fit: cover; object-position: center; } .page-image figcaption { font-size: var(--font-size-xs); color: var(--color-gray-400); padding: var(--space-2) var(--space-3); text-align: right; } @media (max-width: 768px) { .page-image img { max-height: 260px; } } /* Contact Form */ .contact-form { max-width: 600px; margin: 0 auto; } .form-group { margin-bottom: var(--space-6); } .form-label { display: block; font-weight: 600; margin-bottom: var(--space-2); color: var(--color-gray-700); } .form-input, .form-textarea { width: 100%; padding: var(--space-3) var(--space-4); font-family: var(--font-secondary); font-size: var(--font-size-base); border: 1px solid var(--color-gray-300); border-radius: var(--radius-md); background-color: var(--color-white); transition: border-color var(--transition-fast), box-shadow var(--transition-fast); } .form-input:focus, .form-textarea:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(91, 138, 114, 0.1); } .form-textarea { min-height: 150px; resize: vertical; } .form-hint { font-size: var(--font-size-sm); color: var(--color-gray-500); margin-top: var(--space-1); } .contact-info { background-color: var(--color-gray-100); padding: var(--space-6); border-radius: var(--radius-lg); margin-top: var(--space-12); } .contact-info h3 { margin-bottom: var(--space-4); } .contact-info ul { list-style: none; } .contact-info li { margin-bottom: var(--space-3); padding-left: var(--space-6); position: relative; } .contact-info li::before { content: "\2022"; color: var(--color-primary); font-weight: bold; position: absolute; left: 0; } /* -------------------------------------------------------------------------- Print Styles -------------------------------------------------------------------------- */ @media print { .header, .footer, .nav, .btn { display: none; } body { font-size: 12pt; color: #000; background: #fff; } a { color: #000; text-decoration: underline; } }