:root { --charcoal: #1A1A2E; --charcoal-light: #2D2D44; --charcoal-mid: #3A3A55; --coral: #FF6B4A; --coral-light: #FF8A70; --coral-dark: #E5553A; --cream: #FFF8F5; --white: #FFFFFF; --gray-100: #F7F7F8; --gray-200: #E8E8ED; --gray-300: #C4C4D0; --gray-500: #8888A0; --gray-700: #4A4A60; } *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; font-size: 16px; } body { font-family: 'Inter', -apple-system, sans-serif; color: var(--charcoal); background: var(--cream); overflow-x: hidden; line-height: 1.6; } h1, h2, h3, h4, h5, h6 { font-family: 'Space Grotesk', sans-serif; line-height: 1.1; } /* ─── NAVBAR ─── */ .navbar { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; padding: 1rem 2rem; transition: all 0.4s cubic-bezier(0.22, 1, 0.36, 1); } .navbar.scrolled { background: rgba(26, 26, 46, 0.95); backdrop-filter: blur(20px); padding: 0.7rem 2rem; box-shadow: 0 4px 40px rgba(0,0,0,0.3); } .nav-inner { max-width: 1280px; margin: 0 auto; display: flex; align-items: center; justify-content: space-between; } .nav-logo { display: flex; align-items: center; gap: 0.6rem; text-decoration: none; } .nav-logo-icon { width: 40px; height: 40px; background: var(--coral); border-radius: 10px; display: flex; align-items: center; justify-content: center; transition: transform 0.3s ease; } .nav-logo:hover .nav-logo-icon { transform: rotate(-10deg) scale(1.05); } .nav-logo-icon svg { width: 22px; height: 22px; } .nav-logo-text { font-family: 'Space Grotesk', sans-serif; font-weight: 700; font-size: 1.4rem; color: var(--white); letter-spacing: -0.02em; } .nav-links { display: flex; align-items: center; gap: 2rem; list-style: none; } .nav-links a { color: rgba(255,255,255,0.75); text-decoration: none; font-size: 0.9rem; font-weight: 500; transition: color 0.3s ease; position: relative; } .nav-links a::after { content: ''; position: absolute; bottom: -4px; left: 0; width: 0; height: 2px; background: var(--coral); transition: width 0.3s ease; } .nav-links a:hover { color: var(--white); } .nav-links a:hover::after { width: 100%; } .nav-cta { background: var(--coral) !important; color: var(--white) !important; padding: 0.6rem 1.4rem; border-radius: 50px; font-weight: 600 !important; transition: all 0.3s ease !important; } .nav-cta::after { display: none !important; } .nav-cta:hover { background: var(--coral-light) !important; transform: translateY(-2px); box-shadow: 0 8px 25px rgba(255, 107, 74, 0.4); } .mobile-toggle { display: none; flex-direction: column; gap: 5px; cursor: pointer; background: none; border: none; padding: 4px; } .mobile-toggle span { width: 26px; height: 2.5px; background: var(--white); border-radius: 2px; transition: all 0.3s ease; } .mobile-toggle.active span:nth-child(1) { transform: rotate(45deg) translate(5px, 5px); } .mobile-toggle.active span:nth-child(2) { opacity: 0; } .mobile-toggle.active span:nth-child(3) { transform: rotate(-45deg) translate(5px, -5px); } /* ─── HERO ─── */ .hero { min-height: 100vh; background: var(--charcoal); position: relative; display: flex; align-items: center; overflow: hidden; padding: 8rem 2rem 4rem; } .hero-bg-shapes { position: absolute; inset: 0; pointer-events: none; overflow: hidden; } .hero-shape { position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.15; } .hero-shape-1 { width: 600px; height: 600px; background: var(--coral); top: -200px; right: -100px; animation: float1 8s ease-in-out infinite; } .hero-shape-2 { width: 400px; height: 400px; background: #FFB347; bottom: -100px; left: -50px; animation: float2 10s ease-in-out infinite; } .hero-shape-3 { width: 200px; height: 200px; background: var(--coral-light); top: 40%; right: 30%; animation: float3 6s ease-in-out infinite; } @keyframes float1 { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(-30px, 20px) scale(1.05); } } @keyframes float2 { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(20px, -30px) scale(1.1); } } @keyframes float3 { 0%, 100% { transform: translate(0, 0); } 50% { transform: translate(-15px, 15px); } } .hero-grid-pattern { position: absolute; inset: 0; background-image: linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px); background-size: 60px 60px; pointer-events: none; } .hero-inner { max-width: 1280px; margin: 0 auto; width: 100%; display: grid; grid-template-columns: 1fr 1fr; gap: 4rem; align-items: center; position: relative; z-index: 2; } .hero-content { max-width: 600px; } .hero-badge { display: inline-flex; align-items: center; gap: 0.5rem; background: rgba(255, 107, 74, 0.15); border: 1px solid rgba(255, 107, 74, 0.3); color: var(--coral-light); padding: 0.5rem 1rem; border-radius: 50px; font-size: 0.85rem; font-weight: 500; margin-bottom: 1.5rem; animation: fadeInUp 0.8s ease forwards; } .hero-badge-dot { width: 8px; height: 8px; background: var(--coral); border-radius: 50%; animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.3); } } .hero h1 { font-size: clamp(2.8rem, 5vw, 4.5rem); font-weight: 700; color: var(--white); margin-bottom: 1.5rem; letter-spacing: -0.03em; animation: fadeInUp 0.8s ease 0.1s forwards; opacity: 0; } .hero h1 .accent { color: var(--coral); position: relative; } .hero h1 .accent::after { content: ''; position: absolute; bottom: 2px; left: 0; right: 0; height: 6px; background: var(--coral); opacity: 0.3; border-radius: 3px; } .hero-description { font-size: 1.15rem; color: rgba(255,255,255,0.6); line-height: 1.7; margin-bottom: 2rem; max-width: 480px; animation: fadeInUp 0.8s ease 0.2s forwards; opacity: 0; } .hero-actions { display: flex; gap: 1rem; flex-wrap: wrap; animation: fadeInUp 0.8s ease 0.3s forwards; opacity: 0; } @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .btn { display: inline-flex; align-items: center; gap: 0.5rem; padding: 1rem 2rem; border-radius: 50px; font-family: 'Space Grotesk', sans-serif; font-weight: 600; font-size: 1rem; text-decoration: none; transition: all 0.3s cubic-bezier(0.22, 1, 0.36, 1); cursor: pointer; border: none; } .btn-primary { background: var(--coral); color: var(--white); box-shadow: 0 8px 30px rgba(255, 107, 74, 0.3); } .btn-primary:hover { background: var(--coral-light); transform: translateY(-3px); box-shadow: 0 12px 40px rgba(255, 107, 74, 0.45); } .btn-secondary { background: rgba(255,255,255,0.08); color: var(--white); border: 1px solid rgba(255,255,255,0.15); } .btn-secondary:hover { background: rgba(255,255,255,0.15); transform: translateY(-3px); } .btn svg { width: 18px; height: 18px; } /* ─── FLOATING STAT CARDS ─── */ .hero-visual { position: relative; height: 500px; animation: fadeInUp 0.8s ease 0.4s forwards; opacity: 0; } .hero-main-image { width: 100%; height: 420px; border-radius: 24px; overflow: hidden; position: relative; box-shadow: 0 40px 80px rgba(0,0,0,0.4); } .hero-main-image img { width: 100%; height: 100%; object-fit: cover; } .hero-main-image::after { content: ''; position: absolute; inset: 0; background: linear-gradient(135deg, rgba(26,26,46,0.2), transparent); border-radius: 24px; } .stat-card { position: absolute; background: var(--white); border-radius: 16px; padding: 1rem 1.2rem; box-shadow: 0 20px 60px rgba(0,0,0,0.25); display: flex; align-items: center; gap: 0.8rem; animation: floatCard 4s ease-in-out infinite; } .stat-card-1 { top: -20px; left: -40px; animation-delay: 0s; } .stat-card-2 { bottom: 40px; right: -30px; animation-delay: 1s; } .stat-card-3 { bottom: -20px; left: 30px; animation-delay: 2s; } @keyframes floatCard { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } .stat-icon { width: 44px; height: 44px; border-radius: 12px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .stat-icon svg { width: 22px; height: 22px; } .stat-icon-coral { background: rgba(255, 107, 74, 0.15); color: var(--coral); } .stat-icon-charcoal { background: rgba(26, 26, 46, 0.1); color: var(--charcoal); } .stat-icon-cream { background: rgba(255, 179, 71, 0.15); color: #E5A030; } .stat-info h4 { font-size: 1.1rem; font-weight: 700; color: var(--charcoal); line-height: 1.2; } .stat-info p { font-size: 0.78rem; color: var(--gray-500); margin-top: 2px; } /* ─── SECTION STYLES ─── */ section { padding: 6rem 2rem; } .section-container { max-width: 1280px; margin: 0 auto; } .section-label { display: inline-flex; align-items: center; gap: 0.5rem; font-family: 'Space Grotesk', sans-serif; font-size: 0.85rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: var(--coral); margin-bottom: 1rem; } .section-label::before { content: ''; width: 30px; height: 3px; background: var(--coral); border-radius: 2px; } .section-title { font-size: clamp(2rem, 4vw, 3.2rem); font-weight: 700; color: var(--charcoal); letter-spacing: -0.03em; margin-bottom: 1rem; } .section-subtitle { font-size: 1.1rem; color: var(--gray-500); max-width: 550px; line-height: 1.7; } /* ─── SPECIALTIES ─── */ .specialties { background: var(--white); } .specialties-header { text-align: center; margin-bottom: 4rem; } .specialties-header .section-subtitle { margin: 0 auto; } .specialties-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; } .specialty-card { background: var(--cream); border-radius: 20px; overflow: hidden; transition: all 0.4s cubic-bezier(0.22, 1, 0.36, 1); position: relative; } .specialty-card:hover { transform: translateY(-8px); box-shadow: 0 30px 60px rgba(26, 26, 46, 0.12); } .specialty-card-image { height: 220px; overflow: hidden; position: relative; } .specialty-card-image img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.6s ease; } .specialty-card:hover .specialty-card-image img { transform: scale(1.08); } .specialty-card-tag { position: absolute; top: 1rem; left: 1rem; background: var(--coral); color: var(--white); padding: 0.3rem 0.8rem; border-radius: 50px; font-size: 0.75rem; font-weight: 600; font-family: 'Space Grotesk', sans-serif; } .specialty-card-body { padding: 1.5rem; } .specialty-card-body h3 { font-size: 1.3rem; font-weight: 700; color: var(--charcoal); margin-bottom: 0.5rem; letter-spacing: -0.02em; } .specialty-card-body p { font-size: 0.92rem; color: var(--gray-500); line-height: 1.6; } .specialty-card-accent { height: 4px; background: linear-gradient(90deg, var(--coral), var(--coral-light)); } /* ─── ABOUT ─── */ .about { background: var(--charcoal); position: relative; overflow: hidden; } .about-bg-accent { position: absolute; width: 500px; height: 500px; background: var(--coral); border-radius: 50%; filter: blur(150px); opacity: 0.08; top: -100px; left: -100px; } .about-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 5rem; align-items: center; position: relative; z-index: 2; } .about-content .section-title { color: var(--white); } .about-content .section-subtitle { color: rgba(255,255,255,0.55); margin-bottom: 2rem; } .about-features { display: flex; flex-direction: column; gap: 1.2rem; } .about-feature { display: flex; align-items: flex-start; gap: 1rem; } .about-feature-icon { width: 48px; height: 48px; border-radius: 12px; background: rgba(255, 107, 74, 0.15); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .about-feature-icon svg { width: 22px; height: 22px; color: var(--coral); } .about-feature h4 { font-size: 1rem; font-weight: 600; color: var(--white); margin-bottom: 0.2rem; } .about-feature p { font-size: 0.88rem; color: rgba(255,255,255,0.5); line-height: 1.5; } .about-images { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } .about-img { border-radius: 16px; overflow: hidden; height: 220px; } .about-img:first-child { grid-row: span 2; height: 100%; } .about-img img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; } .about-img:hover img { transform: scale(1.05); } /* ─── HOURS & LOCATION ─── */ .location { background: var(--cream); } .location-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: stretch; } .location-card { background: var(--white); border-radius: 24px; padding: 2.5rem; box-shadow: 0 10px 40px rgba(26, 26, 46, 0.06); } .location-card h3 { font-size: 1.5rem; font-weight: 700; color: var(--charcoal); margin-bottom: 1.5rem; display: flex; align-items: center; gap: 0.7rem; } .location-card h3 svg { width: 24px; height: 24px; color: var(--coral); } .hours-table { width: 100%; } .hours-row { display: flex; justify-content: space-between; padding: 0.8rem 0; border-bottom: 1px solid var(--gray-200); font-size: 0.95rem; } .hours-row:last-child { border-bottom: none; } .hours-row .day { font-weight: 500; color: var(--charcoal); } .hours-row .time { color: var(--gray-500); } .hours-row.today { background: rgba(255, 107, 74, 0.08); margin: 0 -1rem; padding: 0.8rem 1rem; border-radius: 10px; border-bottom: none; } .hours-row.today .day { color: var(--coral); font-weight: 600; } .hours-row.today .time { color: var(--coral); font-weight: 600; } .contact-info { display: flex; flex-direction: column; gap: 1.2rem; } .contact-item { display: flex; align-items: flex-start; gap: 1rem; } .contact-icon { width: 48px; height: 48px; border-radius: 12px; background: rgba(255, 107, 74, 0.1); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .contact-icon svg { width: 20px; height: 20px; color: var(--coral); } .contact-text strong { display: block; font-family: 'Space Grotesk', sans-serif; font-size: 0.95rem; color: var(--charcoal); margin-bottom: 0.2rem; } .contact-text span, .contact-text a { font-size: 0.9rem; color: var(--gray-500); text-decoration: none; transition: color 0.3s ease; } .contact-text a:hover { color: var(--coral); } .map-container { margin-top: 2rem; border-radius: 16px; overflow: hidden; height: 200px; background: var(--gray-200); position: relative; } .map-container iframe { width: 100%; height: 100%; border: none; } /* ─── CTA ─── */ .cta { background: var(--charcoal); position: relative; overflow: hidden; text-align: center; } .cta-shape { position: absolute; width: 400px; height: 400px; background: var(--coral); border-radius: 50%; filter: blur(120px); opacity: 0.1; bottom: -100px; right: -50px; } .cta-inner { position: relative; z-index: 2; } .cta .section-title { color: var(--white); max-width: 700px; margin: 0 auto 1rem; } .cta .section-subtitle { color: rgba(255,255,255,0.55); margin: 0 auto 2.5rem; text-align: center; } .cta-actions { display: flex; justify-content: center; gap: 1rem; flex-wrap: wrap; } /* ─── FOOTER ─── */ .footer { background: #12121F; padding: 3rem 2rem; } .footer-inner { max-width: 1280px; margin: 0 auto; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 1rem; } .footer-logo { display: flex; align-items: center; gap: 0.5rem; text-decoration: none; } .footer-logo-icon { width: 32px; height: 32px; background: var(--coral); border-radius: 8px; display: flex; align-items: center; justify-content: center; } .footer-logo-icon svg { width: 18px; height: 18px; } .footer-logo-text { font-family: 'Space Grotesk', sans-serif; font-weight: 700; font-size: 1.1rem; color: var(--white); } .footer-copy { font-size: 0.85rem; color: rgba(255,255,255,0.35); } .footer-links { display: flex; gap: 1.5rem; list-style: none; } .footer-links a { color: rgba(255,255,255,0.4); text-decoration: none; font-size: 0.85rem; transition: color 0.3s ease; } .footer-links a:hover { color: var(--coral); } /* ─── SCROLL ANIMATIONS ─── */ .reveal { opacity: 0; transform: translateY(40px); transition: all 0.8s cubic-bezier(0.22, 1, 0.36, 1); } .reveal.visible { opacity: 1; transform: translateY(0); } /* ─── MOBILE MENU ─── */ .mobile-menu { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(26, 26, 46, 0.98); backdrop-filter: blur(20px); z-index: 999; flex-direction: column; align-items: center; justify-content: center; gap: 2rem; opacity: 0; pointer-events: none; transition: opacity 0.4s ease; } .mobile-menu.open { opacity: 1; pointer-events: all; } .mobile-menu a { color: var(--white); text-decoration: none; font-family: 'Space Grotesk', sans-serif; font-size: 1.5rem; font-weight: 600; transition: color 0.3s ease; } .mobile-menu a:hover { color: var(--coral); } /* ─── RESPONSIVE ─── */ @media (max-width: 1024px) { .hero-inner { grid-template-columns: 1fr; text-align: center; } .hero-content { max-width: 100%; } .hero-description { max-width: 100%; margin-left: auto; margin-right: auto; } .hero-actions { justify-content: center; } .hero-visual { max-width: 500px; margin: 0 auto; height: 400px; } .specialties-grid { grid-template-columns: repeat(2, 1fr); } .about-grid { grid-template-columns: 1fr; gap: 3rem; } .about-images { max-width: 500px; } .location-grid { grid-template-columns: 1fr; } } @media (max-width: 768px) { .nav-links { display: none; } .mobile-toggle { display: flex; } .mobile-menu { display: flex; } .hero { padding: 7rem 1.5rem 3rem; } .hero h1 { font-size: 2.4rem; } .stat-card-1 { left: -10px; top: -10px; } .stat-card-2 { right: -10px; } .stat-card-3 { left: 10px; } .specialties-grid { grid-template-columns: 1fr; } .about-images { grid-template-columns: 1fr 1fr; } .about-img:first-child { grid-row: auto; height: 200px; } section { padding: 4rem 1.5rem; } .footer-inner { flex-direction: column; text-align: center; } } @media (max-width: 480px) { .hero-visual { height: 320px; } .hero-main-image { height: 300px; } .stat-card { padding: 0.7rem 0.9rem; } .stat-icon { width: 36px; height: 36px; } .stat-info h4 { font-size: 0.95rem; } .stat-info p { font-size: 0.72rem; } }
Right where the city's busiest stations cross paths, Dunkin' serves Philadelphia a dual experience: specialty coffee to power your day and craft cocktails to kick off your night.
Single-origin, freshly roasted
Local spirits, seasonal menus
Open when you need us
Whether you're grabbing a quick flat white between trains or settling in for a slow evening with a craft cocktail, every cup and every pour is made with intention.
Morning
Single-origin espressos, pour-overs, and signature lattes crafted by baristas who care about every detail — from bean to cup.
Evening
When the sun sets, our bar comes alive. Seasonal cocktails made with local spirits, fresh ingredients, and creative flair.
All Day
Artisan sandwiches, fresh pastries, and snackable plates — perfect alongside your drink or as a quick meal on the go.
Located right at the heart of Philadelphia's transit hub at 30th & Market, Dunkin' was designed for the commuters, the locals, and everyone in between. We're the place that knows your usual before you do.
We're not a chain experience — we're your neighborhood spot with a passion for quality.
From ethically sourced beans to locally distilled spirits, every ingredient is chosen deliberately.
Celebrating local roasters, brewers, and producers — because the best ingredients come from right here.
Whether you need a quick grab-and-go espresso or a place to unwind with a craft cocktail after work, we're right where you need us — at the intersection of 30th and Market.