@use "@/css/material" as *; @use "home-shared" as shared; // Shared variables (home-specific) $gradient-conic: conic-gradient( from 0deg, rgba(147, 51, 234, 0.5) 0%, rgba(99, 102, 241, 0.6) 12.5%, rgba(59, 130, 246, 0.55) 25%, rgba(168, 85, 247, 0.5) 37.5%, rgba(217, 70, 239, 0.6) 50%, rgba(236, 72, 153, 0.55) 62.5%, rgba(192, 132, 252, 0.5) 75%, rgba(126, 34, 206, 0.6) 87.5%, rgba(147, 51, 234, 0.5) 100% ); $radius-card: 20px; $radius-pill: 25px; // Download table variables $download-cell-padding: 14px 20px; $download-cell-gap: 12px; $download-icon-size: 24px; $download-col1-w: 35%; $download-col2-w: 30%; $download-col3-w: 35%; $download-row-bg-hover: rgba($color-dark-surface-container-high, 0.6); $download-header-bg: rgba($color-dark-surface-container-high, 0.4); $download-text-color: $color-dark-on-surface-variant; // Mixins @mixin section-heading { font-size: 40px; font-weight: 700; margin-bottom: 24px; @include shared.gradient-text; } @mixin section-content { text-align: center; max-width: 600px; margin: 0 auto; p { font-size: 20px; line-height: 1.6; margin-bottom: 40px; opacity: 0.9; } } @mixin container { max-width: 960px; margin: 0 auto; padding: 0 32px; } @mixin download-cell-inner($justify) { display: flex; justify-content: $justify; align-items: center; width: 100%; min-width: 0; } @mixin masked-icon($url-var) { display: inline-block; width: $download-icon-size; height: $download-icon-size; flex-shrink: 0; background-color: $download-text-color; mask-image: var(#{$url-var}); -webkit-mask-image: var(#{$url-var}); mask-size: contain; mask-repeat: no-repeat; mask-position: center; -webkit-mask-size: contain; -webkit-mask-repeat: no-repeat; -webkit-mask-position: center; } .homepage { min-height: 100vh; display: flex; flex-direction: column; color: $color-dark-on-background; font-family: 'Montserrat', sans-serif; position: relative; background-color: $color-dark-surface; -webkit-tap-highlight-color: transparent; -webkit-user-drag: none; img { -webkit-user-drag: none; user-select: none; } main { flex: 1; .title { padding: 60px 0; display: flex; align-items: center; margin-top: 0; flex-direction: column; .titleLogoWrapper { position: relative; width: 100%; overflow-x: clip; display: flex; justify-content: center; &::before { $size: 1200px; content: ''; background: $gradient-conic; position: absolute; width: $size; height: $size; bottom: 0; opacity: 0.3; left: calc(50% - ($size / 2)); border-radius: 50%; filter: blur(80px); } } .titleLogo { width: 120px; height: 120px; background-image: url('@/images/logo_square.svg'); background-size: cover; background-position: center; background-repeat: no-repeat; border-radius: 30px; position: relative; z-index: 1; } .titleContent { font-size: 30pt; font-weight: 700; margin-top: 10px; padding: 0 80px; @include shared.gradient-text; } .titleDesc { font-size: 16pt; opacity: 0.8; margin-top: 10px; text-align: center; padding: 0 80px; } .titleButtons { display: flex; gap: 10px; margin-top: 20px; padding: 0 80px; } } .features { display: flex; flex-direction: column; gap: 50px; overflow-x: clip; .featureContainer { display: flex; flex-direction: row; gap: 20px; padding: 0 16px; align-items: center; margin-left: auto; margin-right: auto; max-width: 700px; .featureText { display: flex; flex-direction: column; gap: 10px; flex-grow: 1; flex-shrink: 1; .featureTitle { font-size: 30pt; font-weight: 700; line-height: normal; @include shared.gradient-text; } .featureDesc { text-align: left; font-size: 15pt; } } .featureScreenshotOuter { position: relative; .featureScreenshotGlow { $size: 400px; @keyframes rotateGradient { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } background: $gradient-conic; position: absolute; width: $size; height: $size; top: calc(50% - ($size / 2)); opacity: 0.6; left: calc(50% - ($size / 2)); border-radius: 50%; filter: blur(80px); z-index: 0; will-change: transform; animation: rotateGradient 8s linear infinite; } .featureScreenshot { max-width: 300px; z-index: 50; position: relative; } } } } .download { .container { @include container; } .downloadContent { @include section-content; h3 { @include section-heading; } .downloadTable { display: table; user-select: none; width: 100%; max-width: 720px; margin: 0 auto; border-radius: 16px; border-collapse: separate; border-spacing: 0 6px; background: transparent; border: none; table-layout: auto; th:first-child, td:first-child { width: 1%; white-space: nowrap; } th:nth-child(2), td:nth-child(2) { width: 1%; white-space: nowrap; } th:last-child, td:last-child { width: 100%; } thead { display: table-header-group; tr th { padding: $download-cell-padding; display: table-cell; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: $download-text-color; background: $download-header-bg; vertical-align: middle; transition: background-color 0.2s ease; text-align: left; &:first-child { border-radius: 12px 0 0 12px; } &:last-child { border-radius: 0 12px 12px 0; } } } tbody { display: table-row-group; tr { display: table-row; background: $color-dark-surface-container-low; td { padding: $download-cell-padding; display: table-cell; text-align: center; vertical-align: middle; transition: background-color 0.2s ease; background: transparent; &:first-child { text-align: left; border-radius: $radius-pill 0 0 $radius-pill; } &:last-child { text-align: right; border-radius: 0 $radius-pill $radius-pill 0; } } &:hover td { background: $download-row-bg-hover; } } } .downloadTableOs { text-align: left; .downloadTableOsContent { @include download-cell-inner(flex-start); gap: $download-cell-gap; min-height: 100%; height: 100%; } } .downloadTableIcon { font-size: $download-icon-size; width: $download-icon-size; height: $download-icon-size; color: $download-text-color; } .tableOsIcon { @include masked-icon("--table-os-icon-url"); } .downloadTableDesc { font-size: 14px; color: $download-text-color; .downloadTableDescInner { @include download-cell-inner(flex-start); } } .downloadTableAction { text-align: right; .downloadTableActionInner { @include download-cell-inner(flex-end); } } .downloadButton { display: block; } .downloadButtonIcon { display: none; } } } @media (max-width: 490px) { .downloadContent .downloadTable { .downloadButton { display: none; } .downloadButtonIcon { display: block; } } } @media (max-width: 405px) { .downloadContent .downloadTable { th:nth-child(2), td:nth-child(2) { display: none !important; } .downloadButton { display: block !important; } .downloadButtonIcon { display: none !important; } } } } .cta { padding-bottom: 128px; .container { @include container; } .ctaContent { @include section-content; h3 { @include section-heading; } .ctaActions { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; } } } } @media (max-width: 635px) { main { .title { .titleContent, .titleDesc, .titleButtons { padding: 0 16px; } } .features { padding: 0 16px; .featureContainer { flex-direction: column; align-items: center; padding: 0 16px; .featureText { order: 1; text-align: center; .featureDesc { text-align: center; } } .featureScreenshotOuter { order: 2; } } } .download .container, .cta .container { padding: 0 16px; } } } } .menuCustomIcon { @include masked-icon("--menu-custom-icon-url"); } // Keyframes for animations @keyframes neonGlow { 0% { text-shadow: 0 0 20px rgba($color-dark-primary, 0.5), 0 0 40px rgba($color-dark-primary, 0.3); } 100% { text-shadow: 0 0 30px rgba($color-dark-primary, 0.8), 0 0 60px rgba($color-dark-primary, 0.5); } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }