/* ============================================= UrbanFlow — initial.css (Mobile-First) Same design system, fully touch-friendly ============================================= */ :root { --cocoa: #8b5e3c; --cocoa-l: #c89a6c; --cocoa-xl: #d4b08a; --t1: #f0ece6; --t2: #a89f97; --border: #2a2a2a; } *, *::before, *::after { box-sizing: border-box; } html { scrollbar-width: none; } html::-webkit-scrollbar { display: none; } body { overflow-x: hidden; width: 100%; font-family: 'Montserrat', sans-serif; background-color: #000000; color: var(--t1); margin: 0; -webkit-tap-highlight-color: transparent; scrollbar-width: none; /* Firefox */ } body::-webkit-scrollbar { display: none; /* Chrome, Safari, Edge */ } /* ---- Fade animation ---- */ .fade-in { animation: fadeIn 0.4s ease-in-out forwards; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* ---- Feature List Animation ---- */ @keyframes fadeSlideIn { from { opacity: 0; transform: translateX(-8px); } to { opacity: 1; transform: translateX(0); } } .hero-text-section ul li { opacity: 0; animation: fadeSlideIn 0.4s ease-out forwards; } .hero-text-section ul li:nth-child(1) { animation-delay: 0.1s; } .hero-text-section ul li:nth-child(2) { animation-delay: 0.2s; } .hero-text-section ul li:nth-child(3) { animation-delay: 0.3s; } .hero-text-section ul li:nth-child(4) { animation-delay: 0.4s; } .hero-text-section ul li:nth-child(5) { animation-delay: 0.5s; } /* ---- Card ---- */ .traffic-dynamics-card { background-color: #0a0a0a !important; border: none !important; position: relative; transition: box-shadow 0.3s ease; z-index: 0; } /* Shimmer border — only on the 2px ring, not inside the card */ .traffic-dynamics-card::before { content: ''; position: absolute; inset: 0; border-radius: inherit; padding: 2px; background: linear-gradient( 90deg, var(--cocoa) 0%, var(--cocoa-l) 30%, rgba(255,255,255,0.7) 50%, var(--cocoa-l) 70%, var(--cocoa) 100% ); background-size: 200% 100%; animation: borderShimmer 2.4s linear infinite; -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; pointer-events: none; } @keyframes borderShimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .traffic-dynamics-card:hover::before { animation-duration: 1.2s; } .traffic-dynamics-card:hover { box-shadow: 0 0 32px 0 rgba(200,154,108,0.18); } /* ---- Dropzone ---- */ #dropzone { transition: all 0.2s ease; border-color: #2a2a2a; /* finger-friendly minimum height */ min-height: 160px; } #dropzone:hover, #dropzone:active, #dropzone.dz-active { border-color: var(--cocoa-l) !important; background-color: #0d0d0d !important; } /* ---- Core badge ---- */ .core-badge { background-color: var(--cocoa) !important; color: var(--t1) !important; } /* ---- Onboarding ---- */ .onboard-overlay { position: fixed; inset: 0; z-index: 9999; background: rgba(0,0,0,0.92); display: flex; align-items: center; justify-content: center; padding: 16px; } .onboard-card { background: #0a0a0a; border: 1px solid #2a2a2a; border-radius: 16px; max-width: 440px; width: 100%; padding: 32px 24px; text-align: center; } .onboard-step { display: none; } .onboard-step.active { display: block; } .onboard-dots { display: flex; gap: 6px; justify-content: center; margin-top: 20px; } .onboard-dot { width: 8px; height: 8px; border-radius: 50%; background: #333; transition: background 0.2s; } .onboard-dot.active { background: var(--cocoa-l); } /* Onboarding buttons — large touch targets */ .onboard-card .flex.gap-3 button { min-height: 44px; padding: 10px 20px; font-size: 11px; } /* Onboarding Icon Pulse */ @keyframes iconPulse { 0% { transform: scale(1); } 50% { transform: scale(1.12); } 100% { transform: scale(1); } } .pulse-once { animation: iconPulse 0.35s ease; } /* ---- Canvas container — touch hint ---- */ #drawing-canvas { touch-action: none; /* prevents scroll while drawing */ } /* ---- Upload progress ---- */ #upload-progress-container { padding: 0 4px; } #upload-bar { transition: width 0.3s ease-out; position: relative; } /* Shimmer overlay */ #upload-bar::after { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent); transform: translateX(-100%); animation: shimmer 1.5s infinite; } @keyframes shimmer { 100% { transform: translateX(100%); } } /* ============================================= DESKTOP (≥1024px) — original layout ============================================= */ @media (min-width: 1024px) { header { margin-top: 4rem; } main { display: grid !important; grid-template-columns: repeat(12, 1fr) !important; gap: 5rem !important; padding: 2rem 2.5rem !important; align-items: center; min-height: 70vh !important; } /* Stable card on desktop */ main > div:last-child { height: 520px !important; overflow: hidden !important; margin-bottom: 0 !important; display: flex; flex-direction: column; justify-content: center; } /* Steps scroll internally */ #step-modules, #step-upload, #step-draw { overflow-y: auto !important; height: auto !important; max-height: 100% !important; padding-right: 8px; } /* Clamped font size to avoid overflow */ .hero-title { font-size: clamp(3rem, 4.5vw, 4.5rem) !important; line-height: 1.1 !important; } #dropzone { min-height: 200px; } } /* ============================================= TABLET (640px – 1023px) ============================================= */ @media (min-width: 640px) and (max-width: 1023px) { header { margin-top: 2rem; } header img { height: 8rem !important; } main { display: flex !important; flex-direction: column !important; padding: 1.5rem !important; gap: 2rem !important; } .hero-title { font-size: 2.8rem !important; } /* Hero text section — centered on tablet */ main > div:first-child { text-align: center; padding-bottom: 0 !important; } main > div:first-child ul { display: inline-block; text-align: left; } /* Step card — full width */ main > div:last-child { max-width: 100% !important; width: 100% !important; } #dropzone { min-height: 180px; } } /* ============================================= MOBILE (< 640px) — redesigned mobile layout ============================================= */ @media (max-width: 639px) { /* ---- Body: single-column scroll ---- */ body { overflow-y: auto !important; overflow-x: hidden !important; } /* ---- Header — compact logo ---- */ header { margin-top: 2rem !important; margin-bottom: 0 !important; padding: 0 20px; } header img { height: 7rem !important; } /* ---- Main — stacked column ---- */ main { display: flex !important; flex-direction: column !important; padding: 20px 16px 8px !important; gap: 20px !important; max-width: 100% !important; } /* ---- Hero text: SHOW on mobile (compact) ---- */ .hero-text-section { display: flex !important; flex-direction: column; align-items: center; text-align: center; padding-bottom: 0 !important; order: 1; } /* Mobile hero title styling */ .hero-title { font-size: 2.8rem !important; line-height: 1.15 !important; margin-top: 10px !important; text-align: center !important; } /* DEMO badge + tagline row */ .hero-text-section > p:first-of-type { font-size: 11.5px !important; letter-spacing: 0.18em !important; margin-bottom: 14px !important; justify-content: center; } /* Feature bullets */ .hero-text-section ul { display: flex !important; flex-direction: column !important; gap: 4px !important; width: 100%; text-align: left; } .hero-text-section ul li { display: flex !important; align-items: flex-start !important; font-size: 14px !important; font-weight: 500 !important; line-height: 1.6 !important; padding: 5px 0; color: #a89f97 !important; } .hero-text-section ul li i { font-size: 14px !important; margin-right: 10px !important; margin-top: 2px; flex-shrink: 0; } /* ---- Step card: full width, right below bullets ---- */ .step-card-section { max-width: 100% !important; width: 100% !important; min-height: unset !important; height: auto !important; margin: 0 !important; order: 2; } /* The fixed-height container that holds all steps */ main > div:last-child { height: auto !important; min-height: unset !important; } /* ---- Step headings ---- */ #step-modules h2, #step-upload h2, #step-draw h2 { font-size: 1.4rem !important; margin-bottom: 6px !important; } #step-modules p, #step-upload p { font-size: 11px !important; margin-bottom: 20px !important; } /* ---- Traffic Dynamics card ---- */ .traffic-dynamics-card { padding: 24px 20px !important; border-radius: 1.5rem !important; } /* ---- Dropzone — warm glow tap target ---- */ #dropzone { padding: 2rem 1.25rem !important; min-height: 150px; border-radius: 1.25rem !important; border-color: #2a2a2a !important; } #dropzone span:first-of-type { font-size: 0.95rem !important; } /* ---- Canvas wrapper ---- */ .relative.w-full.aspect-video { aspect-ratio: 4/3 !important; border-radius: 1rem !important; max-height: 40vh; /* Keeps continue button above fold */ } /* ---- Proceed button — full width ---- */ #btn-proceed { width: 100% !important; padding: 14px !important; font-size: 0.9rem !important; border-radius: 999px !important; } /* ---- Reset / Back buttons ---- */ button[onclick="resetCanvas()"], button[onclick="showStep('modules')"] { font-size: 11px !important; padding: 10px 0 !important; min-height: 40px; } /* ---- Footer — padding only on mobile, layout handled by Tailwind ---- */ footer { padding: 14px 20px 24px !important; } /* ---- Onboarding card ---- */ .onboard-card { padding: 28px 20px !important; border-radius: 18px !important; } .onboard-card h3 { font-size: 1rem !important; } .onboard-card p { font-size: 11px !important; } } /* ============================================= TOUCH: remove drag-related cursor on mobile ============================================= */ @media (hover: none) and (pointer: coarse) { #dropzone { cursor: pointer; } #dropzone:hover { /* no hover state on touch — only active */ border-color: #2a2a2a !important; background-color: transparent !important; } #dropzone:active, #dropzone.dz-active { border-color: var(--cocoa-l) !important; background-color: #0d0d0d !important; } /* Bigger touch targets for all buttons */ button { min-height: 44px; } /* Canvas cursor for drawing */ #drawing-canvas { cursor: crosshair; } }