Stadio Mockup Index · v2
Ukraine Dev Team · Landing Page System

Six Mockups.
Two Audiences.

Each template ships in two options. A runs standard GAM display inventory (daily default). B is a single-sponsor page takeover using approved Mundial Media IAB/high-impact formats only, all Celtra-ready and tagged with GAM slot paths.

Two sponsorship tracks, sold separately.
Track 1, Media Buy (CPM). Standard IAB/high-impact ad units trafficked via Celtra with impression & click trackers. Lives on Adrian’s approved formats list. See Option B pages for approved-inventory takeover examples.

Track 2, Content Partnership SKU (Flat Fee). Editorial sponsor integration: “Brought to you by [Sponsor]” branding, co-branded heroes, shop rails, featured sections, custom editorial series. Not an ad buy, an editorial production deal, priced flat-fee per campaign. Premium Concept archive shows what these look like. Tier-1 brands only, measured by on-site KPIs (time on page, reads, partner CTR) rather than CPM impressions.
For the Ukraine dev team. Three templates, six mockups, one shared Sponsor CPT. Every “B” mockup is the same template as its “A” pair, just with a Sponsor relationship populated and a takeover layout flag set. Build once, swap sponsor to reskin. The GAM slots are identical per template regardless of A/B; key-values change based on sponsor.
1Mock → WordPress Mapping
Template Mockups WP Template File ACF Field Group Sponsor CPT GAM Slots
Category Landing
A · B
landing-A.html
landing-B.html
template-category-landing.php group_category_landing sponsorship (relationship) /stadio/landing/header-728x90
/stadio/landing/inline-300x250
/stadio/landing/skin-takeover-1800x1000
/stadio/landing/interscroller-600x600
/stadio/landing/interscroller-320x480
/stadio/landing/mobile-skin-320x480
Video Hub
A · B
video-A.html
video-B.html
template-video-hub.php group_video_hub sponsorship (relationship) /stadio/video/top-728x90
/stadio/video/pre-roll-vast
/stadio/video/rail-300x250
/stadio/video/skin-takeover-1800x1000
/stadio/video/interscroller-600x600
/stadio/video/interscroller-320x480
/stadio/video/mid-video-interstitial-800x600
/stadio/video/mid-vertical-video-interstitial-320x480
/stadio/video/mobile-skin-320x480
Slideshow
A · B
slideshow-A.html
slideshow-B.html
template-slideshow.php group_slideshow sponsorship (relationship) /stadio/slideshow/top-728x90
/stadio/slideshow/footer-728x90
/stadio/slideshow/skin-takeover-1800x1000
/stadio/slideshow/interscroller-600x600
/stadio/slideshow/interscroller-320x480
/stadio/slideshow/mid-interstitial-800x600
/stadio/slideshow/mobile-skin-320x480
2Sponsor CPT & ACF Field Groups

CPT: sponsorship

Post type
sponsorship, public false, show_in_rest true
Title
textSponsor display name (e.g. “Amazon”)
logo
imageSquare transparent PNG/SVG, 400×400 min
logo_wordmark
imageHorizontal wordmark SVG for sponsor bar
primary_color
colorHex, drives --sp CSS var
accent_color
colorHex, drives --sp-ink CSS var
cta_url
urlSponsor landing target
cta_label
texte.g. “Shop Now on Amazon”
gutter_L
imageLeft skin art, 320×1200 min
gutter_R
imageRight skin art, 320×1200 min
interscroller_creative
image or mp49:16 mobile interscroller, 1080×1920
gam_kv_sponsor
textGAM key-value (e.g. sponsor=amazon)

group_category_landing

layout_mode
selectstandard | takeover
hero_eyebrow
text
hero_title
text
hero_image
imageFull-bleed 2400×1200
shop_rail
repeaterimage, name, price, cta_url
editorial_picks
relationshipto post
sponsor
relationshipto sponsorship (nullable)

group_video_hub

layout_mode
selectstandard | takeover
featured_video
oembedor VAST URL
featured_title
text
up_next
repeatervideo ref, title, duration
featured_grid
relationshipto post type=video
sponsor
relationshipto sponsorship

group_slideshow

layout_mode
selectstandard | takeover
slideshow_title
text
slides
repeaterimage, caption, credit
mid_interstitial_at
numberslide index for mid ad
sponsor
relationshipto sponsorship
3Template Stub (shared pattern)
<?php
/* Template Name: Category Landing */
get_header();

$layout  = get_field('layout_mode');
$sponsor = get_field('sponsor');
$is_takeover = ($layout === 'takeover' && $sponsor);

// GAM targeting: pass sponsor slug as key-value
if ($is_takeover) {
  $sp_slug = get_field('gam_kv_sponsor', $sponsor->ID);
  add_action('wp_head', fn() => printf(
    '<script>googletag.pubads().setTargeting("sponsor","%s");</script>',
    esc_js($sp_slug)
  ));
}
?>

<?php if ($is_takeover): ?>
  <!-- Gutter skins only render when sponsor exists and viewport ≥ 1200px (CSS) -->
  <aside class="skin left">
    <img src="<?= esc_url(get_field('gutter_L', $sponsor->ID)) ?>">
  </aside>
  <aside class="skin right">
    <img src="<?= esc_url(get_field('gutter_R', $sponsor->ID)) ?>">
  </aside>
<?php endif; ?>

<main class="page-category <?= $is_takeover ? 'is-takeover' : '' ?>">
  <?php get_template_part('parts/landing/hero'); ?>
  <?php if ($is_takeover) get_template_part('parts/landing/shop-rail', null, ['sponsor'=>$sponsor]); ?>
  <?php get_template_part('parts/landing/editorial-grid'); ?>
</main>

<?php get_footer(); ?>
4Dev Checklist
5SEO & AI Search (LLM) Spec