@use "sass:color"; @use 'tokens'; @use 'mixins'; @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap'); // Reset and Base Styles * { margin: 0; padding: 0; box-sizing: border-box; } html { font-size: 16px; scroll-behavior: smooth; } body { @include mixins.body-text; background: tokens.$bg-primary; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } // Typography h1 { @include mixins.heading-primary; font-size: tokens.$font-size-4xl; margin-bottom: tokens.$spacing-lg; } h2 { @include mixins.heading-primary; font-size: tokens.$font-size-3xl; margin-bottom: tokens.$spacing-md; } h3 { @include mixins.heading-secondary; font-size: tokens.$font-size-2xl; margin-bottom: tokens.$spacing-md; } h4 { @include mixins.heading-secondary; font-size: tokens.$font-size-xl; margin-bottom: tokens.$spacing-sm; } p { margin-bottom: tokens.$spacing-md; } a { color: tokens.$primary-color; text-decoration: none; transition: color tokens.$transition-fast; &:hover { color: color.adjust(tokens.$primary-color, $lightness: -15%); } } // Pages main > section { @include mixins.section-centered; padding: tokens.$spacing-3xl 0; h1, h2 { text-align: center; margin-bottom: tokens.$spacing-md; } } section.hero { @include mixins.section-full-width; display: grid; align-items: center; background: linear-gradient(135deg, tokens.$secondary-color, color.adjust(tokens.$secondary-color, $lightness: -20%)); color: tokens.$text-inverse; padding: tokens.$spacing-3xl 0 4rem; position: relative; overflow: hidden; min-height: 50vh; &::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.05'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E") repeat; } & > * { position: relative; z-index: 1; text-align: center; width: 100%; } & > h1 { font-size: 4rem; font-weight: tokens.$font-weight-bold; line-height: 1.1; margin-bottom: tokens.$spacing-xl; color: tokens.$text-inverse; @media (max-width: 768px) { font-size: 2.5rem; } } & > p { font-size: tokens.$font-size-xl; line-height: tokens.$line-height-relaxed; margin-bottom: tokens.$spacing-2xl; max-width: 700px; margin-left: auto; margin-right: auto; opacity: 0.95; @media (max-width: 768px) { font-size: tokens.$font-size-lg; } } > ul { @include mixins.menu-base; gap: tokens.$spacing-lg; a { font-size: tokens.$font-size-lg; font-weight: tokens.$font-weight-semibold; border-radius: tokens.$border-radius-lg; box-shadow: tokens.$shadow-lg; padding: tokens.$spacing-md tokens.$spacing-2xl; &.primary { @include mixins.button-accent; } &:not(.primary) { @include mixins.button-secondary($border-color: tokens.$text-inverse, $hover-color: tokens.$secondary-color); } } } } section.missions { @include mixins.section-centered; > ul { @include mixins.grid-responsive(350px); & { list-style: none; margin-top: tokens.$spacing-xl; } > li article { @include mixins.card-interactive; padding: tokens.$spacing-xl; height: 100%; h3 { @include mixins.flex-between; @include mixins.heading-secondary; margin-bottom: tokens.$spacing-md; font-size: tokens.$font-size-xl; margin-bottom: tokens.$spacing-xs; } > p { color: tokens.$text-secondary; margin-top: tokens.$spacing-lg; margin-bottom: tokens.$spacing-xl; } .stats { display: flex; gap: tokens.$spacing-lg; align-self: self-end; .stat { text-align: center; span:not(.label) { @include mixins.heading-secondary; display: block; font-size: tokens.$font-size-lg; color: tokens.$primary-color; } .label { @include mixins.text-small; } } } } } } section.listing { @include mixins.section-centered; padding: tokens.$spacing-2xl 0; h1 { text-align: center; margin-bottom: tokens.$spacing-md; } > p { text-align: center; color: tokens.$text-secondary; margin-bottom: tokens.$spacing-2xl; } } body > main > section.listing > ul { @include mixins.grid-responsive(350px); gap: tokens.$spacing-xl; list-style: none; } // Missions listing body > main > section.missions.listing > ul { display: flex; flex-direction: column; gap: tokens.$spacing-xl; list-style: none; > li { .mission { @include mixins.card-interactive; padding: tokens.$spacing-xl; display: grid; grid-template-columns: 80px 1fr; grid-template-rows: auto auto auto 1fr auto; grid-template-areas: "logo title" "logo description" "logo objective-title" "logo objective" "logo stats"; gap: tokens.$spacing-md tokens.$spacing-lg; align-items: start; h3 { @include mixins.heading-secondary; font-size: tokens.$font-size-2xl; margin-bottom: 0; grid-area: title; } img { width: 80px; height: 80px; border-radius: tokens.$border-radius-lg; object-fit: cover; border: 2px solid tokens.$border-light; grid-area: logo; } p:first-of-type { color: tokens.$text-secondary; line-height: tokens.$line-height-relaxed; margin-bottom: 0; grid-area: description; } h4 { @include mixins.heading-secondary; font-size: tokens.$font-size-lg; margin-bottom: 0; grid-area: objective-title; } p:last-of-type { color: tokens.$text-secondary; line-height: tokens.$line-height-relaxed; margin-bottom: 0; grid-area: objective; } > ul { display: flex; gap: tokens.$spacing-lg; list-style: none; margin-top: tokens.$spacing-md; grid-area: stats; li { text-align: center; span:first-child { @include mixins.heading-secondary; display: block; font-size: tokens.$font-size-lg; color: tokens.$primary-color; } span:last-child { @include mixins.text-small; color: tokens.$text-secondary; } } } } } } ul li .card { @include mixins.card-interactive; padding: tokens.$spacing-xl; height: 100%; display: flex; flex-direction: column; header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: tokens.$spacing-md; h4 { @include mixins.heading-secondary; font-size: tokens.$font-size-lg; margin-bottom: tokens.$spacing-xs; color: tokens.$text-primary; } } main { color: tokens.$text-secondary; line-height: tokens.$line-height-relaxed; margin-bottom: tokens.$spacing-lg; flex-grow: 1; } footer { margin-top: auto; } } // Project Card Styles div.project.card { span.status { @include mixins.text-small; padding: tokens.$spacing-xs tokens.$spacing-sm; border-radius: tokens.$border-radius-sm; font-weight: tokens.$font-weight-medium; text-transform: uppercase; letter-spacing: 0.5px; &.proposed { background: color.adjust(tokens.$primary-color, $alpha: -0.9); color: tokens.$primary-color; } &.active { background: color.adjust(#10b981, $alpha: -0.9); color: #10b981; } &.completed { background: color.adjust(#3b82f6, $alpha: -0.9); color: #3b82f6; } &.inactive { background: color.adjust(#ef4444, $alpha: -0.9); color: #ef4444; } } footer a { display: block; width: 100%; text-align: right; font-weight: tokens.$font-weight-semibold; &:disabled { opacity: 0.5; cursor: not-allowed; background: tokens.$text-secondary; color: tokens.$text-inverse; &:hover { background: tokens.$text-secondary; } } } } section.project.item-view, section.mission.item-view { @include mixins.section-full-width; display: grid; grid-template-columns: 1fr; gap: tokens.$spacing-2xl; padding: tokens.$spacing-2xl 0; @media (min-width: 768px) { grid-template-columns: 300px 1fr; grid-template-areas: "header header" "summary main"; } header { grid-area: header; padding: tokens.$spacing-2xl; margin-bottom: tokens.$spacing-2xl; display: flex; align-items: center; gap: tokens.$spacing-lg; img { width: 80px; height: 80px; border-radius: tokens.$border-radius-lg; object-fit: cover; border: 2px solid tokens.$border-light; } h1 { @include mixins.heading-primary; font-size: tokens.$font-size-3xl; margin-bottom: tokens.$spacing-sm; flex-grow: 1; } span { @include mixins.text-small; padding: tokens.$spacing-xs tokens.$spacing-sm; border-radius: tokens.$border-radius-sm; font-weight: tokens.$font-weight-medium; text-transform: uppercase; letter-spacing: 0.5px; &.proposed { background: color.adjust(tokens.$primary-color, $alpha: -0.9); color: tokens.$primary-color; } &.active { background: color.adjust(#10b981, $alpha: -0.9); color: #10b981; } &.completed { background: color.adjust(#3b82f6, $alpha: -0.9); color: #3b82f6; } &.canceled { background: color.adjust(#ef4444, $alpha: -0.9); color: #ef4444; } } } aside { grid-area: summary; @include mixins.card-interactive; padding: tokens.$spacing-xl; @media (min-width: 768px) { position: sticky; top: tokens.$spacing-xl; } h3 { @include mixins.heading-secondary; margin-bottom: tokens.$spacing-lg; color: tokens.$text-primary; } > div { margin-bottom: tokens.$spacing-lg; strong { @include mixins.text-small; font-weight: tokens.$font-weight-semibold; color: tokens.$text-primary; display: block; margin-bottom: tokens.$spacing-xs; } a { color: tokens.$primary-color; font-weight: tokens.$font-weight-medium; &:hover { text-decoration: underline; } } ul { list-style: none; margin-top: tokens.$spacing-xs; li { margin-bottom: tokens.$spacing-xs; a { @include mixins.text-small; color: tokens.$text-secondary; &:hover { color: tokens.$primary-color; } } } } > div { margin-top: tokens.$spacing-sm; display: flex; justify-content: space-between; @include mixins.text-small; color: tokens.$text-secondary; span { font-weight: tokens.$font-weight-medium; } } } } main { grid-area: main; section { margin-bottom: tokens.$spacing-2xl; h2 { @include mixins.heading-secondary; font-size: tokens.$font-size-2xl; margin-bottom: tokens.$spacing-lg; } p { @include mixins.body-text; line-height: tokens.$line-height-relaxed; color: tokens.$text-secondary; } } section:last-child { margin-top: tokens.$spacing-2xl; padding-top: tokens.$spacing-xl; border-top: 1px solid tokens.$border-light; } } } section.cta { @include mixins.section-full-width; $base-background-color: #ff6b35; background: linear-gradient(135deg, $base-background-color, rgb(231.5, 61.8861386139, 0)); color: #ffffff; text-align: center; h2 { color: #fff; margin-bottom: 1rem; } ul { @include mixins.menu-base; a { @include mixins.button-primary($text-color: $base-background-color); } } } body > header { backdrop-filter: blur(10px); border-bottom: 1px solid tokens.$border-light; position: sticky; top: 0; z-index: 100; nav { @include mixins.container; @include mixins.flex-between; padding-top: tokens.$spacing-md; padding-bottom: tokens.$spacing-md; background: rgba(tokens.$bg-primary, 0.95); .logo { @include mixins.heading-primary; font-size: tokens.$font-size-xl; color: tokens.$primary-color; } ul { display: flex; gap: tokens.$spacing-lg; list-style: none; a { @include mixins.body-text; font-weight: tokens.$font-weight-medium; color: tokens.$text-primary; transition: color tokens.$transition-fast; &:hover, &.active { color: tokens.$primary-color; } } } } } // Authentication Forms form[name="signup"], form[name="login"], form[name="set-password"] { margin: 0 auto tokens.$spacing-lg; padding: tokens.$spacing-2xl; label { display: block; font-weight: tokens.$font-weight-medium; color: tokens.$text-primary; margin-bottom: tokens.$spacing-xs; } input { @include mixins.input-base; margin-bottom: tokens.$spacing-lg; } ul.errorlist { list-style: none; margin-top: tokens.$spacing-xs; margin-bottom: tokens.$spacing-lg; color: #ef4444; font-size: tokens.$font-size-sm; } p { margin-bottom: tokens.$spacing-lg; label { margin-bottom: tokens.$spacing-xs; } input { margin-bottom: 0; } ul.errorlist { margin-top: tokens.$spacing-xs; margin-bottom: 0; } } button[type="submit"] { @include mixins.button-primary($text-color: tokens.$text-inverse, $background-color: tokens.$primary-color); width: 100%; padding: tokens.$spacing-md; font-size: tokens.$font-size-base; } } // Center auth pages content section:has(form[name="signup"]), section:has(form[name="login"]), section:has(form[name="set-password"]) { max-width: 600px; margin: 0 auto; h1 { text-align: center; } > p { text-align: center; color: tokens.$text-secondary; &:first-of-type { margin-bottom: tokens.$spacing-2xl; } &:last-of-type { font-size: tokens.$font-size-sm; a { font-weight: tokens.$font-weight-semibold; } } } } // Message pages styling (inherits section-centered from main > section) main > section { p { line-height: tokens.$line-height-relaxed; &:last-child { margin-top: tokens.$spacing-xl; } } } // Button element styles button { @include mixins.button-base; background: linear-gradient(135deg, tokens.$primary-color, color.adjust(tokens.$primary-color, $lightness: -10%)); color: tokens.$text-inverse; &:hover:not(:disabled) { background: linear-gradient(135deg, color.adjust(tokens.$primary-color, $lightness: -10%), color.adjust(tokens.$primary-color, $lightness: -20%)); } } body > footer { background: tokens.$bg-dark; color: tokens.$text-inverse; padding: tokens.$spacing-3xl 0 tokens.$spacing-lg; > main { @include mixins.container; @include mixins.grid-responsive(250px, tokens.$spacing-lg); grid-area: resources; margin-bottom: tokens.$spacing-xl; h4 { color: tokens.$text-inverse; margin-bottom: tokens.$spacing-md; font-size: tokens.$font-size-lg; font-weight: tokens.$font-weight-semibold; } p { color: rgba(tokens.$text-inverse, 0.8); line-height: tokens.$line-height-relaxed; margin-bottom: 0; } ul { list-style: none; li { margin-bottom: tokens.$spacing-sm; a { color: rgba(tokens.$text-inverse, 0.8); transition: color tokens.$transition-fast; &:hover { color: tokens.$text-inverse; } } } } } > section:last-child { @include mixins.container; @include mixins.flex-between; grid-area: footer; padding-top: tokens.$spacing-lg; border-top: 1px solid rgba(tokens.$text-inverse, 0.2); p.copyright { @include mixins.text-small; color: rgba(tokens.$text-inverse, 0.6); margin-bottom: 0; } ul.social-media-links { display: flex; gap: tokens.$spacing-lg; a { color: rgba(tokens.$text-inverse, 0.8); font-weight: tokens.$font-weight-medium; transition: color tokens.$transition-fast; &:hover { color: tokens.$accent-color; } } } } }