Анализ сайта micahdavid.com
Основное Готовность: 100%
Домен
micahdavid.com
Состояние доменного имени
?
Проверяем корректность доменного имени и наличие технических проблем на уровне домена.
Домен второго уровня идеален для продвижения.
Отличный запоминающийся домен.
Ответ сервера
200 Успешный ответ
HTTP-код ответа и цепочка редиректов
?
Код 200 — страница доступна. Коды 3xx — редиректы (цепочки замедляют загрузку и размывают ссылочный вес). Коды 4xx/5xx — ошибки, поисковик не сможет проиндексировать страницу.
Сервер настроен корректно.
Цепочка редиректов:
http://micahdavid.com
301 MovedPermanently
https://heystudiio.com/
200 OK
Безопасность
Сайт безопасен
Использование HTTPS и SSL-сертификат
?
HTTPS — обязательный стандарт. Google и Яндекс отдают предпочтение защищённым сайтам. Отсутствие SSL или просроченный сертификат ведут к предупреждениям в браузере и снижению позиций.
На сайте работает защищенный протокол ssl и сайт открывается по https.
Ssl-сертификат действителен до 20.11.2026 21:34:51.
Включён HSTS (Strict-Transport-Security) — защита от подмены на http.
HTTP автоматически перенаправляется на HTTPS.
Поздравляем! Сайт не содержится в реестре РКН.
Кодировка
utf-8
Кодировка символов страницы
?
Стандарт — UTF-8. Неправильная кодировка вызывает нечитаемые символы и мешает поисковику корректно распознать текст страницы.
Указана кодировка на странице utf-8.
Язык
en
Атрибут lang в HTML-теге
?
Атрибут lang (<html lang="ru">) сообщает поисковикам и браузерам, на каком языке написана страница. Помогает при ранжировании в региональном поиске.
Язык документа указан явно: en.
Скорость загрузки
~0,99сек
Время отклика сервера (TTFB)
?
Time To First Byte — время до получения первого байта от сервера. Норма до 200 мс. Медленный отклик ухудшает пользовательский опыт и ранжирование: Яндекс и Google учитывают скорость страниц.
Скорость загрузки сайта 0,99сек оптимальна.
Объем документа
148Кб
Размер HTML-кода страницы
?
Слишком большой HTML замедляет парсинг браузером и сканирование поисковым роботом. Рекомендуется не более 200 Кб.
Объем html-документа 148Кб оптимален.
Структура html-документа корректна.
Ресурсы
Ресурсы: 4
Внешние ресурсы страницы (CSS, JS, изображения)
?
Количество и тип подключённых ресурсов влияют на скорость загрузки. Большое число запросов увеличивает время рендеринга страницы.
Кол-во файлов ресурсов 4 достаточно.
Показать полный список ресурсов
| Тип | Название | Значение |
|---|---|---|
| stylesheet | https://fonts.googleapis.com/css2?family=Archivo:wght@600;700;800&family=Inter:wght@400;500;600&display=swap | |
| stylesheet | https://fonts.googleapis.com/css2?family=Archivo:wght@600;700;800&family=Inter:wght@400;500;600&display=swap | |
| stylesheet | /_astro/SectionRail.B45auHD5.css | |
| js | module | /_astro/Base.astro_astro_type_script_index_0_lang.BCafiPwB.js |
Серверные заголовки
Кол-во: 10
HTTP-заголовки ответа сервера
?
Заголовки сервера передают браузеру и поисковику служебную информацию: кеширование, безопасность (CSP, HSTS), сжатие (gzip). Правильная настройка ускоряет загрузку и повышает защищённость.
Найдены серверные заголовки 10шт. Подробнее про серверные заголовки.
Показать полный список серверных заголовков
| Ключ | Значение |
|---|---|
| Accept-Ranges | bytes |
| Age | 0 |
| Cache-Control | public, must-revalidate, max-age=0 |
| cache-status | "Netlify Edge"; hit; ttl=31536000 |
| Date | Sun, 23 Aug 2026 01:11:53 GMT |
| ETag | "c9ea9a2dac9925ad3ea5ca8af9e07221-ssl" |
| Server | Netlify |
| Strict-Transport-Security | max-age=31536000 |
| Vary | Accept-Encoding |
| x-nf-request-id | 01M0P2S3ZN6Z4XMMXJDCRYWDT2 |
CMS
Не определена
Система управления сайтом (движок)
?
CMS — это движок, на котором работает сайт (WordPress, 1C-Bitrix, Tilda и др.). Знание CMS помогает понять возможности SEO-оптимизации и подобрать подходящие инструменты. «Не определена» — вероятно, самописный сайт или нестандартная сборка.
CMS не определена. Вероятно, сайт самописный либо движок надёжно скрыт. Это не ошибка.
Веб-сервер
Netlify
Программное обеспечение сервера
?
Веб-сервер — это ПО, которое отдаёт страницы посетителям (nginx, Apache, IIS, LiteSpeed и др.). Определяется по серверным заголовкам ответа (Server, X-Powered-By и т.п.). «Не определён» — сервер намеренно скрывает эти заголовки, это нормальная практика безопасности.
В заголовке Server указано: Netlify.
Мета-теги Готовность: 48%
Title
STUDiiO | Las Vegas Video and Photography Studio
Заголовок страницы в браузере и поисковой выдаче
?
Title — главный SEO-заголовок страницы. Влияет на CTR в поиске и ранжирование. Оптимальная длина: 50–70 символов. Ключевые слова — ближе к началу.
Необходимо уменьшить число символов в title (текущее значение: 48, оптимально: от 40 до 45)
Дублей словоформ в title не найдено.
Description
Las Vegas video and photography studio making brand campaigns, event coverage, and social content that makes people know, trust, and choose your business.
Описание страницы в поисковой выдаче (сниппет)
?
Meta Description — текст под заголовком в выдаче. Напрямую на позиции не влияет, но влияет на CTR. Оптимальная длина: 120–160 символов.
Необходимо уменьшить число символов в description (текущее значение: 154, оптимально: от 120 до 130)
Keywords
Список ключевых слов страницы (устаревший тег)
?
Meta Keywords не учитывается Яндексом и Google для ранжирования с 2009–2012 годов. Заполнение не обязательно, но не вредит. Конкурент может использовать содержимое для анализа.
Установите мета-тег keywords!
Канонический Url
https://heystudiio.com/
Указывает поисковику основную версию страницы
?
Canonical (rel=canonical) предотвращает проблему дублей страниц. Должен точно совпадать с URL проверяемой страницы. Неправильный canonical может передать ссылочный вес на другую страницу.
Канонический Url прописан корректно.
Robots
Ошибок нет
Директивы для поисковых роботов на уровне страницы
?
Meta Robots управляет индексацией конкретной страницы: index/noindex — индексировать ли, follow/nofollow — следовать ли по ссылкам. Noindex полностью исключает страницу из поиска.
Meta-тег robots не указан. Страница свободна для индексации.
Адаптивность
width=device-width, initial-scale=1
Настройка масштабирования на мобильных устройствах
?
Тег viewport (<meta name="viewport">) сообщает браузеру, как масштабировать страницу на мобильных. Стандарт: width=device-width, initial-scale=1. Отсутствие — признак отсутствия мобильной версии.
Meta-тег viewport со значением-константой width=device-width задаёт ширину страницы в соответствии с размером экрана.
Meta-тег viewport со значением initial-scale=1.0 определяет масштаб 1:1, т.е. «не масштабировать».
Разметка OpenGraph
Кол-во: 9
Мета-теги для красивых превью в соцсетях
?
OpenGraph (og:title, og:description, og:image) управляет тем, как страница выглядит при репосте в социальных сетях и мессенджерах. Отсутствие OG-тегов — невзрачный превью при шеринге.
Разметка OpenGraph задана. Страница оптимизирована под социальные сети.
Показать полный список og мета-тегов
| Тип | Значение |
|---|---|
| og:type | website |
| og:site_name | STUDiiO |
| og:title | STUDiiO | Las Vegas Video and Photography Studio |
| og:description | Las Vegas video and photography studio making brand campaigns, event coverage, and social content that makes people know, trust, and choose your business. |
| og:image | https://heystudiio.com/img/og.jpg |
| og:url | https://heystudiio.com/ |
| og:image:width | 1200 |
| og:image:height | 630 |
| og:locale | en_US |
Все мета-теги
Кол-во: 17
Полный список мета-тегов страницы
?
Таблица всех meta-тегов, включая нестандартные. Позволяет найти опечатки, дубли и лишние теги.
Найдены мета-теги 17шт. Мета-теги не видимы для человека и предназначены для обмена информацией между веб-страницей и поисковыми системами, браузерами и другими веб-службами. С ними роботы 🤖 и устройства ведут себя более ожидаемо.
Показать полный список мета-тегов
| Тип | Название | Значение |
|---|---|---|
| name | viewport | width=device-width, initial-scale=1 |
| name | description | Las Vegas video and photography studio making brand campaigns, event coverage, and social content that makes people know, trust, and choose your business. |
| name | theme-color | #0a0a0d |
| name | twitter:card | summary_large_image |
| name | twitter:title | STUDiiO | Las Vegas Video and Photography Studio |
| name | twitter:description | Las Vegas video and photography studio making brand campaigns, event coverage, and social content that makes people know, trust, and choose your business. |
| name | twitter:image | https://heystudiio.com/img/og.jpg |
| name | twitter:image:alt | STUDiiO | Las Vegas Video and Photography Studio |
| property | og:type | website |
| property | og:site_name | STUDiiO |
| property | og:title | STUDiiO | Las Vegas Video and Photography Studio |
| property | og:description | Las Vegas video and photography studio making brand campaigns, event coverage, and social content that makes people know, trust, and choose your business. |
| property | og:image | https://heystudiio.com/img/og.jpg |
| property | og:url | https://heystudiio.com/ |
| property | og:image:width | 1200 |
| property | og:image:height | 630 |
| property | og:locale | en_US |
Оптимизация Готовность: 77%
Структура
Ошибок нет
Семантические HTML-элементы страницы
?
Проверяет наличие основных структурных элементов: nav, header, footer, main. Корректная семантическая структура помогает поисковику понять архитектуру страницы.
Структура документа корректна (теги <html> и <body> присутствуют в единственном экземпляре).
Контент
Есть ошибки
Объём и качество текстового содержимого
?
Анализирует объём полезного текста на странице. Слишком мало — страница может считаться малополезной. Слишком много — ухудшается читаемость и восприятие.
Среднее число слов в абзаце 8 слишком мало. Сделайте контент более читаемым!
Слова из title 7 встречаются в тексте достаточно.
Абзацев с текстом 55 достаточно.
Кол-во знаков контента 8419 на странице оптимально.
Кол-во слов 1417 на странице оптимально.
Заголовки
Ошибок нет
Иерархия заголовков H1–H6
?
H1 должен быть один и содержать ключевой запрос. H2–H6 описывают подразделы. Пропуск уровней (H1 → H3) и несколько H1 — типичные ошибки, снижающие понятность страницы для поисковика.
На странице присутствуют заголовки <h1> 1. Это прекрасно.
На странице присутствуют заголовки <h2> 8. Это хорошо.
На странице присутствуют заголовки <h3> 11.
Тошнота
3,32
Насколько одно слово доминирует в тексте
?
Классическая тошнота = √(частота самого повторяющегося слова). Норма до 7–8: текст воспринимается естественно. Выше — поисковик может счесть страницу переспамленной.
Тошнота превышает норму 3. Измените текст страницы!
Академич. тошнота
18,70%
Насколько текст перенасыщен ключевыми словами
?
Академическая тошнота = (частота слова / общее количество слов) × 100%. Показывает долю конкретного слова в тексте. Норма 5–15%.
Академическая тошнота превышает норму 5-15%. Измените текст страницы!
Семантическое ядро
20
Наиболее часто встречающиеся слова на странице
?
Топ слов по частоте использования. Показывает, какие слова доминируют в тексте с точки зрения поисковика.
Контент страницы содержит осмысленный текст и слова.
Показать список слов
| Слово | Кол-во | Частота |
|---|---|---|
| photography | 11 | 0,78% |
| portfolio | 7 | 0,49% |
| coverage | 7 | 0,49% |
| social | 7 | 0,49% |
| business | 7 | 0,49% |
| professional | 7 | 0,49% |
| everything | 7 | 0,49% |
| production | 7 | 0,49% |
| cinematic | 6 | 0,42% |
| photos | 6 | 0,42% |
| working | 6 | 0,42% |
| family | 6 | 0,42% |
| studiio | 5 | 0,35% |
| campaigns | 5 | 0,35% |
| pricing | 5 | 0,35% |
| people | 5 | 0,35% |
| commercial | 5 | 0,35% |
| symphony | 5 | 0,35% |
| product | 4 | 0,28% |
| retainers | 4 | 0,28% |
Индексация Готовность: 80%
Индексирование
Ошибок нет
Разрешено ли индексирование страницы
?
Проверяет, не закрыта ли страница от индексации через robots.txt, meta robots или X-Robots-Tag. Страница, закрытая от индексации, не появится в поисковой выдаче.
Анкоров на странице 74 оптимально. Поисковые роботы обязательно проиндексируют сайт.
Robots.txt
Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Robots.txt настроен корректно. Размер файла: 152529 байт. Загружен за: 1сек.
Проверяемая страница не запрещена в robots.txt.
Robots.txt доступен по постоянному адресу
Цепочка редиректов для файла robots.txt:
http://micahdavid.com/robots.txt
301 MovedPermanently
https://heystudiio.com/
200 OK
Показать содержимое robots.txt
<!DOCTYPE html><html lang="en" data-lenis><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script>
// Set the theme before paint (no flash).
// A visitor with no stored preference opens on a DARK field at T12 and is then stopped down
// to light by the intro in ThemeToggle (data-intro marks that this run should animate).
// Anyone who has already chosen a side keeps it and never sees the intro again.
(function () {
var root = document.documentElement;
try {
var t = localStorage.getItem('md-theme');
if (t !== 'light' && t !== 'dark') { root.setAttribute('data-intro', ''); t = 'dark'; }
root.setAttribute('data-theme', t);
} catch (e) {
root.setAttribute('data-theme', 'dark');
root.setAttribute('data-intro', '');
}
})();
</script><title>STUDiiO | Las Vegas Video and Photography Studio</title><meta name="description" content="Las Vegas video and photography studio making brand campaigns, event coverage, and social content that makes people know, trust, and choose your business."><link rel="canonical" href="https://heystudiio.com/"><link rel="icon" href="/favicon.ico" sizes="32x32"><link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="any"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="manifest" href="/site.webmanifest"><meta name="theme-color" content="#0a0a0d"><meta property="og:type" content="website"><meta property="og:site_name" content="STUDiiO"><meta property="og:title" content="STUDiiO | Las Vegas Video and Photography Studio"><meta property="og:description" content="Las Vegas video and photography studio making brand campaigns, event coverage, and social content that makes people know, trust, and choose your business."><meta property="og:image" content="https://heystudiio.com/img/og.jpg"><meta property="og:url" content="https://heystudiio.com/"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="STUDiiO | Las Vegas Video and Photography Studio"><meta name="twitter:description" content="Las Vegas video and photography studio making brand campaigns, event coverage, and social content that makes people know, trust, and choose your business."><meta name="twitter:image" content="https://heystudiio.com/img/og.jpg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:locale" content="en_US"><meta name="twitter:image:alt" content="STUDiiO | Las Vegas Video and Photography Studio"><script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":["ProfessionalService","LocalBusiness"],"@id":"https://heystudiio.com/#organization","name":"STUDiiO","legalName":"Micah David LLC","url":"https://heystudiio.com","email":"contact@heystudiio.com","description":"Cinematic brand video and photography for Las Vegas businesses, made so your prospects already know, trust, and choose you before they ever walk through the door.","slogan":"Fine Visuals. Finer Outcome.","logo":{"@type":"ImageObject","url":"https://heystudiio.com/img/logos/studio-black.webp"},"image":"https://heystudiio.com/img/og.jpg","founder":{"@type":"Person","name":"Micah David"},"address":{"@type":"PostalAddress","streetAddress":"1050 E Flamingo Rd, 107 PMB 2068","addressLocality":"Las Vegas","addressRegion":"NV","postalCode":"89119","addressCountry":"US"},"areaServed":{"@type":"Place","name":"Las Vegas and all of Southern Nevada"},"knowsAbout":["Brand campaigns","Event coverage","Social media retainers","Commercial photography","Video production","Las Vegas"],"sameAs":["https://www.instagram.com/heystudiio/","https://www.youtube.com/channel/UCnwWFyouudLwyuClohj-_3w"],"aggregateRating":{"@type":"AggregateRating","ratingValue":"5.0","reviewCount":15,"bestRating":"5"},"review":[{"@type":"Review","author":{"@type":"Person","name":"Lonala Ron"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"reviewBody":"Micah is genuinely one of a kind. His work is truly inspiring and amazingly talented. He puts everything together so beautifully. Love the time he worked on the Auric Symphony Park community and the great impression he made on the project."},{"@type":"Review","author":{"@type":"Person","name":"The Vaughnnn"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"reviewBody":"Working with Micah was a great experience. He guided me all the way through his production process and was very accommodating. Not once did I feel unsupported. On the day of our shoot he was flexible with our time limitations and very professional. He made everything stress free and the final product exceeded our expectations. Looking forward to working with him again for our next event."},{"@type":"Review","author":{"@type":"Person","name":"Camiren Uqdah"},"reviewRating":{"@type":"Rating","ratingValue":"5","bestRating":"5"},"reviewBody":"I had an amazing experience working with Micah. He drove about 40 minutes to meet us at a unique desert location that he recommended, and it ended up being the perfect backdrop for our family photos. Throughout the entire shoot, he was incredibly professional, attentive, and easy to work with."}]},{"@type":"WebSite","@id":"https://heystudiio.com/#website","url":"https://heystudiio.com","name":"STUDiiO","publisher":{"@id":"https://heystudiio.com/#organization"},"inLanguage":"en-US"}]}</script><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Archivo:wght@600;700;800&family=Inter:wght@400;500;600&display=swap" onload="this.onload=null;this.rel='stylesheet'"><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Archivo:wght@600;700;800&family=Inter:wght@400;500;600&display=swap" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Archivo:wght@600;700;800&family=Inter:wght@400;500;600&display=swap"></noscript><!--
Netlify Identity, for the CMS invite and password-reset links only.
Those links land on the site root carrying a token in the URL fragment, and the widget has
to be present to catch them. Loading it on every page for every visitor would be 90KB of
script that no visitor ever uses, so it is fetched only when such a token is actually
there, and then it hands off to /admin.
--><script>
if (/\b(invite_token|recovery_token|confirmation_token|email_change_token)=/.test(window.location.hash)) {
var s = document.createElement('script');
s.src = 'https://identity.netlify.com/v1/netlify-identity-widget.js';
s.onload = function () {
window.netlifyIdentity.on('init', function (user) {
if (!user) {
window.netlifyIdentity.on('login', function () {
window.location.href = '/admin/';
});
}
});
};
document.head.appendChild(s);
}
</script><link rel="stylesheet" href="/_astro/SectionRail.B45auHD5.css"><style>.spray-mark{background-color:rgb(var(--spray-color,var(--color-accent)));opacity:var(--spray-opacity,1);-webkit-mask-image:var(--spray-src);mask-image:var(--spray-src);mask-position:50%;mask-size:100% 100%;mask-repeat:no-repeat}.spray-mark.spray-animate{animation:.76s cubic-bezier(.2,.6,.2,1) spray-on}@keyframes spray-on{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}.a11y-no-motion .spray-mark.spray-animate{clip-path:none;animation:none}
.hiw{margin-inline:0;padding:0;list-style:none;position:relative}.hiw-row{z-index:calc(var(--i) + 1);position:relative}.hiw-row+.hiw-row{margin-top:var(--hiw-gap)}.hiw{--hiw-gap:clamp(1.25rem, 2.6vw, 2.5rem)}.hiw-card{isolation:isolate;background:#121216;border:1px solid #ffffff1a;border-radius:clamp(.9rem,1.8vw,1.5rem);align-items:center;min-height:clamp(7rem,13vw,10.5rem);display:flex;position:relative;overflow:hidden;box-shadow:0 1px 2px #0000004d,0 16px 34px -20px #0000008c}html[data-theme=light] .hiw-card{box-shadow:0 1px 2px #00000024,0 10px 22px -12px #00000047,0 28px 52px -28px #00000057}.hiw-shot{-o-object-fit:cover;object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.hiw-veil{background:linear-gradient(90deg,#0a0a0ded 0%,#0a0a0de6 62%,#0a0a0dad 100%);position:absolute;inset:0}@media (width>=1024px){.hiw-veil{background:linear-gradient(90deg,#0a0a0de0 0%,#0a0a0dcc 34%,#0a0a0d6b 72%,#0a0a0d42 100%)}}.hiw-glyph{opacity:.62;pointer-events:none;width:auto;height:clamp(2.75rem,5.5vw,4.75rem);position:absolute;top:50%;right:clamp(1rem,3vw,3.25rem);translate:0 -50%}.hiw-inner{align-items:center;gap:clamp(.9rem,2.4vw,2.25rem);padding:clamp(1.1rem,2.4vw,2rem) clamp(5rem,16vw,9rem) clamp(1.1rem,2.4vw,2rem) clamp(1.15rem,3vw,2.75rem);display:flex;position:relative}.hiw-n{font-family:var(--font-display);letter-spacing:-.04em;color:#ffffffeb;font-variant-numeric:tabular-nums;flex:none;font-size:clamp(3.25rem,8.5vw,7rem);font-weight:800;line-height:.76}.hiw-copy{min-width:0}.hiw-title{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.01em;color:#fff;font-size:clamp(.95rem,1.5vw,1.25rem);font-weight:700}.hiw-body{max-width:26ch;font-size:clamp(.85rem,1.15vw,1rem);line-height:var(--leading-relaxed);color:#ffffffd1;margin-top:.4rem}.hiw-cta{border-radius:var(--radius-sm,.25rem);background:rgb(var(--color-accent));color:rgb(var(--color-accent-fg));transition:background-color .18s var(--ease);align-items:center;gap:.5rem;margin-top:.9rem;padding:.6rem 1.1rem;font-size:.875rem;font-weight:600;display:inline-flex}.hiw-cta:hover{background:rgb(var(--color-accent) / .9)}.hiw-cta svg{transition:transform .18s var(--ease)}.hiw-cta:hover svg{transform:translate(2px)}.a11y-no-motion .hiw-cta svg{transition:none}.hiw-arc{z-index:-1;height:calc(var(--hiw-gap) + 7.5rem);opacity:.9;width:clamp(5rem,10vw,9rem);position:absolute;top:calc(100% - 3.5rem)}.hiw-row:nth-child(odd) .hiw-arc{left:9%}.hiw-row:nth-child(2n) .hiw-arc{right:9%;scale:-1 1}@media (width>=1024px){.hiw{--hiw-gap:3.25rem}.hiw-card{width:79%}.hiw-row:nth-child(2n) .hiw-card{margin-left:auto}.hiw-body{max-width:46ch}.hiw-arc{width:26%;height:calc(var(--hiw-gap) + 8rem);top:calc(100% - 4rem)}.hiw-row:nth-child(odd) .hiw-arc{left:68%;right:auto}.hiw-row:nth-child(2n) .hiw-arc{left:auto;right:68%}}.reviews-track{animation:48s linear infinite reviews-scroll}@keyframes reviews-scroll{to{transform:translate(-50%)}}.reviews-marquee:hover .reviews-track,.reviews-marquee:focus-within .reviews-track{animation-play-state:paused}.a11y-no-motion .reviews-marquee{overflow-x:auto}.a11y-no-motion .reviews-track{animation:none}.a11y-no-motion .reviews-track>li[aria-hidden=true]{display:none}.hero-slide{opacity:0;transition:opacity 1.4s}.hero-slide.is-active{opacity:1}.strip-track{will-change:transform}.a11y-no-motion .hero-slide{transition:none}.a11y-no-motion .strip-track{transform:none!important}
</style></head><body class="min-h-screen bg-bg font-body text-text antialiased selection:bg-primary/30"><a class="skip-link" href="#main">Skip to content</a><header id="siteHeader" class="sticky top-0 z-50 border-b border-transparent data-[scrolled=true]:border-border"><div class="mx-auto flex max-w-container items-center justify-between gap-6 px-[var(--gutter)]" style="height: 6rem;"><a href="/" class="flex items-center" aria-label="STUDiiO home"><span class="wm text-3xl sm:text-4xl" aria-label="STUDiiO"><span class="sr-only">STUDiiO</span><span class="wm-art"><img class="wm-img" src="/img/logos/studio-clean.webp" alt="" aria-hidden="true" width="962" height="200"><span class="wm-i wm-i--a" aria-hidden="true"><i class="wm-stem"></i><i class="wm-dot"></i></span><span class="wm-i wm-i--b" aria-hidden="true"><i class="wm-stem"></i><i class="wm-dot"></i></span></span></span><!-- is:global because the reduced-motion guard keys off html.a11y-no-motion, which lives outside
this component. Every class is wm-* prefixed, so nothing leaks. --></a><nav aria-label="Primary" class="hidden items-center gap-1 lg:flex"><div class="relative" data-dropdown><button type="button" class="group flex items-center gap-1 rounded-sm px-3 py-2 text-sm text-text transition-colors hover:text-primary aria-expanded:text-primary" aria-expanded="false" aria-haspopup="true">Work<svg class="transition-transform duration-200 group-aria-[expanded=true]:rotate-180" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="invisible absolute left-0 top-full min-w-[16rem] translate-y-1 rounded-md border border-border bg-surface p-2 opacity-0 shadow-xl transition-all duration-200 data-[open=true]:visible data-[open=true]:translate-y-0 data-[open=true]:opacity-100" data-dropdown-panel><a href="/video" class="block rounded-sm px-3 py-2 text-sm transition-colors hover:bg-surface-2 text-text"><span class="font-medium">Video portfolio</span><span class="mt-0.5 block text-xs text-muted">Commercials, events, and more</span></a><a href="/photography" class="block rounded-sm px-3 py-2 text-sm transition-colors hover:bg-surface-2 text-text"><span class="font-medium">Photography portfolio</span><span class="mt-0.5 block text-xs text-muted">Brand, product, and portraits</span></a></div></div><div class="relative" data-dropdown><button type="button" class="group flex items-center gap-1 rounded-sm px-3 py-2 text-sm text-text transition-colors hover:text-primary aria-expanded:text-primary" aria-expanded="false" aria-haspopup="true">Services<svg class="transition-transform duration-200 group-aria-[expanded=true]:rotate-180" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div class="invisible absolute left-0 top-full min-w-[16rem] translate-y-1 rounded-md border border-border bg-surface p-2 opacity-0 shadow-xl transition-all duration-200 data-[open=true]:visible data-[open=true]:translate-y-0 data-[open=true]:opacity-100" data-dropdown-panel><a href="/services/brand-campaigns" class="block rounded-sm px-3 py-2 text-sm transition-colors hover:bg-surface-2 text-text"><span class="font-medium">Brand campaigns</span></a><a href="/services/event-coverage" class="block rounded-sm px-3 py-2 text-sm transition-colors hover:bg-surface-2 text-text"><span class="font-medium">Event coverage</span></a><a href="/services/social-media-retainers" class="block rounded-sm px-3 py-2 text-sm transition-colors hover:bg-surface-2 text-text"><span class="font-medium">Social media retainers</span></a><a href="/services/photography" class="block rounded-sm px-3 py-2 text-sm transition-colors hover:bg-surface-2 text-text"><span class="font-medium">Photography</span></a></div></div><a href="/packages" class="rounded-sm px-3 py-2 text-sm transition-colors hover:text-primary text-text">Pricing</a><a href="/about" class="rounded-sm px-3 py-2 text-sm transition-colors hover:text-primary text-text">About</a><a href="/faq" class="rounded-sm px-3 py-2 text-sm transition-colors hover:text-primary text-text">FAQ</a></nav><div class="flex items-center gap-3"><button type="button" data-theme-toggle aria-label="Toggle light and dark mode" title="T-Stop exposure: light / dark" class="md-aperture group inline-flex items-center gap-2 rounded-pill border border-border px-2.5 py-1.5 text-text transition-colors hover:border-accent hover:text-accent hidden sm:inline-flex"><svg width="20" height="20" viewBox="-1 -1 26 26" fill="none" aria-hidden="true" class="shrink-0"><circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="1.5" opacity="0.9"></circle><g class="blades" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" opacity="0.85"><line x1="14.31" y1="8" x2="20.05" y2="17.94"></line><line x1="9.69" y1="8" x2="21.17" y2="8"></line><line x1="7.38" y1="12" x2="13.12" y2="2.06"></line><line x1="9.69" y1="16" x2="3.95" y2="6.06"></line><line x1="14.31" y1="16" x2="2.83" y2="16"></line><line x1="16.62" y1="12" x2="10.88" y2="21.94"></line></g><polygon class="iris-hole" points="15.4,12 13.7,14.94 10.3,14.94 8.6,12 10.3,9.06 13.7,9.06" fill="rgb(var(--color-accent))"></polygon></svg><span class="ts-label whitespace-nowrap font-display text-xs font-semibold uppercase tracking-[0.14em] tabular-nums">T <span class="ts-num">12</span></span></button><script>
(function () {
if (window.__mdThemeToggle) return;
window.__mdThemeToggle = true;
var DARK_N = 12; // blades closed, small aperture -> darker exposure
var LIGHT_N = 1.8; // blades open, wide aperture -> brighter exposure
var ROLL_MS = 560; // how long the number counts between the two stops
var VEIL_MS = 360; // how long the outgoing-theme veil takes to fade away
function cur() { return document.documentElement.getAttribute('data-theme') === 'light' ? 'light' : 'dark'; }
// motion.js adds .a11y-no-motion for prefers-reduced-motion, but it is a deferred module, so
// also ask the media query directly in case a click lands before it runs.
function noMotion() {
if (document.documentElement.classList.contains('a11y-no-motion')) return true;
return !!(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches);
}
// A tenth of a stop below 10 so the roll reads as movement; whole stops from 10 up so it lands
// cleanly on "12" and never renders the awkward "10.0".
function fmt(v) { return v >= 9.95 ? String(Math.round(v)) : v.toFixed(1); }
var rollId = 0; // bumped on every new roll/set so a stale rAF loop bails out
// Run cb after two frames, but NEVER depend on rAF alone: a backgrounded or non-compositing
// tab stops firing frames entirely, which would otherwise strand the veil on screen and leave
// transitions disabled forever. Whichever path fires first wins, the other is a no-op.
function afterFrames(cb) {
var done = false;
function run() { if (done) return; done = true; cb(); }
requestAnimationFrame(function () { requestAnimationFrame(run); });
setTimeout(run, 120);
}
function nums() { return document.querySelectorAll('.ts-num'); }
function paint(list, text) { list.forEach(function (n) { n.textContent = text; }); }
function setNum(t) {
rollId++;
paint(nums(), fmt(t === 'light' ? LIGHT_N : DARK_N));
}
function rollNum(t) {
var list = nums();
if (!list.length) return;
var target = t === 'light' ? LIGHT_N : DARK_N;
rollId++;
var id = rollId;
if (noMotion()) { paint(list, fmt(target)); return; }
// Resume from whatever is on screen, so rapid clicks reverse instead of snapping.
var from = parseFloat(list[0].textContent);
if (isNaN(from)) from = t === 'light' ? DARK_N : LIGHT_N;
var t0 = performance.now();
function step(now) {
if (id !== rollId) return;
var p = Math.min(1, (now - t0) / ROLL_MS);
var e = 1 - Math.pow(1 - p, 3); // ease-out cubic
paint(list, fmt(p === 1 ? target : from + (target - from) * e));
if (p < 1) requestAnimationFrame(step);
}
step(t0);
// If frames never arrive (backgrounded tab), the roll silently stalls at its start value and
// the label would contradict the active theme. Land it on the correct stop regardless.
setTimeout(function () { if (id === rollId) paint(nums(), fmt(target)); }, ROLL_MS + 200);
}
// Full-viewport sheet painted in the CURRENT (outgoing) background, dropped in the same task as
// the theme swap so the new palette is hidden behind it, then faded off. We fade THIS instead of
// the theme tokens: Chromium will not re-resolve a CSS var mid-transition, which is what used to
// leave the sticky header stuck in the old theme.
function raiseVeil() {
var old = document.getElementById('md-theme-veil');
if (old && old.parentNode) old.parentNode.removeChild(old); // rapid clicks must not stack
if (noMotion()) return null;
var bg = getComputedStyle(document.documentElement).getPropertyValue('--color-bg').trim();
var el = document.createElement('div');
el.id = 'md-theme-veil';
el.setAttribute('aria-hidden', 'true');
el.style.cssText =
'position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;pointer-events:none;opacity:1;' +
'background:rgb(' + (bg || '8 8 11') + ')';
document.body.appendChild(el);
return el;
}
function dropVeil(el) {
if (!el || !el.parentNode) return;
var done = false;
function kill() {
if (done) return;
done = true;
if (el.parentNode) el.parentNode.removeChild(el);
}
el.addEventListener('transitionend', kill);
setTimeout(kill, VEIL_MS + 400); // belt and braces: the veil can never get stuck on screen
el.style.transition = 'opacity ' + VEIL_MS + 'ms var(--ease)';
el.style.opacity = '0';
}
function labels(t) {
var lbl = t === 'light' ? 'Switch to dark mode (T 12)' : 'Switch to light mode (T 1.8)';
document.querySelectorAll('[data-theme-toggle]').forEach(function (b) {
b.setAttribute('aria-label', lbl);
b.setAttribute('aria-pressed', String(t === 'light'));
});
}
function apply(t, after) {
var root = document.documentElement;
root.classList.add('theme-switching'); // suppress transitions so colors jump cleanly
root.setAttribute('data-theme', t);
try { localStorage.setItem('md-theme', t); } catch (e) {}
void root.offsetWidth; // flush the theme change with transitions off
afterFrames(function () {
root.classList.remove('theme-switching');
// One more tick: .theme-switching kills every transition with !important, so the veil can
// only animate once that class is gone. afterFrames, not raw rAF, so a tab that stops
// compositing still clears the class and drops the veil instead of stranding both.
if (after) afterFrames(after);
});
labels(t);
}
document.addEventListener('click', function (e) {
var btn = e.target.closest ? e.target.closest('[data-theme-toggle]') : null;
if (!btn) return;
var next = cur() === 'light' ? 'dark' : 'light';
var veil = raiseVeil(); // must read the bg BEFORE the swap
apply(next, function () { dropVeil(veil); });
rollNum(next);
});
function sync() { var t = cur(); labels(t); setNum(t); }
sync();
// ---- Opening stop-down -------------------------------------------------------------
// First visit only (Base marks data-intro when there is no stored choice): hold on the dark
// field at T12 for a beat, then stop down to light while the number races 12 -> 1.8. It is
// deliberately faster than a manual toggle so it reads as a lens stopping down, not a fade.
// Skipped entirely under reduced motion, where the theme is just set and left alone.
(function intro() {
var root = document.documentElement;
if (!root.hasAttribute('data-intro')) return;
root.removeAttribute('data-intro');
if (noMotion()) { apply('light'); return; }
var FAST = 420;
setTimeout(function () {
var prev = ROLL_MS;
ROLL_MS = FAST; // super fast, per the brief
apply('light');
rollNum('light');
setTimeout(function () { ROLL_MS = prev; }, FAST + 120);
}, 520);
})();
// Only the first instance's script runs (guard above), and the drawer's toggle is parsed after
// the header's, so re-sync once the whole document exists.
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', sync);
}
})();
</script><a href="/contact" class="accent-glow hidden whitespace-nowrap rounded-sm bg-accent px-4 py-2 text-sm font-semibold text-accent-fg transition-colors hover:bg-accent/90 sm:inline-flex">Book a call</a><button type="button" class="inline-flex h-10 w-10 items-center justify-center rounded-sm border border-border text-text lg:hidden" aria-expanded="false" aria-controls="mobileDrawer" aria-label="Open menu" data-drawer-open><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16"></path><path d="M4 12h16"></path><path d="M4 18h16"></path></svg></button></div></div></header><!-- is:global because the reduced-motion guard keys off html.a11y-no-motion, which lives outside
this component. Scoped to the #siteHeader id, so nothing leaks. --><!-- Mobile drawer — rendered OUTSIDE <header> so the header's backdrop-filter does not become its
containing block and clip the fixed positioning to the nav bar. --><div id="mobileDrawer" class="fixed inset-0 z-[60] hidden lg:hidden" data-drawer><div class="absolute inset-0 bg-bg/80 backdrop-blur-sm" data-drawer-close></div><div class="absolute right-0 top-0 flex h-full w-[86%] max-w-sm flex-col overflow-y-auto border-l border-border bg-bg p-6 shadow-2xl"><div class="flex items-center justify-between"><span class="wm text-xl" aria-label="STUDiiO"><span class="sr-only">STUDiiO</span><span class="wm-art"><img class="wm-img" src="/img/logos/studio-clean.webp" alt="" aria-hidden="true" width="962" height="200"><span class="wm-i wm-i--a" aria-hidden="true"><i class="wm-stem"></i><i class="wm-dot"></i></span><span class="wm-i wm-i--b" aria-hidden="true"><i class="wm-stem"></i><i class="wm-dot"></i></span></span></span><!-- is:global because the reduced-motion guard keys off html.a11y-no-motion, which lives outside
this component. Every class is wm-* prefixed, so nothing leaks. --><button type="button" class="inline-flex h-10 w-10 items-center justify-center rounded-sm border border-border text-text" aria-label="Close menu" data-drawer-close><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg></button></div><nav aria-label="Mobile" class="mt-8 flex flex-col"><div class="border-b border-border py-1"><a href="/video" class="block py-3 font-display text-lg font-semibold uppercase tracking-tight text-text">Work</a><div class="pb-2"><a href="/video" class="block py-1.5 text-sm text-muted">Video portfolio</a><a href="/photography" class="block py-1.5 text-sm text-muted">Photography portfolio</a></div></div><div class="border-b border-border py-1"><a href="/services" class="block py-3 font-display text-lg font-semibold uppercase tracking-tight text-text">Services</a><div class="pb-2"><a href="/services/brand-campaigns" class="block py-1.5 text-sm text-muted">Brand campaigns</a><a href="/services/event-coverage" class="block py-1.5 text-sm text-muted">Event coverage</a><a href="/services/social-media-retainers" class="block py-1.5 text-sm text-muted">Social media retainers</a><a href="/services/photography" class="block py-1.5 text-sm text-muted">Photography</a></div></div><div class="border-b border-border py-1"><a href="/packages" class="block py-3 font-display text-lg font-semibold uppercase tracking-tight text-text">Pricing</a></div><div class="border-b border-border py-1"><a href="/about" class="block py-3 font-display text-lg font-semibold uppercase tracking-tight text-text">About</a></div><div class="border-b border-border py-1"><a href="/faq" class="block py-3 font-display text-lg font-semibold uppercase tracking-tight text-text">FAQ</a></div></nav><a href="/contact" class="mt-8 inline-flex w-full items-center justify-center rounded-sm bg-accent px-5 py-3.5 font-semibold text-accent-fg">Book a call</a><div class="mt-6 flex items-center justify-between border-t border-border pt-6"><span class="text-xs uppercase tracking-[0.2em] text-muted">Exposure</span><button type="button" data-theme-toggle aria-label="Toggle light and dark mode" title="T-Stop exposure: light / dark" class="md-aperture group inline-flex items-center gap-2 rounded-pill border border-border px-2.5 py-1.5 text-text transition-colors hover:border-accent hover:text-accent"><svg width="20" height="20" viewBox="-1 -1 26 26" fill="none" aria-hidden="true" class="shrink-0"><circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="1.5" opacity="0.9"></circle><g class="blades" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" opacity="0.85"><line x1="14.31" y1="8" x2="20.05" y2="17.94"></line><line x1="9.69" y1="8" x2="21.17" y2="8"></line><line x1="7.38" y1="12" x2="13.12" y2="2.06"></line><line x1="9.69" y1="16" x2="3.95" y2="6.06"></line><line x1="14.31" y1="16" x2="2.83" y2="16"></line><line x1="16.62" y1="12" x2="10.88" y2="21.94"></line></g><polygon class="iris-hole" points="15.4,12 13.7,14.94 10.3,14.94 8.6,12 10.3,9.06 13.7,9.06" fill="rgb(var(--color-accent))"></polygon></svg><span class="ts-label whitespace-nowrap font-display text-xs font-semibold uppercase tracking-[0.14em] tabular-nums">T <span class="ts-num">12</span></span></button><script>
(function () {
if (window.__mdThemeToggle) return;
window.__mdThemeToggle = true;
var DARK_N = 12; // blades closed, small aperture -> darker exposure
var LIGHT_N = 1.8; // blades open, wide aperture -> brighter exposure
var ROLL_MS = 560; // how long the number counts between the two stops
var VEIL_MS = 360; // how long the outgoing-theme veil takes to fade away
function cur() { return document.documentElement.getAttribute('data-theme') === 'light' ? 'light' : 'dark'; }
// motion.js adds .a11y-no-motion for prefers-reduced-motion, but it is a deferred module, so
// also ask the media query directly in case a click lands before it runs.
function noMotion() {
if (document.documentElement.classList.contains('a11y-no-motion')) return true;
return !!(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches);
}
// A tenth of a stop below 10 so the roll reads as movement; whole stops from 10 up so it lands
// cleanly on "12" and never renders the awkward "10.0".
function fmt(v) { return v >= 9.95 ? String(Math.round(v)) : v.toFixed(1); }
var rollId = 0; // bumped on every new roll/set so a stale rAF loop bails out
// Run cb after two frames, but NEVER depend on rAF alone: a backgrounded or non-compositing
// tab stops firing frames entirely, which would otherwise strand the veil on screen and leave
// transitions disabled forever. Whichever path fires first wins, the other is a no-op.
function afterFrames(cb) {
var done = false;
function run() { if (done) return; done = true; cb(); }
requestAnimationFrame(function () { requestAnimationFrame(run); });
setTimeout(run, 120);
}
function nums() { return document.querySelectorAll('.ts-num'); }
function paint(list, text) { list.forEach(function (n) { n.textContent = text; }); }
function setNum(t) {
rollId++;
paint(nums(), fmt(t === 'light' ? LIGHT_N : DARK_N));
}
function rollNum(t) {
var list = nums();
if (!list.length) return;
var target = t === 'light' ? LIGHT_N : DARK_N;
rollId++;
var id = rollId;
if (noMotion()) { paint(list, fmt(target)); return; }
// Resume from whatever is on screen, so rapid clicks reverse instead of snapping.
var from = parseFloat(list[0].textContent);
if (isNaN(from)) from = t === 'light' ? DARK_N : LIGHT_N;
var t0 = performance.now();
function step(now) {
if (id !== rollId) return;
var p = Math.min(1, (now - t0) / ROLL_MS);
var e = 1 - Math.pow(1 - p, 3); // ease-out cubic
paint(list, fmt(p === 1 ? target : from + (target - from) * e));
if (p < 1) requestAnimationFrame(step);
}
step(t0);
// If frames never arrive (backgrounded tab), the roll silently stalls at its start value and
// the label would contradict the active theme. Land it on the correct stop regardless.
setTimeout(function () { if (id === rollId) paint(nums(), fmt(target)); }, ROLL_MS + 200);
}
// Full-viewport sheet painted in the CURRENT (outgoing) background, dropped in the same task as
// the theme swap so the new palette is hidden behind it, then faded off. We fade THIS instead of
// the theme tokens: Chromium will not re-resolve a CSS var mid-transition, which is what used to
// leave the sticky header stuck in the old theme.
function raiseVeil() {
var old = document.getElementById('md-theme-veil');
if (old && old.parentNode) old.parentNode.removeChild(old); // rapid clicks must not stack
if (noMotion()) return null;
var bg = getComputedStyle(document.documentElement).getPropertyValue('--color-bg').trim();
var el = document.createElement('div');
el.id = 'md-theme-veil';
el.setAttribute('aria-hidden', 'true');
el.style.cssText =
'position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;pointer-events:none;opacity:1;' +
'background:rgb(' + (bg || '8 8 11') + ')';
document.body.appendChild(el);
return el;
}
function dropVeil(el) {
if (!el || !el.parentNode) return;
var done = false;
function kill() {
if (done) return;
done = true;
if (el.parentNode) el.parentNode.removeChild(el);
}
el.addEventListener('transitionend', kill);
setTimeout(kill, VEIL_MS + 400); // belt and braces: the veil can never get stuck on screen
el.style.transition = 'opacity ' + VEIL_MS + 'ms var(--ease)';
el.style.opacity = '0';
}
function labels(t) {
var lbl = t === 'light' ? 'Switch to dark mode (T 12)' : 'Switch to light mode (T 1.8)';
document.querySelectorAll('[data-theme-toggle]').forEach(function (b) {
b.setAttribute('aria-label', lbl);
b.setAttribute('aria-pressed', String(t === 'light'));
});
}
function apply(t, after) {
var root = document.documentElement;
root.classList.add('theme-switching'); // suppress transitions so colors jump cleanly
root.setAttribute('data-theme', t);
try { localStorage.setItem('md-theme', t); } catch (e) {}
void root.offsetWidth; // flush the theme change with transitions off
afterFrames(function () {
root.classList.remove('theme-switching');
// One more tick: .theme-switching kills every transition with !important, so the veil can
// only animate once that class is gone. afterFrames, not raw rAF, so a tab that stops
// compositing still clears the class and drops the veil instead of stranding both.
if (after) afterFrames(after);
});
labels(t);
}
document.addEventListener('click', function (e) {
var btn = e.target.closest ? e.target.closest('[data-theme-toggle]') : null;
if (!btn) return;
var next = cur() === 'light' ? 'dark' : 'light';
var veil = raiseVeil(); // must read the bg BEFORE the swap
apply(next, function () { dropVeil(veil); });
rollNum(next);
});
function sync() { var t = cur(); labels(t); setNum(t); }
sync();
// ---- Opening stop-down -------------------------------------------------------------
// First visit only (Base marks data-intro when there is no stored choice): hold on the dark
// field at T12 for a beat, then stop down to light while the number races 12 -> 1.8. It is
// deliberately faster than a manual toggle so it reads as a lens stopping down, not a fade.
// Skipped entirely under reduced motion, where the theme is just set and left alone.
(function intro() {
var root = document.documentElement;
if (!root.hasAttribute('data-intro')) return;
root.removeAttribute('data-intro');
if (noMotion()) { apply('light'); return; }
var FAST = 420;
setTimeout(function () {
var prev = ROLL_MS;
ROLL_MS = FAST; // super fast, per the brief
apply('light');
rollNum('light');
setTimeout(function () { ROLL_MS = prev; }, FAST + 120);
}, 520);
})();
// Only the first instance's script runs (guard above), and the drawer's toggle is parsed after
// the header's, so re-sync once the whole document exists.
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', sync);
}
})();
</script></div></div></div><script>
(function () {
// Scroll state + hide-on-scroll-down / show-on-scroll-up.
var header = document.getElementById('siteHeader');
var drawer = document.getElementById('mobileDrawer');
var HIDE_AFTER = 120; // don't fight the very top of the page
var DELTA = 6; // ignore trackpad / sub-pixel jitter
var lastY = window.scrollY;
var ticking = false;
function showHeader() { header && header.setAttribute('data-hidden', 'false'); }
function updateHeader() {
ticking = false;
if (!header) return;
var y = window.scrollY;
header.setAttribute('data-scrolled', String(y > 8));
var diff = y - lastY;
// Bail BEFORE updating lastY so small moves accumulate instead of being swallowed.
if (Math.abs(diff) < DELTA) return;
var hide = diff > 0 && y > HIDE_AFTER;
// Never hide while the drawer is open (its close button has to stay reachable), and never
// hide a header that holds keyboard focus or a keyboard user lands on an invisible header.
if (hide && (isDrawerOpen() || header.contains(document.activeElement))) hide = false;
header.setAttribute('data-hidden', String(hide));
lastY = y;
}
function isDrawerOpen() { return !!drawer && !drawer.classList.contains('hidden'); }
var onScroll = function () {
if (!ticking) { ticking = true; window.requestAnimationFrame(updateHeader); }
};
showHeader();
updateHeader();
window.addEventListener('scroll', onScroll, { passive: true });
// A translated-away header is still tabbable, so bring it straight back if it takes focus.
header && header.addEventListener('focusin', showHeader);
// Desktop dropdowns
var dropdowns = [].slice.call(document.querySelectorAll('[data-dropdown]'));
dropdowns.forEach(function (dd) {
var btn = dd.querySelector('button');
var panel = dd.querySelector('[data-dropdown-panel]');
var open = function (v) {
btn.setAttribute('aria-expanded', String(v));
panel.setAttribute('data-open', String(v));
};
btn.addEventListener('click', function (e) { e.preventDefault(); open(btn.getAttribute('aria-expanded') !== 'true'); });
dd.addEventListener('mouseenter', function () { open(true); });
dd.addEventListener('mouseleave', function () { open(false); });
dd.addEventListener('focusout', function (e) { if (!dd.contains(e.relatedTarget)) open(false); });
dd.addEventListener('keydown', function (e) { if (e.key === 'Escape') { open(false); btn.focus(); } });
});
document.addEventListener('click', function (e) {
dropdowns.forEach(function (dd) { if (!dd.contains(e.target)) { var b = dd.querySelector('button'); var p = dd.querySelector('[data-dropdown-panel]'); b.setAttribute('aria-expanded', 'false'); p.setAttribute('data-open', 'false'); } });
});
// Mobile drawer
var openBtn = document.querySelector('[data-drawer-open]');
var closers = [].slice.call(document.querySelectorAll('[data-drawer-close]'));
var lastFocus = null;
function setDrawer(v) {
if (!drawer) return;
drawer.classList.toggle('hidden', !v);
openBtn.setAttribute('aria-expanded', String(v));
document.body.style.overflow = v ? 'hidden' : '';
// The header must never be hidden underneath an open drawer, and on close the scroll
// baseline is re-seeded so the first post-close scroll is measured from where we actually are.
if (v) showHeader(); else lastY = window.scrollY;
if (v) { lastFocus = document.activeElement; var f = drawer.querySelector('a,button'); f && f.focus(); }
else if (lastFocus) { lastFocus.focus(); }
}
openBtn && openBtn.addEventListener('click', function () { setDrawer(true); });
closers.forEach(function (c) { c.addEventListener('click', function () { setDrawer(false); }); });
document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && drawer && !drawer.classList.contains('hidden')) setDrawer(false); });
// close drawer when a nav link is chosen
drawer && drawer.querySelectorAll('a').forEach(function (a) { a.addEventListener('click', function () { setDrawer(false); }); });
})();
</script><main id="main"><section class="dark-region relative isolate flex min-h-[92svh] items-end overflow-hidden bg-bg"><div class="absolute inset-0 -z-10"><video class="hero-slide absolute inset-0 h-full w-full object-cover is-active" data-hero-slide src="/video/hero-auric.mp4" poster="/video/auric-poster.jpg" muted loop playsinline preload="auto" aria-hidden="true" tabindex="-1"></video><video class="hero-slide absolute inset-0 h-full w-full object-cover" data-hero-slide src="/video/hero-nanas.mp4" poster="/video/nanas-poster.jpg" muted loop playsinline preload="none" aria-hidden="true" tabindex="-1"></video></div><div class="absolute inset-0 -z-10 bg-black/40"></div><div class="absolute inset-0 -z-10 bg-gradient-to-b from-black/60 via-transparent to-bg"></div><div class="mx-auto w-full max-w-container px-[var(--gutter)] pb-[clamp(3rem,7vw,6rem)] pt-40"><div class="max-w-3xl"><div data-reveal><div class="flex items-center gap-3 text-primary" data-reveal><span class="font-body text-sm font-medium tabular-nums tracking-[0.25em]" style="font-variant-numeric: tabular-nums;">00:01</span><span class="h-px w-10 bg-primary/50" aria-hidden="true"></span><span class="text-xs font-medium uppercase tracking-[0.22em] text-muted">Las Vegas film</span><span class="wm -ml-[0.45rem] text-base" aria-label="STUDiiO"><span class="sr-only">STUDiiO</span><span class="wm-art"><img class="wm-img" src="/img/logos/studio-clean.webp" alt="" aria-hidden="true" width="962" height="200"><span class="wm-i wm-i--a" aria-hidden="true"><i class="wm-stem"></i><i class="wm-dot"></i></span><span class="wm-i wm-i--b" aria-hidden="true"><i class="wm-stem"></i><i class="wm-dot"></i></span></span></span><!-- is:global because the reduced-motion guard keys off html.a11y-no-motion, which lives outside
this component. Every class is wm-* prefixed, so nothing leaks. --></div></div><h1 class="mt-6 font-display font-extrabold uppercase tracking-tight text-white" style="font-size: var(--text-hero); line-height: 0.94; text-shadow: 0 2px 30px rgba(0,0,0,0.55), 0 1px 4px rgba(0,0,0,0.5);" data-reveal data-reveal-delay="1"><span class="relative inline-block">Fine<span aria-hidden="true" class="spray-mark pointer-events-none block absolute -bottom-[0.08em] -left-[0.05em] -right-[0.05em] h-[0.15em]" style="--spray-src:url("/img/spray/underline.webp");"></span></span> Visuals.<br><span class="relative inline-block">Finer<span aria-hidden="true" class="spray-mark pointer-events-none block absolute -bottom-[0.08em] -left-[0.05em] -right-[0.05em] h-[0.15em]" style="--spray-src:url("/img/spray/underline-2.webp");"></span></span> Outcome.</h1><p class="mt-6 max-w-xl text-lg text-white/85" style="line-height: var(--leading-relaxed); text-shadow: 0 1px 12px rgba(0,0,0,0.5);" data-reveal data-reveal-delay="2">Cinematic brand campaigns, event coverage, and photography for Las Vegas businesses, made so people know, trust, and choose you before they ever walk in.</p><div class="relative mt-9 flex flex-wrap items-center gap-4" data-reveal data-reveal-delay="3"><a href="/contact" class="accent-glow inline-flex items-center gap-2 rounded-sm bg-accent px-7 py-3.5 font-semibold text-accent-fg transition-colors hover:bg-accent/90">Book a call<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="/video" class="rounded-sm border border-white/35 px-7 py-3.5 font-medium text-white transition-colors hover:bg-white/10">See the work</a><svg viewBox="0 0 128 84" preserveAspectRatio="xMidYMid meet" aria-hidden="true" class="gr-draw pointer-events-none gr-animate pointer-events-none absolute -left-8 -top-10 hidden h-12 w-16 -scale-x-100 opacity-80 sm:block" style="--len:640" data-reveal><path d="M6 14 C 44 4, 96 16, 104 62" stroke-width="3"/>
<path d="M104 62 L92 46" stroke-width="3"/>
<path d="M104 62 L118 50" stroke-width="3"/></svg></div></div></div><div class="pointer-events-none absolute bottom-6 right-[var(--gutter)] hidden text-xs uppercase tracking-[0.25em] text-white/55 md:block">Directed by <span class="normal-case">STUDiiO</span></div></section><section class="section-fade-top overflow-hidden bg-bg"><div class="mx-auto max-w-container px-[var(--gutter)] pt-[clamp(2.5rem,5vw,4rem)]"><div class="flex flex-wrap items-end justify-between gap-4"><h2 class="font-display text-[clamp(1.35rem,2.6vw,2rem)] font-bold uppercase tracking-tight text-text" data-reveal>Trusted by brands across <span class="ink">Las Vegas</span></h2><p class="text-sm text-muted" data-reveal>Local shops to national names.</p></div></div><div class="logo-marquee mt-8 pb-[clamp(2.5rem,5vw,4rem)]" data-logo-marquee><ul class="logo-track flex w-max items-center"><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/raycon.webp" alt="Raycon logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:212 138 84"><img src="/img/logos/livebev.webp" alt="Live Bev logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:162 145 93"><img src="/img/logos/auric.webp" alt="Auric Symphony Park logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/taste-of-heaven.webp" alt="Taste of Heaven logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/nanas-green-tea.webp" alt="Nana's Green Tea logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:207 121 145"><img src="/img/logos/viva-las-vegas.webp" alt="Viva Las Vegas logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:211 87 85"><img src="/img/logos/vegas-weddings.webp" alt="Vegas Weddings logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:249 47 237"><img src="/img/logos/wedding-chapel.webp" alt="Little White Wedding Chapel logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/dxo.webp" alt="DxO logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:220 213 71"><img src="/img/logos/aapi.webp" alt="AAPI Chamber, Las Vegas logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/coffee-bean.webp" alt="The Coffee Bean & Tea Leaf logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:207 43 48"><img src="/img/logos/aces-fitness.webp" alt="Aces Fitness logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:245 4 2"><img src="/img/logos/paws-patrol.webp" alt="Paws Patrol LV logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/raycon.webp" alt="Raycon logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:212 138 84"><img src="/img/logos/livebev.webp" alt="Live Bev logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:162 145 93"><img src="/img/logos/auric.webp" alt="Auric Symphony Park logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/taste-of-heaven.webp" alt="Taste of Heaven logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/nanas-green-tea.webp" alt="Nana's Green Tea logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:207 121 145"><img src="/img/logos/viva-las-vegas.webp" alt="Viva Las Vegas logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:211 87 85"><img src="/img/logos/vegas-weddings.webp" alt="Vegas Weddings logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:249 47 237"><img src="/img/logos/wedding-chapel.webp" alt="Little White Wedding Chapel logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/dxo.webp" alt="DxO logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:220 213 71"><img src="/img/logos/aapi.webp" alt="AAPI Chamber, Las Vegas logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:226 226 232"><img src="/img/logos/coffee-bean.webp" alt="The Coffee Bean & Tea Leaf logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain logo-invert"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:207 43 48"><img src="/img/logos/aces-fitness.webp" alt="Aces Fitness logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li><li class="shrink-0 px-3" aria-hidden="true"><!-- No plate. Each mark sits on a soft glow in ITS OWN colour, sampled from the
artwork; monochrome marks glow neutral rather than being handed a hue that is
not in the logo. The essentially-black marks carry invert:true so they flip to
white on the dark theme instead of disappearing.
The duplicated half carries aria-hidden on the LI above, which is what stops
each logo being announced twice, so the alt text stays real on both copies
rather than being blanked on the duplicate. --><div class="logo-glow flex h-28 w-[11rem] items-center justify-center rounded-2xl px-5 text-center sm:w-[13rem]" style="--glow:245 4 2"><img src="/img/logos/paws-patrol.webp" alt="Paws Patrol LV logo" width="180" height="60" loading="lazy" class="max-h-14 w-auto object-contain"></div></li></ul></div></section><section class="bg-bg"><div class="mx-auto max-w-container px-[var(--gutter)] py-[var(--section-y)]"><div class="max-w-2xl"><div class="flex items-center gap-3 text-primary" data-reveal><span class="font-body text-sm font-medium tabular-nums tracking-[0.25em]" style="font-variant-numeric: tabular-nums;">00:02</span><span class="h-px w-10 bg-primary/50" aria-hidden="true"></span><span class="text-xs font-medium uppercase tracking-[0.22em] text-muted">What the studio makes</span></div><h2 class="mt-5 font-display font-bold uppercase tracking-tight text-text" style="font-size: var(--text-section); line-height: var(--leading-tight);" data-reveal><span class="relative isolate inline-block px-[0.34em] pb-[0.06em]"><span class="relative z-10">4</span><span aria-hidden="true" class="spray-mark pointer-events-none block absolute inset-0 -z-10 h-full w-full" style="--spray-src:url("/img/spray/circle.webp");"></span></span> ways to be impossible to <span class="relative inline-block">ignore<span aria-hidden="true" class="spray-mark pointer-events-none block absolute -bottom-[0.16em] -left-[0.06em] -right-[0.06em] h-[0.24em]" style="--spray-src:url("/img/spray/underline.webp");"></span></span></h2></div><!-- V4: photo-led cards. A still fills each card, a gradient climbs from the bottom on
hover, and the copy plus a Discover More button ride on top of it.
On small screens they become one scrolling column of EQUAL-HEIGHT cards, per his note,
rather than a grid that leaves the last card orphaned. --><ul class="svc-grid mt-12 grid gap-5 lg:grid-cols-3"><li class="lg:col-span-2" data-reveal style="--i:0"><a href="/services/brand-campaigns" class="svc-card group relative block overflow-hidden rounded-2xl svc-card--wide"><img src="/video/morning-groove-poster.jpg" alt="Brand campaigns by STUDiiO in Las Vegas" width="1200" height="900" loading="eager" decoding="async" class="svc-img h-full w-full object-cover"><!-- the gradient that animates up --><span class="svc-veil" aria-hidden="true"></span><div class="svc-body"><h3 class="font-display text-2xl font-bold text-white sm:text-3xl">Brand campaigns</h3><p class="mt-2 max-w-lg text-sm text-white/85 sm:text-base" style="line-height: var(--leading-relaxed);">A Las Vegas brand campaign built around your business, a cinematic short film that makes people know, trust, and choose you before they ever walk in.</p><span class="svc-cta">Discover more<svg class="transition-transform group-hover:translate-x-1" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></div></a></li><li data-reveal style="--i:1"><a href="/services/event-coverage" class="svc-card group relative block overflow-hidden rounded-2xl svc-card--tall"><img src="/img/work/lunar-new-year/lunar-new-year-03.webp" alt="Event coverage by STUDiiO in Las Vegas" width="1200" height="900" loading="eager" decoding="async" class="svc-img h-full w-full object-cover"><!-- the gradient that animates up --><span class="svc-veil" aria-hidden="true"></span><div class="svc-body"><h3 class="font-display text-2xl font-bold text-white sm:text-3xl">Event coverage</h3><p class="mt-2 max-w-lg text-sm text-white/85 sm:text-base" style="line-height: var(--leading-relaxed);">Las Vegas event videography that captures the energy of the room, high energy highlight recaps with the moments that mattered.</p><span class="svc-cta">Discover more<svg class="transition-transform group-hover:translate-x-1" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></div></a></li><li data-reveal style="--i:2"><a href="/services/social-media-retainers" class="svc-card group relative block overflow-hidden rounded-2xl svc-card--tall"><img src="/img/work/coffee-bean-paws/coffee-bean-paws-02.webp" alt="Social media retainers by STUDiiO in Las Vegas" width="1200" height="900" loading="lazy" decoding="async" class="svc-img h-full w-full object-cover"><!-- the gradient that animates up --><span class="svc-veil" aria-hidden="true"></span><div class="svc-body"><h3 class="font-display text-2xl font-bold text-white sm:text-3xl">Social media retainers</h3><p class="mt-2 max-w-lg text-sm text-white/85 sm:text-base" style="line-height: var(--leading-relaxed);">Short-form vertical content built to keep your Las Vegas business in the feed, cut for the platforms your customers actually scroll.</p><span class="svc-cta">Discover more<svg class="transition-transform group-hover:translate-x-1" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></div></a></li><li class="lg:col-span-2" data-reveal style="--i:3"><a href="/services/photography" class="svc-card group relative block overflow-hidden rounded-2xl svc-card--wide"><img src="/img/work/sushi-mon/sushi-mon-02.webp" alt="Photography by STUDiiO in Las Vegas" width="1200" height="900" loading="lazy" decoding="async" class="svc-img h-full w-full object-cover"><!-- the gradient that animates up --><span class="svc-veil" aria-hidden="true"></span><div class="svc-body"><h3 class="font-display text-2xl font-bold text-white sm:text-3xl">Photography</h3><p class="mt-2 max-w-lg text-sm text-white/85 sm:text-base" style="line-height: var(--leading-relaxed);">Las Vegas photography that makes your business look as good as it actually is, product, event, and portrait work with a cinematic eye.</p><span class="svc-cta">Discover more<svg class="transition-transform group-hover:translate-x-1" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></div></a></li></ul></div></section><section class="bg-bg"><div class="mx-auto max-w-container px-[var(--gutter)] py-[var(--section-y)]"><div class="flex flex-wrap items-end justify-between gap-6"><div class="max-w-2xl"><div class="flex items-center gap-3 text-primary" data-reveal><span class="font-body text-sm font-medium tabular-nums tracking-[0.25em]" style="font-variant-numeric: tabular-nums;">00:03</span><span class="h-px w-10 bg-primary/50" aria-hidden="true"></span><span class="text-xs font-medium uppercase tracking-[0.22em] text-muted">Ways to work together</span></div><h2 class="mt-5 font-display font-bold uppercase tracking-tight text-text" style="font-size: var(--text-section); line-height: var(--leading-tight);" data-reveal>A package for every stage</h2><p class="mt-4 max-w-xl text-muted" data-reveal>Clear scope, a starting price, and the same filmmaker on every one.</p></div><a href="/packages" class="accent-glow hidden rounded-sm border border-border px-5 py-3 text-sm font-medium text-text transition-colors hover:border-accent sm:inline-flex" data-reveal>See full pricing</a></div><div class="mt-12 grid gap-5 lg:grid-cols-3"><a href="/packages" data-reveal style="--i:0" class="pulse-glow-hover group relative flex flex-col rounded-md border p-7 transition-colors border-border bg-surface hover:border-accent"><p class="font-display text-xl font-bold uppercase tracking-tight text-text">The Foundation</p><p class="mt-2 text-sm text-muted" style="line-height: var(--leading-relaxed);">One cinematic commercial, produced end to end with the filmmaker.</p><p class="mt-5 font-display text-3xl font-extrabold text-text"><span class="align-middle text-sm font-semibold uppercase tracking-wide text-muted">From </span>$1,800</p><ul class="mt-5 space-y-2 text-sm text-muted"><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>A cinematic commercial, up to 90 seconds</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>Intentional lighting for a premium, considered look</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>A professional color grade</span></li></ul><span class="mt-6 inline-flex items-center gap-1.5 text-sm font-semibold text-accent">See what is included<svg class="transition-transform group-hover:translate-x-1" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></a><a href="/packages" data-reveal style="--i:1" class="pulse-glow-hover group relative flex flex-col rounded-md border p-7 transition-colors border-accent bg-surface"><span class="absolute -top-3 left-7 rounded-pill bg-accent px-3 py-1 text-xs font-semibold uppercase tracking-wide text-accent-fg">Most popular</span><p class="font-display text-xl font-bold uppercase tracking-tight text-text">The Signature</p><p class="mt-2 text-sm text-muted" style="line-height: var(--leading-relaxed);">Everything in the Foundation, plus social cuts, photos, and a full crew.</p><p class="mt-5 font-display text-3xl font-extrabold text-text"><span class="align-middle text-sm font-semibold uppercase tracking-wide text-muted">From </span>$3,900</p><ul class="mt-5 space-y-2 text-sm text-muted"><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>Everything in the Foundation</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>A vertical social cut built to stop the scroll</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>15 high resolution brand photos from the same production</span></li></ul><span class="mt-6 inline-flex items-center gap-1.5 text-sm font-semibold text-accent">See what is included<svg class="transition-transform group-hover:translate-x-1" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></a><a href="/packages" data-reveal style="--i:2" class="pulse-glow-hover group relative flex flex-col rounded-md border p-7 transition-colors border-border bg-surface hover:border-accent"><p class="font-display text-xl font-bold uppercase tracking-tight text-text">The Flagship</p><p class="mt-2 text-sm text-muted" style="line-height: var(--leading-relaxed);">A documentary grade flagship film with the full production treatment.</p><p class="mt-5 font-display text-3xl font-extrabold text-text"><span class="align-middle text-sm font-semibold uppercase tracking-wide text-muted">From </span>$8,500</p><ul class="mt-5 space-y-2 text-sm text-muted"><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>Everything in the Signature</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>A flagship commercial with documentary grade storytelling</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>3 vertical social cuts</span></li></ul><span class="mt-6 inline-flex items-center gap-1.5 text-sm font-semibold text-accent">See what is included<svg class="transition-transform group-hover:translate-x-1" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></a></div><div class="mt-8 flex flex-wrap items-center gap-4" data-reveal><a href="/contact" class="accent-glow inline-flex items-center gap-2 rounded-sm bg-accent px-6 py-3 text-sm font-semibold text-accent-fg transition-colors hover:bg-accent/90">Book a call<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="/packages" class="inline-flex items-center gap-2 text-sm font-medium text-text hover:text-accent sm:hidden">See full pricing</a></div><!-- Custom scope band: the off-menu option, so nobody bounces because no tier fits --><div class="mt-12 flex flex-col gap-5 rounded-md border border-border bg-surface p-7 sm:flex-row sm:items-center sm:justify-between sm:gap-8" data-reveal><div class="max-w-xl"><p class="font-display text-lg font-bold uppercase tracking-tight text-text sm:text-xl">Need something more <span class="ink">specific</span>?</p><p class="mt-2 text-sm text-muted" style="line-height: var(--leading-relaxed);">Bigger scope, ongoing content, or something no one has done in your space. We build the package your business actually needs.</p></div><div class="flex shrink-0 flex-col items-start gap-2"><a href="/contact" class="accent-glow inline-flex items-center gap-2 whitespace-nowrap rounded-sm bg-accent px-5 py-3 text-sm font-semibold text-accent-fg transition-colors hover:bg-accent/90">Build a custom package<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="/faq" class="text-xs text-muted transition-colors hover:text-accent">Have a question first? Read the FAQ</a></div></div></div></section><section class="bg-bg"><div class="mx-auto max-w-container px-[var(--gutter)] py-[var(--section-y)]"><div class="max-w-2xl"><div class="flex items-center gap-3 text-primary" data-reveal><span class="font-body text-sm font-medium tabular-nums tracking-[0.25em]" style="font-variant-numeric: tabular-nums;">00:04</span><span class="h-px w-10 bg-primary/50" aria-hidden="true"></span><span class="text-xs font-medium uppercase tracking-[0.22em] text-muted">The process</span></div><h2 class="mt-5 font-display font-bold uppercase tracking-tight text-text" style="font-size: var(--text-section); line-height: var(--leading-tight);" data-reveal>How it <span class="relative inline-block">works<span aria-hidden="true" class="spray-mark pointer-events-none block absolute -bottom-[0.3em] -left-[0.1em] -right-[0.1em] h-[0.5em]" style="--spray-src:url("/img/spray/lightning.webp");"></span></span></h2><p class="mt-4 max-w-xl text-muted" data-reveal>Six steps, no mystery. You know what happens and when, start to Final Cut.</p></div><ol class="hiw mt-12"><li class="hiw-row" style="--i:0"><article class="hiw-card" data-reveal style="--i:0"><img class="hiw-shot" src="/img/work/about-portrait.webp" alt="" width="1500" height="776" loading="lazy" decoding="async"><span class="hiw-veil" aria-hidden="true"></span><img class="hiw-glyph" src="/img/icons/tl-phone.webp" alt="" width="259" height="256" loading="lazy" decoding="async" aria-hidden="true"><div class="hiw-inner"><p class="hiw-n" aria-hidden="true">1</p><div class="hiw-copy"><h3 class="hiw-title">Book a call</h3><p class="hiw-body">A meeting about the business and needs.</p><a href="/contact" class="hiw-cta">Book a call<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div></article><span aria-hidden="true" class="spray-mark pointer-events-none block hiw-arc" style="--spray-src:url("/img/spray/proc-arc.webp");"></span></li><li class="hiw-row" style="--i:1"><article class="hiw-card" data-reveal style="--i:1"><img class="hiw-shot" src="/img/steps/step-2-brief.webp" alt="" width="898" height="210" loading="lazy" decoding="async"><span class="hiw-veil" aria-hidden="true"></span><div class="hiw-inner"><p class="hiw-n" aria-hidden="true">2</p><div class="hiw-copy"><h3 class="hiw-title">What you want</h3><p class="hiw-body">Pin down the goal, story, and visuals.</p></div></div></article><span aria-hidden="true" class="spray-mark pointer-events-none block hiw-arc" style="--spray-src:url("/img/spray/proc-arc.webp");"></span></li><li class="hiw-row" style="--i:2"><article class="hiw-card" data-reveal style="--i:2"><img class="hiw-shot" src="/img/steps/step-3-scope.webp" alt="" width="902" height="211" loading="lazy" decoding="async"><span class="hiw-veil" aria-hidden="true"></span><div class="hiw-inner"><p class="hiw-n" aria-hidden="true">3</p><div class="hiw-copy"><h3 class="hiw-title">Concept & scope</h3><p class="hiw-body">You sign off before anything gets shot.</p></div></div></article><span aria-hidden="true" class="spray-mark pointer-events-none block hiw-arc" style="--spray-src:url("/img/spray/proc-arc.webp");"></span></li><li class="hiw-row" style="--i:3"><article class="hiw-card" data-reveal style="--i:3"><img class="hiw-shot" src="/img/steps/step-4-shoot.webp" alt="" width="901" height="210" loading="lazy" decoding="async"><span class="hiw-veil" aria-hidden="true"></span><div class="hiw-inner"><p class="hiw-n" aria-hidden="true">4</p><div class="hiw-copy"><h3 class="hiw-title">We shoot</h3><p class="hiw-body">Production day commences.</p></div></div></article><span aria-hidden="true" class="spray-mark pointer-events-none block hiw-arc" style="--spray-src:url("/img/spray/proc-arc.webp");"></span></li><li class="hiw-row" style="--i:4"><article class="hiw-card" data-reveal style="--i:4"><img class="hiw-shot" src="/img/steps/step-5-delivery.webp" alt="" width="905" height="207" loading="lazy" decoding="async"><span class="hiw-veil" aria-hidden="true"></span><div class="hiw-inner"><p class="hiw-n" aria-hidden="true">5</p><div class="hiw-copy"><h3 class="hiw-title">Delivery</h3><p class="hiw-body">You get the deliverables within 15 business days.</p></div></div></article><span aria-hidden="true" class="spray-mark pointer-events-none block hiw-arc" style="--spray-src:url("/img/spray/proc-arc.webp");"></span></li><li class="hiw-row" style="--i:5"><article class="hiw-card" data-reveal style="--i:5"><img class="hiw-shot" src="/img/steps/step-6-launch.webp" alt="" width="900" height="208" loading="lazy" decoding="async"><span class="hiw-veil" aria-hidden="true"></span><div class="hiw-inner"><p class="hiw-n" aria-hidden="true">6</p><div class="hiw-copy"><h3 class="hiw-title">Launch</h3><p class="hiw-body">Learn how to use the deliverables to the max.</p></div></div></article></li></ol></div></section><section class="bg-bg"><div class="mx-auto max-w-container px-[var(--gutter)] py-[var(--section-y)]"><div class="flex flex-wrap items-end justify-between gap-4"><div><div class="flex items-center gap-3 text-primary" data-reveal><span class="font-body text-sm font-medium tabular-nums tracking-[0.25em]" style="font-variant-numeric: tabular-nums;">00:05</span><span class="h-px w-10 bg-primary/50" aria-hidden="true"></span><span class="text-xs font-medium uppercase tracking-[0.22em] text-muted">Featured work</span></div><h2 class="mt-5 font-display font-bold uppercase tracking-tight text-text" style="font-size: var(--text-section); line-height: var(--leading-tight);" data-reveal>Recent films</h2></div><a href="/video" class="inline-flex items-center gap-2 text-sm font-medium text-text hover:text-accent" data-reveal>All video work<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div><div class="mt-10 grid gap-5 sm:grid-cols-2"><a href="/video" class="group relative block overflow-hidden rounded-md border border-border" data-reveal style="--i:0"><div class="img-zoom aspect-video overflow-hidden"><img src="/video/auric-poster.jpg" alt="Auric Symphony Park, luxury lifestyle commercial" width="1280" height="720" loading="lazy" class="h-full w-full object-cover"></div><div class="pointer-events-none absolute inset-0 bg-gradient-to-t from-black/80 via-black/10 to-transparent"></div><div class="absolute inset-x-0 bottom-0 flex items-end justify-between gap-3 p-5"><div><p class="text-xs font-semibold uppercase tracking-[0.18em] text-white/70">Commercial</p><p class="mt-1 font-display text-xl font-bold uppercase tracking-tight text-white">Auric Symphony Park</p></div><span class="inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-accent text-accent-fg transition-transform group-hover:scale-110"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 5v14l11-7z"></path></svg></span></div></a><a href="/video" class="group relative block overflow-hidden rounded-md border border-border" data-reveal style="--i:1"><div class="img-zoom aspect-video overflow-hidden"><img src="/video/morning-groove-poster.jpg" alt="The Morning Groove, brand campaign" width="1280" height="720" loading="lazy" class="h-full w-full object-cover"></div><div class="pointer-events-none absolute inset-0 bg-gradient-to-t from-black/80 via-black/10 to-transparent"></div><div class="absolute inset-x-0 bottom-0 flex items-end justify-between gap-3 p-5"><div><p class="text-xs font-semibold uppercase tracking-[0.18em] text-white/70">Commercial</p><p class="mt-1 font-display text-xl font-bold uppercase tracking-tight text-white">The Morning Groove</p></div><span class="inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-accent text-accent-fg transition-transform group-hover:scale-110"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 5v14l11-7z"></path></svg></span></div></a><a href="/video" class="group relative block overflow-hidden rounded-md border border-border" data-reveal style="--i:2"><div class="img-zoom aspect-video overflow-hidden"><img src="/video/nanas-poster.jpg" alt="Nana's Green Tea, grand opening highlight" width="1280" height="720" loading="lazy" class="h-full w-full object-cover"></div><div class="pointer-events-none absolute inset-0 bg-gradient-to-t from-black/80 via-black/10 to-transparent"></div><div class="absolute inset-x-0 bottom-0 flex items-end justify-between gap-3 p-5"><div><p class="text-xs font-semibold uppercase tracking-[0.18em] text-white/70">Event Coverage</p><p class="mt-1 font-display text-xl font-bold uppercase tracking-tight text-white">Nana's Green Tea</p></div><span class="inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-accent text-accent-fg transition-transform group-hover:scale-110"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 5v14l11-7z"></path></svg></span></div></a><a href="/video" class="group relative block overflow-hidden rounded-md border border-border" data-reveal style="--i:3"><div class="img-zoom aspect-video overflow-hidden"><img src="/video/lunar-poster.jpg" alt="Lunar New Year Festival, festival film" width="1280" height="720" loading="lazy" class="h-full w-full object-cover"></div><div class="pointer-events-none absolute inset-0 bg-gradient-to-t from-black/80 via-black/10 to-transparent"></div><div class="absolute inset-x-0 bottom-0 flex items-end justify-between gap-3 p-5"><div><p class="text-xs font-semibold uppercase tracking-[0.18em] text-white/70">Event Coverage</p><p class="mt-1 font-display text-xl font-bold uppercase tracking-tight text-white">Lunar New Year Festival</p></div><span class="inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-full bg-accent text-accent-fg transition-transform group-hover:scale-110"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 5v14l11-7z"></path></svg></span></div></a></div><!-- Photography subsection --><div class="mt-14 flex flex-wrap items-end justify-between gap-4"><h3 class="font-display text-[clamp(1.4rem,3vw,2rem)] font-bold uppercase tracking-tight text-text" data-reveal>Photography</h3><a href="/photography" class="inline-flex items-center gap-2 text-sm font-medium text-text hover:text-accent" data-reveal>Full portfolio<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div><!-- V2: ALBUMS in a static grid like Recent Films, each one clicked into. The sideways
auto-scroller is gone, and these are albums rather than loose frames, so a click
opens that set instead of dumping everyone on the same portfolio page. --><!-- Eight business and event sets, so the column count stays even at every size (2 or 4)
and no row is left with orphans. --><ul class="mt-8 grid grid-cols-2 gap-4 lg:grid-cols-4"><li data-reveal style="--i:0"><a href="/photography/wabz" class="img-zoom group block overflow-hidden rounded-md border border-border bg-surface" aria-label="Wearable ART by Zejabet, brand album"><img src="/img/work/wabz/wabz-01.webp" alt="Wearable ART by Zejabet, brand photography by Micah David" width="900" height="1125" loading="lazy" decoding="async" class="aspect-[4/5] w-full object-cover"><span class="flex items-center justify-between gap-2 px-3 py-2.5"><span class="min-w-0"><span class="block truncate font-display text-sm font-bold text-text">Wearable ART by Zejabet</span><span class="block text-xs uppercase tracking-[0.16em] text-muted">Brand</span></span><span class="shrink-0 text-xs text-muted">49</span></span></a></li><li data-reveal style="--i:1"><a href="/photography/nijel" class="img-zoom group block overflow-hidden rounded-md border border-border bg-surface" aria-label="Nijel Murray x Coach, brand album"><img src="/img/work/nijel/nijel-01.webp" alt="Nijel Murray x Coach, brand photography by Micah David" width="900" height="1125" loading="lazy" decoding="async" class="aspect-[4/5] w-full object-cover"><span class="flex items-center justify-between gap-2 px-3 py-2.5"><span class="min-w-0"><span class="block truncate font-display text-sm font-bold text-text">Nijel Murray x Coach</span><span class="block text-xs uppercase tracking-[0.16em] text-muted">Brand</span></span><span class="shrink-0 text-xs text-muted">18</span></span></a></li><li data-reveal style="--i:2"><a href="/photography/aces-fitness" class="img-zoom group block overflow-hidden rounded-md border border-border bg-surface" aria-label="Aces Fitness, brand album"><img src="/img/work/aces-fitness/aces-fitness-01.webp" alt="Aces Fitness, brand photography by Micah David" width="900" height="1125" loading="lazy" decoding="async" class="aspect-[4/5] w-full object-cover"><span class="flex items-center justify-between gap-2 px-3 py-2.5"><span class="min-w-0"><span class="block truncate font-display text-sm font-bold text-text">Aces Fitness</span><span class="block text-xs uppercase tracking-[0.16em] text-muted">Brand</span></span><span class="shrink-0 text-xs text-muted">17</span></span></a></li><li data-reveal style="--i:3"><a href="/photography/sushi-mon" class="img-zoom group block overflow-hidden rounded-md border border-border bg-surface" aria-label="Sushi Mon, brand album"><img src="/img/work/sushi-mon/sushi-mon-01.webp" alt="Sushi Mon, brand photography by Micah David" width="900" height="1125" loading="lazy" decoding="async" class="aspect-[4/5] w-full object-cover"><span class="flex items-center justify-between gap-2 px-3 py-2.5"><span class="min-w-0"><span class="block truncate font-display text-sm font-bold text-text">Sushi Mon</span><span class="block text-xs uppercase tracking-[0.16em] text-muted">Brand</span></span><span class="shrink-0 text-xs text-muted">21</span></span></a></li><li data-reveal style="--i:4"><a href="/photography/taste-of-heaven" class="img-zoom group block overflow-hidden rounded-md border border-border bg-surface" aria-label="Taste of Heaven, brand album"><img src="/img/work/taste-of-heaven/taste-of-heaven-01.webp" alt="Taste of Heaven, brand photography by Micah David" width="900" height="1125" loading="lazy" decoding="async" class="aspect-[4/5] w-full object-cover"><span class="flex items-center justify-between gap-2 px-3 py-2.5"><span class="min-w-0"><span class="block truncate font-display text-sm font-bold text-text">Taste of Heaven</span><span class="block text-xs uppercase tracking-[0.16em] text-muted">Brand</span></span><span class="shrink-0 text-xs text-muted">16</span></span></a></li><li data-reveal style="--i:5"><a href="/photography/nanas-green-tea" class="img-zoom group block overflow-hidden rounded-md border border-border bg-surface" aria-label="Nana's Green Tea, brand album"><img src="/img/work/nanas-green-tea/nanas-green-tea-01.webp" alt="Nana's Green Tea, brand photography by Micah David" width="900" height="1125" loading="lazy" decoding="async" class="aspect-[4/5] w-full object-cover"><span class="flex items-center justify-between gap-2 px-3 py-2.5"><span class="min-w-0"><span class="block truncate font-display text-sm font-bold text-text">Nana's Green Tea</span><span class="block text-xs uppercase tracking-[0.16em] text-muted">Brand</span></span><span class="shrink-0 text-xs text-muted">35</span></span></a></li><li data-reveal style="--i:6"><a href="/photography/coffee-bean-paws" class="img-zoom group block overflow-hidden rounded-md border border-border bg-surface" aria-label="Coffee Bean & Paws Patrol, brand album"><img src="/img/work/coffee-bean-paws/coffee-bean-paws-01.webp" alt="Coffee Bean & Paws Patrol, brand photography by Micah David" width="900" height="1125" loading="lazy" decoding="async" class="aspect-[4/5] w-full object-cover"><span class="flex items-center justify-between gap-2 px-3 py-2.5"><span class="min-w-0"><span class="block truncate font-display text-sm font-bold text-text">Coffee Bean & Paws Patrol</span><span class="block text-xs uppercase tracking-[0.16em] text-muted">Brand</span></span><span class="shrink-0 text-xs text-muted">16</span></span></a></li><li data-reveal style="--i:7"><a href="/photography/lunar-new-year" class="img-zoom group block overflow-hidden rounded-md border border-border bg-surface" aria-label="Lunar New Year Festival, event album"><img src="/img/work/lunar-new-year/lunar-new-year-01.webp" alt="Lunar New Year Festival, event photography by Micah David" width="900" height="1125" loading="lazy" decoding="async" class="aspect-[4/5] w-full object-cover"><span class="flex items-center justify-between gap-2 px-3 py-2.5"><span class="min-w-0"><span class="block truncate font-display text-sm font-bold text-text">Lunar New Year Festival</span><span class="block text-xs uppercase tracking-[0.16em] text-muted">Event</span></span><span class="shrink-0 text-xs text-muted">17</span></span></a></li></ul></div></section><section class="bg-bg"><div class="mx-auto max-w-container px-[var(--gutter)] py-[var(--section-y)]"><div class="framed-shot paper-band paper-texture overflow-hidden border border-border px-[clamp(1.25rem,4vw,3rem)] py-[clamp(2.5rem,5vw,4rem)]"><div class="grid gap-8 lg:grid-cols-[0.95fr_1.05fr] lg:items-stretch"><div class="content-shadow rounded-md border border-border bg-bg p-7 sm:p-9"><div class="flex items-center gap-3 text-text" data-reveal><span class="text-sm font-medium tabular-nums tracking-[0.25em]" style="font-variant-numeric: tabular-nums;">00:06</span><span class="h-px w-10 bg-text/40"></span><span class="text-xs font-medium uppercase tracking-[0.22em] text-muted">Why work with us directly</span></div><h2 class="mt-5 font-display text-[clamp(1.9rem,4vw,2.9rem)] font-bold uppercase leading-[1.04] tracking-tight text-text" data-reveal>Most agencies sell scale. We make one story, <span class="ink">done well.</span></h2><p class="mt-5 max-w-lg text-muted" style="line-height: var(--leading-relaxed);" data-reveal>Hire a big production company and your project becomes one job on a board. Here you <span class="hl-marker hl-strong"><span>work directly with the filmmaker</span></span>, from the first call through the final grade. Fewer layers, a clearer story, a film you are proud to put your name on.</p><a href="/about" class="mt-6 inline-flex items-center gap-2 font-medium text-text underline-offset-4 hover:underline" data-reveal>More about the studio<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div><!-- V2: no boxes around the stats. A thrown ring goes around each NUMBER only, so the
label sits outside the paint instead of being crossed out by it. --><div class="grid grid-cols-2 items-start gap-x-8 gap-y-12 self-center sm:gap-x-14 lg:justify-items-center lg:pl-10" data-reveal><div><span class="relative isolate inline-block"><span aria-hidden="true" class="spray-mark pointer-events-none block absolute -inset-x-7 -inset-y-5 -z-10" style="--spray-src:url("/img/spray/proc-ring.webp");--spray-opacity:0.9;"></span><span class="block font-display text-4xl font-extrabold tracking-tight text-text sm:text-5xl">1,000+</span></span><p class="mt-5 text-sm text-muted">Times behind the camera</p></div><div><span class="relative isolate inline-block"><span aria-hidden="true" class="spray-mark pointer-events-none block absolute -inset-x-7 -inset-y-5 -z-10" style="--spray-src:url("/img/spray/proc-ring.webp");--spray-opacity:0.9;"></span><span class="block font-display text-4xl font-extrabold tracking-tight text-text sm:text-5xl">850+</span></span><p class="mt-5 text-sm text-muted">Events captured</p></div><div><span class="relative isolate inline-block"><span aria-hidden="true" class="spray-mark pointer-events-none block absolute -inset-x-7 -inset-y-5 -z-10" style="--spray-src:url("/img/spray/proc-ring.webp");--spray-opacity:0.9;"></span><span class="block font-display text-4xl font-extrabold tracking-tight text-text sm:text-5xl">130+</span></span><p class="mt-5 text-sm text-muted">Pieces lit, directed and delivered</p></div><div><span class="relative isolate inline-block"><span aria-hidden="true" class="spray-mark pointer-events-none block absolute -inset-x-7 -inset-y-5 -z-10" style="--spray-src:url("/img/spray/proc-ring.webp");--spray-opacity:0.9;"></span><span class="block font-display text-4xl font-extrabold tracking-tight text-text sm:text-5xl">5.0</span></span><p class="mt-5 text-sm text-muted">Rating on Google</p><p class="mt-1 text-xs font-medium text-accent" aria-label="5.0 Rating on Google, 15+ five-star reviews"><span aria-hidden="true">★★★★★</span> 15+ five-star reviews</p></div></div></div></div></div></section><section class="overflow-hidden bg-bg"><div class="mx-auto max-w-container px-[var(--gutter)] pt-[var(--section-y)]"><div class="flex flex-col items-center gap-3 text-center"><p class="text-2xl tracking-[0.3em] text-accent" aria-hidden="true">★★★★★</p><h2 class="font-display font-bold uppercase tracking-tight text-text" style="font-size: var(--text-section); line-height: var(--leading-tight);" data-reveal>5.0 on Google</h2><p class="max-w-xl text-muted" data-reveal>15+ five-star reviews from Las Vegas businesses and families.</p></div></div><!-- Marquee. aria-hidden on the duplicated half so screen readers read each review once. --><div class="reviews-marquee mt-12 py-2" data-reviews><ul class="reviews-track flex w-max items-stretch gap-5 px-[var(--gutter)]"><li class="w-[min(86vw,26rem)] shrink-0"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">Micah is genuinely one of a kind. His work is truly inspiring and amazingly talented. He puts everything together so beautifully. Love the time he worked on the Auric Symphony Park community and the great impression he made on the project.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/lonala-ron.webp" alt="Lonala Ron" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Lonala Ron</span><span class="block text-xs text-muted">Auric Symphony Park</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">Working with Micah was a great experience. He guided me all the way through his production process and was very accommodating. Not once did I feel unsupported. On the day of our shoot he was flexible with our time limitations and very professional. He made everything stress free and the final product exceeded our expectations. Looking forward to working with him again for our next event.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/the-vaughnnn.webp" alt="The Vaughnnn" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">The Vaughnnn</span><span class="block text-xs text-muted">Event film</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">I had an amazing experience working with Micah. He drove about 40 minutes to meet us at a unique desert location that he recommended, and it ended up being the perfect backdrop for our family photos. Throughout the entire shoot, he was incredibly professional, attentive, and easy to work with.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/camiren-uqdah.webp" alt="Camiren Uqdah" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Camiren Uqdah</span><span class="block text-xs text-muted">Family photos</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">I have used Micah for both my maternity pictures and now baby, and I absolutely love them. I appreciate how patient Micah is and how open and willing he is to letting me do my own poses. Both times he has given me my pictures in a quick time frame, which I like as well. Will definitely continue to use in the future.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/christina-rodriguez.webp" alt="Christina Rodriguez" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Christina Rodriguez</span><span class="block text-xs text-muted">Maternity and newborn</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">Micah was very professional and had a wide knowledge base. He understood and executed exactly what we asked for as far as the number of people in our group, terrain, and overall aesthetic for our photographs.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/kimberly-hogan.webp" alt="Kimberly Hogan" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Kimberly Hogan</span><span class="block text-xs text-muted">Family portraits</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">Micah did very well handling our wedding. He has great direction and vision for capturing the moment.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/sean-williams.webp" alt="Sean Williams" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Sean Williams</span><span class="block text-xs text-muted">Wedding film</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0" aria-hidden="true"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">Micah is genuinely one of a kind. His work is truly inspiring and amazingly talented. He puts everything together so beautifully. Love the time he worked on the Auric Symphony Park community and the great impression he made on the project.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/lonala-ron.webp" alt="Lonala Ron" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Lonala Ron</span><span class="block text-xs text-muted">Auric Symphony Park</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0" aria-hidden="true"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">Working with Micah was a great experience. He guided me all the way through his production process and was very accommodating. Not once did I feel unsupported. On the day of our shoot he was flexible with our time limitations and very professional. He made everything stress free and the final product exceeded our expectations. Looking forward to working with him again for our next event.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/the-vaughnnn.webp" alt="The Vaughnnn" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">The Vaughnnn</span><span class="block text-xs text-muted">Event film</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0" aria-hidden="true"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">I had an amazing experience working with Micah. He drove about 40 minutes to meet us at a unique desert location that he recommended, and it ended up being the perfect backdrop for our family photos. Throughout the entire shoot, he was incredibly professional, attentive, and easy to work with.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/camiren-uqdah.webp" alt="Camiren Uqdah" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Camiren Uqdah</span><span class="block text-xs text-muted">Family photos</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0" aria-hidden="true"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">I have used Micah for both my maternity pictures and now baby, and I absolutely love them. I appreciate how patient Micah is and how open and willing he is to letting me do my own poses. Both times he has given me my pictures in a quick time frame, which I like as well. Will definitely continue to use in the future.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/christina-rodriguez.webp" alt="Christina Rodriguez" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Christina Rodriguez</span><span class="block text-xs text-muted">Maternity and newborn</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0" aria-hidden="true"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">Micah was very professional and had a wide knowledge base. He understood and executed exactly what we asked for as far as the number of people in our group, terrain, and overall aesthetic for our photographs.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/kimberly-hogan.webp" alt="Kimberly Hogan" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Kimberly Hogan</span><span class="block text-xs text-muted">Family portraits</span></span></figcaption></figure></li><li class="w-[min(86vw,26rem)] shrink-0" aria-hidden="true"><figure class="relative isolate flex h-full flex-col overflow-hidden rounded-lg border border-border bg-surface p-6"><!-- faint brand-colour quote mark, sitting behind the text --><span aria-hidden="true" class="pointer-events-none absolute -right-2 -top-8 -z-10 select-none font-display text-[7rem] leading-none text-accent/10">”</span><div class="flex items-center justify-between gap-3"><div class="flex gap-0.5 text-accent" aria-hidden="true"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2l2.9 6.3 6.9.7-5.1 4.6 1.4 6.8L12 17.8 5.9 20.4l1.4-6.8L2.2 9l6.9-.7z"></path></svg></div><!-- Google G --><svg width="16" height="16" viewBox="0 0 48 48" aria-label="Google review" role="img" class="shrink-0"><path fill="#EA4335" d="M24 9.5c3.5 0 6.6 1.2 9 3.6l6.7-6.7C35.6 2.6 30.2 0 24 0 14.6 0 6.5 5.4 2.6 13.2l7.8 6.1C12.3 13.2 17.7 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.1 24.6c0-1.6-.1-3.1-.4-4.6H24v9.1h12.4c-.5 2.9-2.2 5.4-4.7 7l7.6 5.9c4.4-4.1 6.8-10.900 6.8-17.4z"></path><path fill="#FBBC05" d="M10.4 28.7c-.5-1.4-.8-2.9-.8-4.7s.3-3.3.8-4.7l-7.8-6.1C.9 16.5 0 20.1 0 24s.9 7.5 2.6 10.8l7.8-6.1z"></path><path fill="#34A853" d="M24 48c6.2 0 11.5-2 15.3-5.5l-7.6-5.9c-2.1 1.4-4.8 2.3-7.7 2.3-6.3 0-11.7-3.7-13.6-9.2l-7.8 6.1C6.5 42.6 14.6 48 24 48z"></path></svg></div><blockquote class="mt-4 flex-1 text-sm text-text" style="line-height: var(--leading-relaxed);">Micah did very well handling our wedding. He has great direction and vision for capturing the moment.</blockquote><figcaption class="mt-5 flex items-center gap-3 border-t border-border pt-4"><img src="/img/reviews/sean-williams.webp" alt="Sean Williams" width="44" height="44" loading="lazy" class="h-11 w-11 rounded-full object-cover"><span><span class="block font-display text-sm font-bold text-text">Sean Williams</span><span class="block text-xs text-muted">Wedding film</span></span></figcaption></figure></li></ul></div><div class="mx-auto flex max-w-container justify-center px-[var(--gutter)] pb-[var(--section-y)] pt-12" data-reveal><a href="/contact" class="accent-glow inline-flex items-center gap-2 rounded-sm bg-accent px-6 py-3 text-sm font-semibold text-accent-fg transition-colors hover:bg-accent/90">Book a call<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></section><section class="bg-bg"><div class="mx-auto max-w-container px-[var(--gutter)] py-[var(--section-y)]"><div class="framed-shot dark-region relative isolate flex min-h-[42vh] items-center overflow-hidden"><div class="absolute inset-0 -z-10 overflow-hidden"><img src="/img/photos/p9.webp" alt="" class="absolute inset-x-0 top-[-16%] h-[132%] w-full object-cover" data-parallax-bg data-parallax-speed="0.16" width="1200" height="1800" loading="lazy" decoding="async"><div class="absolute inset-0 bg-[rgb(8_8_11)]/78"></div><div class="absolute inset-0 bg-gradient-to-t from-bg via-bg/52 to-bg/68"></div></div><div class="mx-auto w-full max-w-2xl px-[clamp(1.25rem,4vw,3rem)] py-[clamp(2.75rem,6vw,4.5rem)] text-center"><h2 class="font-display font-bold tracking-tight text-white" style="font-size: var(--text-section); line-height: var(--leading-tight);" data-reveal>Let's make people choose you first.</h2><p class="mx-auto mt-5 max-w-xl text-white/80" style="line-height: var(--leading-relaxed);" data-reveal>Book a call and we will map the one film your business actually needs, then build it with you.</p><div class="mt-8 flex flex-wrap items-center justify-center gap-4" data-reveal><a href="/contact" class="accent-glow inline-flex items-center gap-2 rounded-sm bg-accent px-7 py-3.5 font-semibold text-accent-fg transition-colors hover:bg-accent/90">Book a call<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="/packages" class="rounded-sm border border-white/35 px-7 py-3.5 font-medium text-white transition-colors hover:bg-white/10">See packages</a></div></div></div></div></section></main><footer class="dark-region relative overflow-hidden border-t border-border bg-bg"><div class="mx-auto max-w-container px-[var(--gutter)] pt-16 pb-8"><div class="grid gap-12 lg:grid-cols-[1.5fr_1fr]"><!-- End-credits: brand wordmark + founder signature --><div><a href="/" aria-label="STUDiiO home" class="inline-block"><span class="wm text-5xl sm:text-6xl lg:text-7xl" aria-label="STUDiiO"><span class="sr-only">STUDiiO</span><span class="wm-art"><img class="wm-img" src="/img/logos/studio-clean.webp" alt="" aria-hidden="true" width="962" height="200"><span class="wm-i wm-i--a" aria-hidden="true"><i class="wm-stem"></i><i class="wm-dot"></i></span><span class="wm-i wm-i--b" aria-hidden="true"><i class="wm-stem"></i><i class="wm-dot"></i></span></span></span><!-- is:global because the reduced-motion guard keys off html.a11y-no-motion, which lives outside
this component. Every class is wm-* prefixed, so nothing leaks. --></a><p class="mt-7 max-w-md text-muted" style="line-height: var(--leading-relaxed);">A founder led film studio in Las Vegas, run directly by Micah David. Cinematic brand video and photography, made with you.</p><div class="mt-7 flex items-center gap-4"><img src="/img/logo-mark.webp" alt="Micah David signature" width="1278" height="428" class="h-11 w-auto opacity-70"><span class="text-xs uppercase tracking-[0.2em] text-muted">Directed by Micah David</span></div><a href="/contact" class="accent-glow mt-8 inline-flex items-center gap-2 rounded-sm bg-accent px-5 py-2.5 text-sm font-semibold text-accent-fg transition-colors hover:bg-accent/90">Book a call<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div><!-- Credits columns --><nav aria-label="Footer" class="grid grid-cols-2 gap-8 sm:grid-cols-3"><div><p class="text-xs font-medium uppercase tracking-[0.2em] text-muted">Work</p><ul class="mt-4 space-y-2.5"><li><a href="/video" class="text-sm text-text transition-colors hover:text-primary">Video portfolio</a></li><li><a href="/photography" class="text-sm text-text transition-colors hover:text-primary">Photography portfolio</a></li></ul></div><div><p class="text-xs font-medium uppercase tracking-[0.2em] text-muted">Services</p><ul class="mt-4 space-y-2.5"><li><a href="/services/brand-campaigns" class="text-sm text-text transition-colors hover:text-primary">Brand campaigns</a></li><li><a href="/services/event-coverage" class="text-sm text-text transition-colors hover:text-primary">Event coverage</a></li><li><a href="/services/social-media-retainers" class="text-sm text-text transition-colors hover:text-primary">Social media retainers</a></li><li><a href="/services/photography" class="text-sm text-text transition-colors hover:text-primary">Photography</a></li></ul></div><div><p class="text-xs font-medium uppercase tracking-[0.2em] text-muted">Studio</p><ul class="mt-4 space-y-2.5"><li><a href="/about" class="text-sm text-text transition-colors hover:text-primary">About</a></li><li><a href="/packages" class="text-sm text-text transition-colors hover:text-primary">Pricing</a></li><li><a href="/faq" class="text-sm text-text transition-colors hover:text-primary">FAQ</a></li><li><a href="/contact" class="text-sm text-text transition-colors hover:text-primary">Book a call</a></li></ul></div></nav></div><!-- Contact row --><div class="mt-12 flex flex-col gap-4 border-t border-border pt-8 text-sm text-muted sm:flex-row sm:items-center sm:justify-between"><div class="flex flex-wrap items-center gap-x-6 gap-y-2"><a href="mailto:contact@heystudiio.com" class="transition-colors hover:text-text">contact@heystudiio.com</a><a href="https://www.instagram.com/heystudiio/" target="_blank" rel="noopener" class="transition-colors hover:text-text">Instagram @heystudiio</a><span>Las Vegas, Nevada</span></div></div><!-- Legal / credit --><div class="mt-8 flex flex-col gap-3 border-t border-border pt-6 text-xs text-muted sm:flex-row sm:items-center sm:justify-between"><p>© 2026 Micah David LLC. All rights reserved.</p><nav aria-label="Legal" class="flex items-center gap-5"><a href="/privacy" class="transition-colors hover:text-text">Privacy Policy</a><a href="/accessibility" class="transition-colors hover:text-text">Accessibility</a></nav><p>Video Production Websites & Digital Marketing by <a href="https://strafedigital.com" target="_blank" rel="noopener" class="text-text transition-colors hover:text-primary">Strafe Digital</a></p></div></div></footer><div class="a11y-fab" data-a11y-widget><button type="button" class="a11y-fab__btn" aria-expanded="false" aria-controls="a11y-panel" aria-label="Accessibility options" data-a11y-toggle-panel><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="4" r="1.4" fill="currentColor" stroke="none"></circle><path d="M4 8h16"></path><path d="M9 8v4l-2 8"></path><path d="M15 8v4l2 8"></path><path d="M9 12h6"></path></svg></button><div id="a11y-panel" class="a11y-fab__panel" role="dialog" aria-label="Accessibility options" hidden><p class="a11y-fab__title">Accessibility</p><div class="a11y-fab__grid"><button type="button" class="a11y-toggle" aria-pressed="false" data-a11y-pref="a11y-large-text">Larger text <span class="a11y-toggle__state">Off</span></button><button type="button" class="a11y-toggle" aria-pressed="false" data-a11y-pref="a11y-contrast">High contrast <span class="a11y-toggle__state">Off</span></button><button type="button" class="a11y-toggle" aria-pressed="false" data-a11y-pref="a11y-underline">Underline links <span class="a11y-toggle__state">Off</span></button><button type="button" class="a11y-toggle" aria-pressed="false" data-a11y-pref="a11y-readable">Readable spacing <span class="a11y-toggle__state">Off</span></button><button type="button" class="a11y-toggle" aria-pressed="false" data-a11y-pref="a11y-no-motion">Pause motion <span class="a11y-toggle__state">Off</span></button></div><button type="button" class="a11y-fab__reset" data-a11y-reset>Reset all</button></div></div><script>
(function () {
var KEY = 'a11y-prefs';
var root = document.documentElement;
var wrap = document.querySelector('[data-a11y-widget]');
if (!wrap) return;
var btn = wrap.querySelector('[data-a11y-toggle-panel]');
var panel = wrap.querySelector('#a11y-panel');
var toggles = [].slice.call(wrap.querySelectorAll('[data-a11y-pref]'));
function load() { try { return JSON.parse(localStorage.getItem(KEY)) || {}; } catch (e) { return {}; } }
function save(p) { try { localStorage.setItem(KEY, JSON.stringify(p)); } catch (e) {} }
var prefs = load();
toggles.forEach(function (t) {
var cls = t.getAttribute('data-a11y-pref');
var on = !!prefs[cls];
root.classList.toggle(cls, on);
t.setAttribute('aria-pressed', String(on));
var s = t.querySelector('.a11y-toggle__state'); if (s) s.textContent = on ? 'On' : 'Off';
});
function setPanel(open) {
btn.setAttribute('aria-expanded', String(open));
panel.hidden = !open;
if (open) { var f = panel.querySelector('.a11y-toggle'); if (f) f.focus(); }
}
btn.addEventListener('click', function () { setPanel(btn.getAttribute('aria-expanded') !== 'true'); });
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape' && btn.getAttribute('aria-expanded') === 'true') { setPanel(false); btn.focus(); }
});
document.addEventListener('click', function (e) {
if (btn.getAttribute('aria-expanded') === 'true' && !wrap.contains(e.target)) setPanel(false);
});
toggles.forEach(function (t) {
t.addEventListener('click', function () {
var cls = t.getAttribute('data-a11y-pref');
var on = root.classList.toggle(cls);
t.setAttribute('aria-pressed', String(on));
var s = t.querySelector('.a11y-toggle__state'); if (s) s.textContent = on ? 'On' : 'Off';
prefs[cls] = on; save(prefs);
});
});
wrap.querySelector('[data-a11y-reset]').addEventListener('click', function () {
toggles.forEach(function (t) {
var cls = t.getAttribute('data-a11y-pref');
root.classList.remove(cls);
t.setAttribute('aria-pressed', 'false');
var s = t.querySelector('.a11y-toggle__state'); if (s) s.textContent = 'Off';
});
prefs = {}; save(prefs);
});
})();
</script><script type="module" src="/_astro/Base.astro_astro_type_script_index_0_lang.BCafiPwB.js"></script></body></html><script>
(() => {
var reduced = document.documentElement.classList.contains('a11y-no-motion');
// Hero video rotator (crossfade + play the active clip)
var slides = [].slice.call(document.querySelectorAll('[data-hero-slide]'));
function playActive(i) {
slides.forEach(function (s, j) {
s.classList.toggle('is-active', j === i);
if (s.tagName === 'VIDEO') {
if (j === i) { var p = s.play(); if (p && p.catch) p.catch(function () {}); }
else { try { s.pause(); } catch (e) {} }
}
});
}
if (!reduced && slides.length) {
playActive(0);
if (slides.length > 1) {
var hi = 0;
setInterval(function () { hi = (hi + 1) % slides.length; playActive(hi); }, 7000);
}
}
// Film strip: horizontal drift linked to vertical scroll progress
var strip = document.querySelector('[data-filmstrip]');
var track = strip && strip.querySelector('[data-strip-track]');
if (strip && track) {
if (reduced) {
strip.style.overflowX = 'auto';
} else {
var ticking = false;
var apply = function () {
var rect = strip.getBoundingClientRect();
var vh = window.innerHeight;
var prog = (vh - rect.top) / (rect.height + vh);
prog = Math.max(0, Math.min(1, prog));
var max = Math.max(0, track.scrollWidth - track.clientWidth + 40);
track.style.transform = 'translate3d(' + (-prog * max) + 'px,0,0)';
ticking = false;
};
addEventListener('scroll', function () { if (!ticking) { requestAnimationFrame(apply); ticking = true; } }, { passive: true });
addEventListener('resize', apply);
addEventListener('load', apply);
apply();
}
}
})();
</script>
Sitemap
Кол-во: 0
XML-карта сайта для поисковиков
?
Sitemap.xml помогает поисковику быстрее находить и индексировать страницы. Особенно важен для крупных сайтов и новых страниц, на которые ещё нет входящих ссылок.
Robots.txt не содержит ссылку на карту сайта. Рекомендуется добавить карту сайта и указать ссылку на нее в robots.txt.
Внутренние ссылки
Кол-во: 52
Ссылки на другие страницы своего сайта
?
Внутренние ссылки распределяют ссылочный вес между страницами и помогают поисковику обходить сайт. Пустые анкоры и ссылки на запрещённые robots.txt страницы — типичные ошибки.
Внутренних ссылок на странице 52 оптимально.
Внутренние ссылки не запрещены к индексации в robots.txt.
На странице присутствуют изображения 18.
Показать внутренние ссылки
| Url | Анкор | Состояние | Анализировать |
|---|---|---|---|
| /video |
<span class="font-medium">Video portfolio</span><span class="mt-0.5 block text-xs text-muted">Commercials, events, and more</span>
|
|
Анализировать url |
| /photography |
<span class="font-medium">Photography portfolio</span><span class="mt-0.5 block text-xs text-muted">Brand, product, and portraits</span>
|
|
Анализировать url |
| /services/brand-campaigns |
<span class="font-medium">Brand campaigns</span>
|
|
Анализировать url |
| /services/event-coverage |
<span class="font-medium">Event coverage</span>
|
|
Анализировать url |
| /services/social-media-retainers |
<span class="font-medium">Social media retainers</span>
|
|
Анализировать url |
| /services/photography |
<span class="font-medium">Photography</span>
|
|
Анализировать url |
| /packages |
Pricing
|
|
Анализировать url |
| /about |
About
|
|
Анализировать url |
| /faq |
FAQ
|
|
Анализировать url |
| /contact |
Book a call
|
|
Анализировать url |
| /video |
Work
|
|
Анализировать url |
| /video |
Video portfolio
|
|
Анализировать url |
| /photography |
Photography portfolio
|
|
Анализировать url |
| /services |
Services
|
|
Анализировать url |
| /services/brand-campaigns |
Brand campaigns
|
|
Анализировать url |
| /services/event-coverage |
Event coverage
|
|
Анализировать url |
| /services/social-media-retainers |
Social media retainers
|
|
Анализировать url |
| /services/photography |
Photography
|
|
Анализировать url |
| /packages |
Pricing
|
|
Анализировать url |
| /about |
About
|
|
Анализировать url |
| /faq |
FAQ
|
|
Анализировать url |
| /contact |
Book a call
|
|
Анализировать url |
| /contact |
Book a call<svg width="18" height="18" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /video |
See the work
|
|
Анализировать url |
| /packages |
See full pricing
|
|
Анализировать url |
| /packages |
<p class="font-display text-xl font-bold uppercase tracking-tight text-text">The Foundation</p><p class="mt-2 text-sm text-muted" style="line-height: var(--leading-relaxed);">One cinematic commercial, produced end to end with the filmmaker.</p><p class="mt-5 font-display text-3xl font-extrabold text-text"><span class="align-middle text-sm font-semibold uppercase tracking-wide text-muted">From </span>$1,800</p><ul class="mt-5 space-y-2 text-sm text-muted"><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>A cinematic commercial, up to 90 seconds</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>Intentional lighting for a premium, considered look</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>A professional color grade</span></li></ul><span class="mt-6 inline-flex items-center gap-1.5 text-sm font-semibold text-accent">See what is included<svg class="transition-transform group-hover:translate-x-1" width="15" height="15" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span>
|
|
Анализировать url |
| /packages |
<span class="absolute -top-3 left-7 rounded-pill bg-accent px-3 py-1 text-xs font-semibold uppercase tracking-wide text-accent-fg">Most popular</span><p class="font-display text-xl font-bold uppercase tracking-tight text-text">The Signature</p><p class="mt-2 text-sm text-muted" style="line-height: var(--leading-relaxed);">Everything in the Foundation, plus social cuts, photos, and a full crew.</p><p class="mt-5 font-display text-3xl font-extrabold text-text"><span class="align-middle text-sm font-semibold uppercase tracking-wide text-muted">From </span>$3,900</p><ul class="mt-5 space-y-2 text-sm text-muted"><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>Everything in the Foundation</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>A vertical social cut built to stop the scroll</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>15 high resolution brand photos from the same production</span></li></ul><span class="mt-6 inline-flex items-center gap-1.5 text-sm font-semibold text-accent">See what is included<svg class="transition-transform group-hover:translate-x-1" width="15" height="15" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span>
|
|
Анализировать url |
| /packages |
<p class="font-display text-xl font-bold uppercase tracking-tight text-text">The Flagship</p><p class="mt-2 text-sm text-muted" style="line-height: var(--leading-relaxed);">A documentary grade flagship film with the full production treatment.</p><p class="mt-5 font-display text-3xl font-extrabold text-text"><span class="align-middle text-sm font-semibold uppercase tracking-wide text-muted">From </span>$8,500</p><ul class="mt-5 space-y-2 text-sm text-muted"><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>Everything in the Signature</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>A flagship commercial with documentary grade storytelling</span></li><li class="flex gap-2"><span class="ink mt-0.5">/</span><span>3 vertical social cuts</span></li></ul><span class="mt-6 inline-flex items-center gap-1.5 text-sm font-semibold text-accent">See what is included<svg class="transition-transform group-hover:translate-x-1" width="15" height="15" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span>
|
|
Анализировать url |
| /contact |
Book a call<svg width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /packages |
See full pricing
|
|
Анализировать url |
| /contact |
Build a custom package<svg width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /faq |
Have a question first? Read the FAQ
|
|
Анализировать url |
| /contact |
Book a call<svg width="15" height="15" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /video |
All video work<svg width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /photography |
Full portfolio<svg width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /about |
More about the studio<svg width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /contact |
Book a call<svg width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /contact |
Book a call<svg width="18" height="18" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /packages |
See packages
|
|
Анализировать url |
| /contact |
Book a call<svg width="16" height="16" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg>
|
|
Анализировать url |
| /video |
Video portfolio
|
|
Анализировать url |
| /photography |
Photography portfolio
|
|
Анализировать url |
| /services/brand-campaigns |
Brand campaigns
|
|
Анализировать url |
| /services/event-coverage |
Event coverage
|
|
Анализировать url |
| /services/social-media-retainers |
Social media retainers
|
|
Анализировать url |
| /services/photography |
Photography
|
|
Анализировать url |
| /about |
About
|
|
Анализировать url |
| /packages |
Pricing
|
|
Анализировать url |
| /faq |
FAQ
|
|
Анализировать url |
| /contact |
Book a call
|
|
Анализировать url |
| /privacy |
Privacy Policy
|
|
Анализировать url |
| /accessibility |
Accessibility
|
|
Анализировать url |
Внешние ссылки
Кол-во: 2
Ссылки на сторонние сайты
?
Исходящие внешние ссылки передают часть ссылочного веса на чужие сайты. Ссылки на авторитетные ресурсы безопасны; ссылки на мусорные сайты могут навредить репутации страницы.
Внешних ссылок на странице 2 оптимально.
Показать внешние ссылки
| Url | Анкор | Анализировать |
|---|---|---|
| instagram.com |
Instagram @heystudiio
|
|
| strafedigital.com |
Strafe Digital
|
Анализировать url |
Конкуренты Готовность: 0%
Конкуренты в Яндексе
Кол-во: 0
Топ сайтов-конкурентов в Яндексе
?
Сайты, чаще всего появляющиеся в ТОПе Яндекса по запросам из семантического ядра этой страницы.
Мы не нашли у вас конкурентов в Яндексе. Сайт или очень молодой или плохо продвигается.
Конкурентов в ТОП-10 Яндекса не нашлось.
Конкуренты в Google
Кол-во: 0
Топ сайтов-конкурентов в Google
?
Сайты, чаще всего появляющиеся в ТОПе Google по запросам из семантического ядра этой страницы.
Конкуренты в Google тоже не найдены. Займитесь продвижением сайта!
Конкурентов в ТОП-10 Google не нашлось.
ЗоЗПП: права потребителей Готовность: 100%
Нарушения
Не выявлены
Признаков дистанционной продажи товаров (интернет-магазина) не обнаружено — требования ЗоЗПП о раскрытии информации продавца к сайту не применяются. Нарушений нет.
ФЗ-149: рекомендательные технологии Готовность: 100%
Нарушения
Не выявлены
Рекомендательные блоки («с этим покупают», «похожие товары» и т.п.) на сайте не обнаружены — требования ст. 10.7 ФЗ-149 к сайту не применяются. Нарушений нет.
ФЗ-38: реклама Готовность: 100%
Нарушения
Не выявлены
Рекламных тематик с обязательными оговорками (медицина, БАД, кредиты и займы, новостройки) на сайте не обнаружено. Нарушений нет.
ФЗ-436: защита детей Готовность: 100%
Нарушения
Не выявлены
Признаков информационной продукции (новости, видео, книги, игры, курсы) не обнаружено — обязательная возрастная маркировка по ФЗ-436 сайту не требуется. Нарушений нет.
Вердикт
Оптимизация сайта micahdavid.com выполнена на 76%, что говорит о высокой готовности к продвижению.
Исправьте ошибки в мета-тегах.
Поделитесь с друзьями: