:root { --bg: #f5f7fb; --surface: #ffffff; --ink: #162033; --muted: #647186; --line: #dce4ef; --teal: #0f766e; --teal-dark: #115e59; --blue: #2563eb; --coral: #e85d4f; --amber: #d99a28; --green: #16a34a; --shadow: 0 24px 70px rgba(22, 32, 51, 0.14); } * { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; min-height: 100vh; color: var(--ink); background: var(--bg); font-family: "Inter", Arial, sans-serif; overflow-x: hidden; } a { color: inherit; text-decoration: none; } h1, h2, h3, p { margin-top: 0; } .site-header { position: fixed; top: 0; left: 50%; z-index: 30; display: flex; align-items: center; justify-content: space-between; gap: 24px; width: min(1180px, calc(100% - 36px)); padding: 18px 0; transform: translateX(-50%); transition: top 0.2s ease, padding 0.2s ease, background 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease; } .brand { display: inline-flex; align-items: center; gap: 12px; min-width: 0; color: #ffffff; transition: color 0.2s ease; } .brand-mark { display: grid; width: 44px; height: 44px; place-items: center; flex: 0 0 auto; border: 1px solid rgba(255, 255, 255, 0.34); border-radius: 8px; background: rgba(255, 255, 255, 0.16); font-size: 0.86rem; font-weight: 900; backdrop-filter: blur(16px); transition: color 0.2s ease, background 0.2s ease, border-color 0.2s ease; } .brand strong, .brand small { display: block; } .brand strong { font-size: 0.98rem; line-height: 1.1; } .brand small { margin-top: 3px; color: rgba(255, 255, 255, 0.78); font-size: 0.76rem; transition: color 0.2s ease; } .nav-links { display: flex; align-items: center; gap: 6px; padding: 6px; border: 1px solid rgba(255, 255, 255, 0.28); border-radius: 8px; background: rgba(255, 255, 255, 0.14); backdrop-filter: blur(16px); transition: background 0.2s ease, border-color 0.2s ease; } .nav-links a { min-width: 0; padding: 9px 16px; border-radius: 6px; color: rgba(255, 255, 255, 0.86); font-size: 0.9rem; font-weight: 800; transition: color 0.2s ease, background 0.2s ease; } .nav-links a:hover { color: #ffffff; background: rgba(255, 255, 255, 0.14); } .site-header.is-scrolled { top: 14px; padding: 10px 12px; border: 1px solid rgba(220, 228, 239, 0.94); border-radius: 8px; background: rgba(255, 255, 255, 0.94); box-shadow: 0 16px 42px rgba(22, 32, 51, 0.12); backdrop-filter: blur(18px); } .site-header.is-scrolled .brand { color: var(--ink); } .site-header.is-scrolled .brand-mark { color: #ffffff; border-color: transparent; background: linear-gradient(145deg, var(--teal), var(--blue)); } .site-header.is-scrolled .brand small { color: var(--muted); } .site-header.is-scrolled .nav-links { border-color: var(--line); background: #f3f6fa; } .site-header.is-scrolled .nav-links a { color: #526175; } .site-header.is-scrolled .nav-links a:hover { color: var(--ink); background: #e7edf5; } main { overflow: hidden; } .hero-section { position: relative; display: flex; align-items: center; min-height: 88vh; padding: 112px max(18px, calc((100vw - 1180px) / 2)) 92px; color: #ffffff; } .hero-bg, .hero-overlay { position: absolute; inset: 0; } .hero-bg { background-image: url("assets/webgis-hero.png"); background-position: center; background-size: cover; } .hero-overlay { background: linear-gradient(90deg, rgba(8, 16, 32, 0.88) 0%, rgba(8, 16, 32, 0.68) 44%, rgba(8, 16, 32, 0.2) 100%), linear-gradient(180deg, rgba(8, 16, 32, 0.24), rgba(8, 16, 32, 0.54)); } .hero-content { position: relative; z-index: 2; width: min(760px, 100%); } .eyebrow { margin: 0 0 14px; color: #35d0ba; font-size: 0.76rem; font-weight: 900; letter-spacing: 0; text-transform: uppercase; } h1 { max-width: 820px; margin-bottom: 22px; font-size: clamp(2.75rem, 6vw, 5.7rem); line-height: 0.98; letter-spacing: 0; } .hero-lead { max-width: 680px; margin-bottom: 30px; color: rgba(255, 255, 255, 0.82); font-size: 1.08rem; line-height: 1.75; } .project-links { display: flex; flex-wrap: wrap; gap: 12px; } .btn { display: inline-flex; align-items: center; justify-content: center; gap: 10px; min-height: 46px; padding: 12px 18px; border: 1px solid transparent; border-radius: 8px; font-size: 0.93rem; font-weight: 900; transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease; } .btn:hover { transform: translateY(-2px); } .btn-primary { color: #ffffff; background: var(--teal); box-shadow: 0 16px 34px rgba(15, 118, 110, 0.28); } .btn-primary:hover { background: var(--teal-dark); } .btn-secondary { color: #ffffff; border-color: rgba(255, 255, 255, 0.34); background: rgba(255, 255, 255, 0.14); backdrop-filter: blur(12px); } .btn-secondary:hover { background: rgba(255, 255, 255, 0.22); } .btn-ghost { color: var(--teal-dark); border-color: rgba(15, 118, 110, 0.22); background: rgba(15, 118, 110, 0.08); } .btn-ghost:hover { box-shadow: 0 12px 24px rgba(22, 32, 51, 0.09); } .projects-section { width: min(1120px, calc(100% - 36px)); margin: 0 auto; padding: 132px 0 70px; scroll-margin-top: 0; } .section-heading { max-width: 620px; margin-bottom: 24px; } .section-heading .eyebrow { margin-bottom: 10px; color: var(--teal); } .section-heading h2 { margin-bottom: 12px; font-size: clamp(1.8rem, 3vw, 2.7rem); line-height: 1.08; letter-spacing: 0; } .section-heading p, .project-card p { color: var(--muted); line-height: 1.58; } .project-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; } .project-card { overflow: hidden; border: 1px solid rgba(220, 228, 239, 0.94); border-radius: 8px; background: var(--surface); box-shadow: var(--shadow); } .project-visual { height: 180px; padding: 16px; border-bottom: 1px solid var(--line); background: linear-gradient(135deg, rgba(15, 118, 110, 0.12), rgba(37, 99, 235, 0.06)), #edf4f7; } .project-two .project-visual { background: linear-gradient(135deg, rgba(232, 93, 79, 0.13), rgba(217, 154, 40, 0.11)), #f8f3ec; } .mini-map, .dashboard-mock { position: relative; width: 100%; height: 100%; overflow: hidden; border: 1px solid rgba(255, 255, 255, 0.72); border-radius: 8px; background: linear-gradient(90deg, rgba(255, 255, 255, 0.42) 1px, transparent 1px), linear-gradient(rgba(255, 255, 255, 0.42) 1px, transparent 1px), linear-gradient(135deg, #cfe9e5, #dfeaff 58%, #f4f7fb); background-size: 36px 36px, 36px 36px, auto; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.6); } .route { position: absolute; height: 8px; border-radius: 999px; background: rgba(37, 99, 235, 0.76); transform-origin: left center; } .route-a { top: 56px; left: 22px; width: 72%; transform: rotate(9deg); } .route-b { top: 145px; left: 18px; width: 86%; background: rgba(15, 118, 110, 0.78); transform: rotate(-11deg); } .route-c { right: 34px; bottom: 46px; width: 50%; background: rgba(232, 93, 79, 0.74); transform: rotate(19deg); } .pin, .help-pin { position: absolute; width: 24px; height: 24px; border: 4px solid #ffffff; border-radius: 50% 50% 50% 0; box-shadow: 0 10px 22px rgba(22, 32, 51, 0.22); transform: rotate(-45deg); } .pin::after, .help-pin::after { content: ""; position: absolute; inset: 5px; border-radius: 50%; background: #ffffff; } .pin-red { top: 70px; left: 34%; background: var(--coral); } .pin-blue { right: 20%; bottom: 70px; background: var(--blue); } .parcel { position: absolute; border: 2px solid rgba(217, 154, 40, 0.88); background: rgba(217, 154, 40, 0.18); transform: rotate(-8deg); } .parcel-one { right: 36px; top: 34px; width: 96px; height: 64px; } .parcel-two { left: 44px; bottom: 32px; width: 130px; height: 74px; } .dashboard-mock { background: linear-gradient(135deg, #ffffff, #f3f6fa); } .dash-line { position: absolute; left: 24px; top: 28px; width: 160px; height: 12px; border-radius: 999px; background: #d8e1ec; } .dash-line.wide { top: 54px; width: 245px; } .dash-card { position: absolute; top: 94px; width: 28%; height: 64px; border-radius: 8px; } .dash-card.green { left: 24px; background: rgba(22, 163, 74, 0.2); border: 1px solid rgba(22, 163, 74, 0.32); } .dash-card.amber { left: 36%; background: rgba(217, 154, 40, 0.22); border: 1px solid rgba(217, 154, 40, 0.34); } .dash-card.red { right: 24px; background: rgba(232, 93, 79, 0.2); border: 1px solid rgba(232, 93, 79, 0.3); } .radius-ring { position: absolute; right: 72px; bottom: 28px; width: 124px; height: 124px; border: 3px solid rgba(37, 99, 235, 0.55); border-radius: 50%; background: rgba(37, 99, 235, 0.08); } .help-pin { right: 124px; bottom: 78px; background: var(--teal); } .project-content { padding: 20px; } .project-kicker { display: inline-flex; margin-bottom: 12px; color: var(--teal); font-size: 0.78rem; font-weight: 900; text-transform: uppercase; } .project-two .project-kicker { color: var(--coral); } .project-card h3 { margin-bottom: 8px; font-size: 1.06rem; letter-spacing: 0; } .tag-list { display: flex; flex-wrap: wrap; gap: 8px; margin: 16px 0 20px; } .tag-list span { display: inline-flex; padding: 7px 10px; border-radius: 999px; color: var(--muted); background: #eef3f8; font-size: 0.78rem; font-weight: 800; } @media (max-width: 980px) { .hero-section { min-height: 84vh; } .project-grid { grid-template-columns: 1fr; } } @media (max-width: 720px) { .site-header { position: absolute; left: 14px; right: 14px; align-items: center; flex-direction: row; width: auto; transform: none; } .nav-links a { padding-right: 12px; padding-left: 12px; } .hero-section { display: block; align-items: flex-start; min-height: 92vh; padding-top: 178px; padding-bottom: 52px; } .hero-overlay { background: linear-gradient(180deg, rgba(8, 16, 32, 0.9) 0%, rgba(8, 16, 32, 0.74) 58%, rgba(8, 16, 32, 0.5) 100%); } h1 { font-size: 2.45rem; line-height: 1.04; } .hero-lead { font-size: 1rem; } .project-links .btn { width: 100%; } .projects-section { width: min(100% - 28px, 1180px); padding: 126px 0 58px; } .project-visual { height: 220px; } } @media (max-width: 460px) { .brand-text small { display: none; } .hero-section { min-height: 94vh; padding-top: 168px; } .project-visual { height: 190px; padding: 14px; } }