/* ============================================ atmosphere.community — Design System Default theme: "horizon" - warm, breezy, people-forward Layering: tokens.base — base tokens, themes redefine here tokens.semantic — semantic mappings (theme-agnostic) tokens.components — scoped component tokens global — reset, base elements, components ============================================ */ @import "./tokens.base.css"; @import "./tokens.semantic.css"; @import "./tokens.components.css"; /* --- Structural tokens (NOT themed) --- */ :root { /* --- Spacing (4pt base) --- */ --space-xs: 4px; --space-sm: 8px; --space-md: 12px; --space-base: 16px; --space-lg: 24px; --space-xl: 32px; --space-2xl: 48px; --space-3xl: 64px; --space-4xl: 96px; /* --- Typography --- */ --font-display: "Bitter", Georgia, serif; --font-body: "Source Sans 3", "Source Sans Pro", system-ui, sans-serif; --text-xs: clamp(0.65rem, 0.6rem + 0.2vw, 0.75rem); --text-sm: clamp(0.78rem, 0.74rem + 0.2vw, 0.875rem); --text-base: clamp(0.875rem, 0.84rem + 0.2vw, 1rem); --text-lg: clamp(1.1rem, 1rem + 0.3vw, 1.25rem); --text-xl: clamp(1.4rem, 1.2rem + 0.6vw, 1.75rem); --text-2xl: clamp(1.75rem, 1.4rem + 1vw, 2.25rem); --leading-tight: 1.2; --leading-normal: 1.55; --leading-relaxed: 1.7; /* --- Layout --- */ --content-width: 960px; --content-narrow: 720px; --radius-sm: 6px; --radius-md: 10px; --radius-lg: 16px; --radius-pill: 999px; /* --- Stacking --- */ --z-content: 1; --z-feedback: 5; --z-header: 10; --z-popover: 20; --z-popover-raised: 30; --z-top: 100; } /* --- Reset & Base --- */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-behavior: smooth; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } body { font-family: var(--font-body); font-size: var(--text-base); line-height: var(--leading-normal); color: var(--foreground); background: var(--background); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; min-height: 100dvh; } img, svg { display: block; max-width: 100%; height: auto; } a { color: var(--link); text-decoration: none; transition: color 0.15s ease; } a:hover { color: var(--link-hover); } a:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; border-radius: 2px; } a[target="_blank"]:not(.btn):not(.hero-secondary):not(.post-card__link):not(.community-pill--link):not(.highlight-card):not(.event-card__details):not([data-external-icon="hidden"])::after { content: ""; display: inline-block; width: 0.95em; height: 0.95em; margin-inline-start: 0.25em; vertical-align: -0.125em; background-color: currentColor; mask: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M19 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h6v2H5v12h12v-6zM13 3v2h4.586l-7.793 7.793l1.414 1.414L19 6.414V11h2V3z'/%3E%3C/svg%3E") center / contain no-repeat; -webkit-mask: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='black' d='M19 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h6v2H5v12h12v-6zM13 3v2h4.586l-7.793 7.793l1.414 1.414L19 6.414V11h2V3z'/%3E%3C/svg%3E") center / contain no-repeat; } h1, h2, h3, h4 { font-family: var(--font-display); line-height: var(--leading-tight); color: var(--foreground); text-wrap: balance; } h1 { font-size: var(--text-2xl); font-weight: 700; } h2 { font-size: var(--text-xl); font-weight: 600; } h3 { font-size: var(--text-lg); font-weight: 600; } h4 { font-size: var(--text-base); font-weight: 600; } p + p { margin-top: var(--space-base); } /* --- Utility Classes --- */ .container { width: 100%; max-width: var(--content-width); margin-inline: auto; padding-inline: var(--space-lg); } @media (min-width: 640px) { .container { padding-inline: var(--space-2xl); } } .container--narrow { max-width: var(--content-narrow); } .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } /* --- Card base --- */ .card { background: var(--card); color: var(--card-foreground); border: 1px solid var(--card-border); border-radius: var(--radius-md); padding: var(--space-base); } /* The HTML `hidden` attribute should always win over author display rules. */ [hidden] { display: none !important; } /* --- Badge / Pill --- */ .badge { display: inline-flex; align-items: center; padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-pill); font-size: var(--text-xs); font-weight: 600; line-height: 1; white-space: nowrap; } .badge--tag { background: var(--badge-tag-bg); color: var(--badge-tag-fg); } .badge--location { background: var(--badge-location-bg); color: var(--badge-location-fg); } .badge--online { background: var(--badge-online-bg); color: var(--badge-online-fg); } /* --- Button --- */ .btn { display: inline-flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) var(--space-base); border: none; border-radius: var(--radius-sm); font-family: var(--font-body); font-size: var(--text-sm); font-weight: 600; line-height: 1; cursor: pointer; transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease; text-decoration: none; } .btn--primary { background: var(--btn-primary-bg); color: var(--btn-primary-fg); } .btn--primary:hover { background: var(--btn-primary-bg-hover); color: var(--btn-primary-fg); } .btn--ghost { background: transparent; color: var(--primary); border: 1px solid var(--btn-ghost-border); } .btn--ghost:hover { background: var(--btn-ghost-bg-hover); border-color: var(--btn-ghost-border-hover); } .btn--small { padding: var(--space-xs) var(--space-sm); font-size: var(--text-xs); } /* --- Section spacing --- */ .section { padding-block: var(--space-2xl) var(--space-3xl); } @media (min-width: 640px) { .section { padding-block: var(--space-3xl) var(--space-4xl); } } .section__header { margin-bottom: var(--space-xl); } .section__title { font-size: var(--text-xl); } .section__subtitle { color: var(--foreground-secondary); font-size: var(--text-sm); margin-top: var(--space-xs); } .section__more { font-size: var(--text-sm); font-weight: 500; } /* --- Grid --- */ .grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--space-base); } /* --- Skip link --- */ .skip-link { position: absolute; top: -100%; left: var(--space-base); padding: var(--space-sm) var(--space-base); background: var(--primary); color: var(--primary-foreground); border-radius: var(--radius-sm); font-weight: 600; z-index: var(--z-top); } .skip-link:focus { top: var(--space-sm); }