@mundogamernetwork/shared-ui 1.1.24 → 1.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,400 +1,1318 @@
1
1
  <script setup lang="ts">
2
- import { fetchPublicPressKit, trackPressKitEvent } from '../../services/pressKitService';
2
+ import { fetchPublicPressKit, trackPressKitEvent } from '~/services/pressKitService'
3
3
 
4
- const route = useRoute();
5
- const slug = route.params.slug as string;
4
+ definePageMeta({ ssr: false })
6
5
 
7
- const kit = ref<Record<string, any> | null>(null);
8
- const loading = ref(true);
9
- const error = ref(false);
6
+ const route = useRoute()
7
+ const { t } = useI18n()
8
+ const localePath = useLocalePath()
9
+
10
+ const slug = route.params.slug as string
11
+
12
+ const kit = ref<any>(null)
13
+ const loading = ref(true)
14
+ const error = ref(false)
15
+
16
+ const showTrailer = ref(false)
17
+ const assetFilter = ref('all')
18
+
19
+ const trailerEmbedUrl = computed(() => {
20
+ const url = kit.value?.trailer_url
21
+ if (!url) return null
22
+ const yt = url.match(/(?:youtube\.com\/watch\?v=|youtu\.be\/)([\w-]+)/)
23
+ if (yt) return `https://www.youtube.com/embed/${yt[1]}?autoplay=1`
24
+ return url
25
+ })
26
+
27
+ const assets = computed(() => {
28
+ const all = kit.value?.assets?.data ?? []
29
+ if (assetFilter.value === 'all') return all
30
+ return all.filter((a: any) => a.type === assetFilter.value)
31
+ })
32
+
33
+ const assetTypes = computed(() => {
34
+ const all = kit.value?.assets?.data ?? []
35
+ const types = [...new Set(all.map((a: any) => a.type).filter(Boolean))]
36
+ return types
37
+ })
38
+
39
+ const socialLinks = computed(() => {
40
+ const links = kit.value?.social_links ?? {}
41
+ return Object.entries(links).filter(([, v]) => !!v).map(([k, v]) => ({ label: k, url: v as string }))
42
+ })
43
+
44
+ const articles = computed(() => kit.value?.articles ?? [])
45
+ const coverage = computed(() => kit.value?.coverage ?? [])
46
+ const showcases = computed(() => kit.value?.showcases ?? [])
47
+ const hasEcosystem = computed(() =>
48
+ showcases.value.length ||
49
+ kit.value?.ventures_url ||
50
+ kit.value?.magazine_feature ||
51
+ kit.value?.community_url
52
+ )
10
53
 
11
54
  onMounted(async () => {
12
55
  try {
13
- const { data } = await fetchPublicPressKit(slug);
14
- kit.value = data?.data || data;
15
-
56
+ const { data } = await fetchPublicPressKit(slug)
57
+ kit.value = data?.data ?? data
16
58
  trackPressKitEvent(slug, {
17
59
  event_type: 'view',
18
60
  referrer: document.referrer || undefined,
19
- }).catch(() => {});
61
+ }).catch(() => {})
20
62
  } catch {
21
- error.value = true;
63
+ error.value = true
22
64
  } finally {
23
- loading.value = false;
24
- }
25
- });
26
-
27
- // Fractal include shape: relation -> { data: [...] }
28
- const list = (rel: any) => rel?.data || rel || [];
29
- const assets = computed(() => list(kit.value?.assets));
30
- const videos = computed(() => list(kit.value?.videos));
31
- const awards = computed(() => list(kit.value?.awards));
32
- const quotes = computed(() => list(kit.value?.quotes));
33
- const team = computed(() => list(kit.value?.credits));
34
- const features = computed(() => kit.value?.key_features || []);
35
- // New, optional blocks (rendered only when the API provides them)
36
- const articles = computed(() => list(kit.value?.articles));
37
- const coverage = computed(() => list(kit.value?.coverage));
38
- const showcases = computed(() => list(kit.value?.showcases));
39
- const hasEcosystem = computed(() => showcases.value.length || kit.value?.ventures_url || kit.value?.magazine_feature || kit.value?.community_url);
40
-
41
- const screenshots = computed(() => assets.value.filter((a: any) => ['screenshot', 'artwork', 'gif'].includes(a.type)));
42
- const brandAssets = computed(() => assets.value.filter((a: any) => ['logo', 'document'].includes(a.type)));
43
-
44
- const tpl = computed(() => kit.value?.theme || null);
45
- const layout = computed(() => kit.value?.layout || 'classic');
46
- const allowDownload = computed(() => kit.value?.allow_asset_download !== false);
47
-
48
- const socials = computed(() => {
49
- const s = kit.value?.social_links || {};
50
- return Object.entries(s).filter(([, v]) => v).map(([k, v]) => ({ platform: k, url: v as string }));
51
- });
52
-
53
- const facts = computed(() => {
54
- const k = kit.value || {};
55
- const out: { label: string; value: string; accent?: boolean; href?: string }[] = [];
56
- if (k.developer) out.push({ label: 'kit.press.developer', value: k.developer });
57
- if (k.publisher) out.push({ label: 'kit.press.publisher', value: k.publisher });
58
- if (k.release_date_tba) out.push({ label: 'kit.press.release', value: 'TBA', accent: true });
59
- else if (k.release_date) out.push({ label: 'kit.press.release', value: k.release_date, accent: true });
60
- if (k.release_status) out.push({ label: 'kit.press.status', value: String(k.release_status).replace(/_/g, ' ') });
61
- if (k.price) out.push({ label: 'kit.press.price', value: `${k.price}${k.currency ? ' ' + k.currency : ''}` });
62
- if (k.website_url) out.push({ label: 'kit.press.website', value: k.website_url, accent: true, href: k.website_url });
63
- if (k.steam_url) out.push({ label: 'Steam', value: k.steam_url, href: k.steam_url });
64
- if (k.press_contact_email) out.push({ label: 'kit.press.contact', value: k.press_contact_email, href: `mailto:${k.press_contact_email}` });
65
- return out;
66
- });
67
-
68
- function track(type: 'click' | 'download' | 'contact') {
69
- trackPressKitEvent(slug, { event_type: type, referrer: document.referrer || undefined }).catch(() => {});
70
- }
71
-
72
- const requestUrl = useRequestURL();
65
+ loading.value = false
66
+ }
67
+ })
68
+
73
69
  useHead(() => ({
74
- title: kit.value ? `${kit.value.name} Press Kit` : 'Press Kit',
70
+ title: kit.value?.name ?? t('press_kit.loading'),
75
71
  meta: [
76
- { name: 'description', content: kit.value?.tagline || '' },
77
- { property: 'og:title', content: kit.value?.name || 'Press Kit' },
78
- { property: 'og:description', content: kit.value?.tagline || '' },
79
- { property: 'og:image', content: kit.value?.hero_image_url || kit.value?.logo_url || '' },
80
- { property: 'og:type', content: 'article' },
81
- { property: 'og:url', content: requestUrl.href },
72
+ { name: 'description', content: kit.value?.tagline ?? kit.value?.description?.substring(0, 160) ?? '' },
73
+ { property: 'og:title', content: kit.value?.name ?? '' },
74
+ { property: 'og:description', content: kit.value?.tagline ?? '' },
75
+ { property: 'og:image', content: kit.value?.cover_image_url ?? kit.value?.hero_image_url ?? '' },
82
76
  ],
83
- }));
77
+ }))
84
78
  </script>
85
79
 
86
80
  <template>
87
- <div class="kit-press" :data-tpl="tpl" :data-layout="layout">
88
- <div v-if="loading" class="kit-state">{{ $t('kit.loading') }}</div>
89
- <div v-else-if="error || !kit" class="kit-state">
90
- <h2>{{ $t('kit.press.not_found') }}</h2>
81
+ <div class="pk-page">
82
+
83
+ <!-- Loading -->
84
+ <div v-if="loading" class="pk-loading">
85
+ <div class="pk-spinner" />
86
+ </div>
87
+
88
+ <!-- Not found -->
89
+ <div v-else-if="error || !kit" class="pk-error">
90
+ <h1>{{ $t('press_kit.not_found') }}</h1>
91
+ <p>{{ $t('press_kit.not_found_message') }}</p>
92
+ <NuxtLink :to="localePath('/')" class="pk-btn">{{ $t('press_kit.back_home') }}</NuxtLink>
91
93
  </div>
92
94
 
93
95
  <template v-else>
94
- <!-- CAPA / COVER -->
95
- <header class="kit-cover" :style="kit.hero_image_url ? { backgroundImage: `url(${kit.hero_image_url})` } : {}">
96
- <div class="kit-cover-inner">
97
- <img
98
- v-if="kit.cover_image_url"
99
- class="kit-cover-poster"
100
- :src="kit.cover_image_url"
101
- :alt="kit.name"
102
- @error="(e: any) => e.target.style.display = 'none'"
103
- />
104
- <div class="kit-cover-text">
105
- <span v-if="kit.release_status" class="kit-eyebrow">{{ String(kit.release_status).replace(/_/g, ' ') }}</span>
106
- <img
107
- v-if="kit.logo_url"
108
- class="kit-cover-logo-img"
109
- :src="kit.logo_url"
110
- :alt="kit.name"
111
- @error="(e: any) => { e.target.style.display = 'none'; e.target.nextElementSibling.style.display = 'block'; }"
112
- />
113
- <h1 :style="kit.logo_url ? { display: 'none' } : {}">{{ kit.name }}</h1>
114
- <p v-if="kit.tagline" class="kit-tagline">{{ kit.tagline }}</p>
115
- <p v-if="kit.developer" class="kit-kicker">{{ kit.developer }}</p>
116
- <div class="kit-actions">
117
- <a v-if="allowDownload" class="kit-btn kit-btn-primary" @click="track('download')">{{ $t('kit.press.download_assets') }}</a>
118
- <a v-if="kit.press_contact_email" class="kit-btn kit-btn-ghost" :href="`mailto:${kit.press_contact_email}`" @click="track('contact')">{{ $t('kit.press.request_key') }}</a>
96
+
97
+ <!-- ═══ Hero ═══════════════════════════════════════════════════ -->
98
+ <div
99
+ class="pk-hero"
100
+ :style="kit.hero_image_url ? { backgroundImage: `url(${kit.hero_image_url})` } : {}"
101
+ >
102
+ <div class="pk-hero__overlay">
103
+ <div class="pk-hero__inner">
104
+ <div v-if="kit.logo_url" class="pk-hero__logo">
105
+ <img
106
+ :src="kit.logo_url"
107
+ :alt="kit.name"
108
+ @error="(e: any) => e.target.style.display = 'none'"
109
+ />
110
+ </div>
111
+ <h1 class="pk-hero__title">{{ kit.name }}</h1>
112
+ <p v-if="kit.tagline" class="pk-hero__tagline">{{ kit.tagline }}</p>
113
+ <div class="pk-hero__actions">
114
+ <button
115
+ v-if="kit.trailer_url"
116
+ class="pk-btn pk-btn--outline"
117
+ @click="showTrailer = true"
118
+ >
119
+ {{ $t('press_kit.watch_trailer') }}
120
+ </button>
121
+ <a
122
+ v-if="kit.steam_url"
123
+ :href="kit.steam_url"
124
+ target="_blank"
125
+ rel="noopener"
126
+ class="pk-btn pk-btn--ghost"
127
+ @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'steam_wishlist' } })"
128
+ >
129
+ {{ $t('press_kit.wishlist_steam') }}
130
+ </a>
131
+ <a
132
+ v-if="kit.epic_url"
133
+ :href="kit.epic_url"
134
+ target="_blank"
135
+ rel="noopener"
136
+ class="pk-btn pk-btn--ghost"
137
+ @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'epic_wishlist' } })"
138
+ >
139
+ {{ $t('press_kit.wishlist_epic') }}
140
+ </a>
119
141
  </div>
120
142
  </div>
121
143
  </div>
122
- </header>
123
-
124
- <div class="kit-wrap">
125
- <div class="kit-layout">
126
- <aside class="kit-sidebar">
127
- <div class="kit-card kit-factsheet">
128
- <h3 class="kit-fact-title">{{ $t('kit.press.fact_sheet') }}</h3>
129
- <div v-for="f in facts" :key="f.label" class="kit-fact">
130
- <span class="k">{{ $te(f.label) ? $t(f.label) : f.label }}</span>
131
- <a v-if="f.href" class="v accent" :href="f.href" target="_blank" rel="noopener" @click="track('click')">{{ f.value }}</a>
132
- <span v-else class="v" :class="{ accent: f.accent }">{{ f.value }}</span>
144
+ </div>
145
+
146
+ <!-- ═══ Layout ══════════════════════════════════════════════════ -->
147
+ <div class="pk-container">
148
+ <div class="pk-layout">
149
+
150
+ <!-- Sidebar -->
151
+ <aside class="pk-sidebar">
152
+ <div class="pk-card">
153
+ <h2 class="pk-card__title">{{ $t('press_kit.fact_sheet') }}</h2>
154
+ <dl class="pk-dl">
155
+ <template v-if="kit.developer">
156
+ <dt>{{ $t('press_kit.developer') }}</dt>
157
+ <dd>{{ kit.developer }}</dd>
158
+ </template>
159
+ <template v-if="kit.publisher">
160
+ <dt>{{ $t('press_kit.publisher_label') }}</dt>
161
+ <dd>{{ kit.publisher }}</dd>
162
+ </template>
163
+ <template v-if="kit.release_date || kit.release_date_tba">
164
+ <dt>{{ $t('press_kit.release_date') }}</dt>
165
+ <dd>{{ kit.release_date_tba ? $t('press_kit.date_tba') : kit.release_date }}</dd>
166
+ </template>
167
+ <template v-if="kit.release_status">
168
+ <dt>{{ $t('press_kit.release_status') }}</dt>
169
+ <dd>{{ kit.release_status }}</dd>
170
+ </template>
171
+ <template v-if="kit.price">
172
+ <dt>{{ $t('press_kit.price') }}</dt>
173
+ <dd>{{ kit.price }} {{ kit.currency }}</dd>
174
+ </template>
175
+ <template v-if="kit.monetization">
176
+ <dt>{{ $t('press_kit.monetization') }}</dt>
177
+ <dd>{{ kit.monetization }}</dd>
178
+ </template>
179
+ <template v-if="kit.press_contact_email">
180
+ <dt>{{ $t('press_kit.press_contact') }}</dt>
181
+ <dd>
182
+ <a
183
+ :href="`mailto:${kit.press_contact_email}`"
184
+ @click="trackPressKitEvent(slug, { event_type: 'contact' })"
185
+ >{{ kit.press_contact_email }}</a>
186
+ </dd>
187
+ </template>
188
+ </dl>
189
+ </div>
190
+
191
+ <!-- Links -->
192
+ <div class="pk-card" v-if="kit.website_url || kit.steam_url || kit.epic_url || kit.ventures_url || kit.community_url">
193
+ <h2 class="pk-card__title">{{ $t('press_kit.available_on') }}</h2>
194
+ <div class="pk-links">
195
+ <a v-if="kit.website_url" :href="kit.website_url" target="_blank" rel="noopener" class="pk-link" @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'website' } })">
196
+ {{ $t('press_kit.website') }}
197
+ </a>
198
+ <a v-if="kit.steam_url" :href="kit.steam_url" target="_blank" rel="noopener" class="pk-link" @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'steam' } })">
199
+ Steam
200
+ </a>
201
+ <a v-if="kit.epic_url" :href="kit.epic_url" target="_blank" rel="noopener" class="pk-link" @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'epic' } })">
202
+ Epic Games
203
+ </a>
204
+ <a v-if="kit.ventures_url" :href="kit.ventures_url" target="_blank" rel="noopener" class="pk-link">
205
+ Ventures
206
+ </a>
207
+ <a v-if="kit.community_url" :href="kit.community_url" target="_blank" rel="noopener" class="pk-link" @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'community' } })">
208
+ {{ $t('press_kit.follow_community') }}
209
+ </a>
133
210
  </div>
134
- <div v-if="socials.length" class="kit-fact">
135
- <span class="k">{{ $t('kit.press.social') }}</span>
136
- <div class="kit-socials">
137
- <a v-for="s in socials" :key="s.platform" :href="s.url" target="_blank" rel="noopener" @click="track('click')">{{ s.platform.charAt(0).toUpperCase() }}</a>
138
- </div>
211
+ </div>
212
+
213
+ <!-- Social media -->
214
+ <div class="pk-card" v-if="socialLinks.length">
215
+ <h2 class="pk-card__title">{{ $t('press_kit.social_media') }}</h2>
216
+ <div class="pk-links">
217
+ <a
218
+ v-for="link in socialLinks"
219
+ :key="link.label"
220
+ :href="link.url"
221
+ target="_blank"
222
+ rel="noopener"
223
+ class="pk-link"
224
+ @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: link.label } })"
225
+ >
226
+ {{ link.label }}
227
+ </a>
139
228
  </div>
140
229
  </div>
230
+
231
+ <!-- Press key request -->
232
+ <div class="pk-card pk-card--accent" v-if="kit.press_contact_email">
233
+ <p class="pk-card__desc">{{ $t('press_kit.key_request_desc') }}</p>
234
+ <a
235
+ :href="`mailto:${kit.press_contact_email}`"
236
+ class="pk-btn pk-btn--full"
237
+ @click="trackPressKitEvent(slug, { event_type: 'contact' })"
238
+ >
239
+ {{ $t('press_kit.request_key') }}
240
+ </a>
241
+ </div>
141
242
  </aside>
142
243
 
143
- <main class="kit-main">
144
- <section v-if="kit.description" class="kit-block">
145
- <h2>{{ $t('kit.press.about') }}</h2>
146
- <div class="kit-lead" v-html="kit.description" />
147
- </section>
244
+ <!-- Main content -->
245
+ <main class="pk-main">
148
246
 
149
- <section v-if="features.length" class="kit-block">
150
- <h2>{{ $t('kit.press.features') }}</h2>
151
- <div class="kit-features">
152
- <div v-for="(f, i) in features" :key="i" class="kit-feature"><span class="m">▸</span>{{ f }}</div>
153
- </div>
247
+ <!-- Description -->
248
+ <section v-if="kit.description" class="pk-section">
249
+ <h2 class="pk-section__title">{{ $t('press_kit.description') }}</h2>
250
+ <div class="pk-prose" v-html="kit.description" />
154
251
  </section>
155
252
 
156
- <section v-if="videos.length" class="kit-block">
157
- <h2>{{ $t('kit.press.videos') }}</h2>
158
- <PressKitVideoPlayer :videos="videos" />
253
+ <!-- Key features -->
254
+ <section v-if="kit.key_features?.length" class="pk-section">
255
+ <h2 class="pk-section__title">{{ $t('press_kit.key_features') }}</h2>
256
+ <ul class="pk-features">
257
+ <li v-for="(feat, i) in kit.key_features" :key="i">{{ feat }}</li>
258
+ </ul>
159
259
  </section>
160
260
 
161
- <section v-if="screenshots.length" class="kit-block">
162
- <div class="kit-shead"><h2>{{ $t('kit.press.screenshots') }}</h2><a v-if="allowDownload" class="kit-dl" @click="track('download')">{{ $t('kit.press.download_all') }}</a></div>
163
- <div class="kit-gallery">
164
- <a v-for="(s, i) in screenshots" :key="i" class="kit-shot" :href="s.url" target="_blank" rel="noopener"><img :src="s.thumbnail_url || s.url" :alt="s.title || ''" /></a>
261
+ <!-- Videos -->
262
+ <section v-if="kit.videos?.data?.length" class="pk-section">
263
+ <h2 class="pk-section__title">{{ $t('press_kit.videos') }}</h2>
264
+ <div class="pk-videos">
265
+ <div
266
+ v-for="video in kit.videos.data"
267
+ :key="video.id"
268
+ class="pk-video-card"
269
+ @click="() => { kit.trailer_url = video.url; showTrailer = true; }"
270
+ >
271
+ <div class="pk-video-card__thumb">▶</div>
272
+ <span class="pk-video-card__title">{{ video.title }}</span>
273
+ <span class="pk-video-card__type">{{ video.type }}</span>
274
+ </div>
165
275
  </div>
166
276
  </section>
167
277
 
168
- <section v-if="brandAssets.length" class="kit-block">
169
- <div class="kit-shead"><h2>{{ $t('kit.press.logo_icons') }}</h2></div>
170
- <div class="kit-logos">
171
- <a v-for="(b, i) in brandAssets" :key="i" class="kit-logo-tile" :href="b.url" target="_blank" rel="noopener" @click="track('download')">
172
- <span class="ic">◆</span>{{ b.title || b.type }}
278
+ <!-- Assets -->
279
+ <section v-if="kit.assets?.data?.length" class="pk-section">
280
+ <div class="pk-section__head">
281
+ <h2 class="pk-section__title" style="margin-bottom:0;border-bottom:none;">{{ $t('press_kit.assets') }}</h2>
282
+ <div v-if="assetTypes.length > 1" class="pk-asset-filters">
283
+ <button :class="['pk-filter', { active: assetFilter === 'all' }]" @click="assetFilter = 'all'">
284
+ {{ $t('press_kit.all') }}
285
+ </button>
286
+ <button
287
+ v-for="type in assetTypes"
288
+ :key="type"
289
+ :class="['pk-filter', { active: assetFilter === type }]"
290
+ @click="assetFilter = type"
291
+ >{{ type }}</button>
292
+ </div>
293
+ </div>
294
+ <div v-if="!assets.length" class="pk-empty">{{ $t('press_kit.no_assets') }}</div>
295
+ <div v-else class="pk-assets">
296
+ <a
297
+ v-for="asset in assets"
298
+ :key="asset.id"
299
+ :href="asset.url"
300
+ target="_blank"
301
+ rel="noopener"
302
+ class="pk-asset"
303
+ @click="trackPressKitEvent(slug, { event_type: 'download', metadata: { asset_id: asset.id } })"
304
+ >
305
+ <div class="pk-asset__thumb">
306
+ <img
307
+ v-if="asset.thumbnail_url"
308
+ :src="asset.thumbnail_url"
309
+ :alt="asset.title"
310
+ loading="lazy"
311
+ @error="(e: any) => e.target.style.display = 'none'"
312
+ />
313
+ <span v-else class="pk-asset__dl-icon">↓</span>
314
+ </div>
315
+ <div class="pk-asset__body">
316
+ <span class="pk-asset__title">{{ asset.title }}</span>
317
+ <span v-if="asset.file_size" class="pk-asset__size">{{ asset.file_size }}</span>
318
+ </div>
173
319
  </a>
174
320
  </div>
175
321
  </section>
176
322
 
177
- <!-- NEW: Conteúdos & Artigos (community + external) -->
178
- <section v-if="articles.length" class="kit-block">
179
- <div class="kit-shead"><h2>{{ $t('kit.press.articles') }}</h2></div>
180
- <div class="kit-articles">
181
- <a v-for="(a, i) in articles" :key="i" class="kit-article" :href="a.url" target="_blank" rel="noopener" @click="track('click')">
182
- <div class="thumb" :style="a.image ? { backgroundImage: `url(${a.image})` } : {}"><span class="src" :class="{ ext: a.external }">{{ a.external ? $t('kit.press.external') : 'Mundo Gamer' }}</span></div>
183
- <div class="a-body"><h4>{{ a.title }}</h4><div class="meta">{{ a.source }}<span v-if="a.date"> · {{ a.date }}</span></div></div>
184
- </a>
323
+ <!-- Quotes -->
324
+ <section v-if="kit.quotes?.data?.length" class="pk-section">
325
+ <h2 class="pk-section__title">{{ $t('press_kit.quotes') }}</h2>
326
+ <div class="pk-quotes">
327
+ <blockquote v-for="q in kit.quotes.data" :key="q.id" class="pk-quote">
328
+ <p>"{{ q.quote }}"</p>
329
+ <footer>
330
+ <a v-if="q.source_url" :href="q.source_url" target="_blank" rel="noopener">{{ q.source }}</a>
331
+ <span v-else>{{ q.source }}</span>
332
+ </footer>
333
+ </blockquote>
185
334
  </div>
186
335
  </section>
187
336
 
188
- <!-- NEW: Cobertura de Criadores -->
189
- <section v-if="coverage.length" class="kit-block">
190
- <h2>{{ $t('kit.press.coverage') }}</h2>
191
- <div class="kit-creators">
192
- <a v-for="(c, i) in coverage" :key="i" class="kit-creator" :href="c.url || undefined" target="_blank" rel="noopener">
193
- <div class="av" :style="c.avatar ? { backgroundImage: `url(${c.avatar})` } : {}" />
194
- <div class="cn">{{ c.name }}</div>
195
- <div class="cp">{{ c.platform }}<span v-if="c.followers"> · {{ c.followers }}</span></div>
196
- <div v-if="c.label" class="cv">{{ c.label }}</div>
337
+ <!-- Articles -->
338
+ <section v-if="articles.length" class="pk-section">
339
+ <h2 class="pk-section__title">{{ $t('press_kit.articles') }}</h2>
340
+ <div class="pk-articles">
341
+ <a
342
+ v-for="(a, i) in articles"
343
+ :key="i"
344
+ :href="a.url"
345
+ target="_blank"
346
+ rel="noopener"
347
+ class="pk-article"
348
+ @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'article' } })"
349
+ >
350
+ <div
351
+ class="pk-article__thumb"
352
+ :style="a.image ? { backgroundImage: `url(${a.image})` } : {}"
353
+ >
354
+ <span class="pk-article__src" :class="{ external: a.external }">{{ a.source }}</span>
355
+ </div>
356
+ <div class="pk-article__body">
357
+ <p class="pk-article__title">{{ a.title }}</p>
358
+ <span class="pk-article__date">{{ a.date }}</span>
359
+ </div>
197
360
  </a>
198
361
  </div>
199
362
  </section>
200
363
 
201
- <section v-if="awards.length" class="kit-block">
202
- <h2>{{ $t('kit.press.awards') }}</h2>
203
- <PressKitAwards :awards="awards" />
364
+ <!-- Coverage -->
365
+ <section v-if="coverage.length" class="pk-section">
366
+ <h2 class="pk-section__title">{{ $t('press_kit.coverage') }}</h2>
367
+ <div class="pk-coverage">
368
+ <a
369
+ v-for="(c, i) in coverage"
370
+ :key="i"
371
+ :href="c.url || undefined"
372
+ target="_blank"
373
+ rel="noopener"
374
+ class="pk-creator"
375
+ @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'coverage' } })"
376
+ >
377
+ <div
378
+ class="pk-creator__avatar"
379
+ :style="c.avatar ? { backgroundImage: `url(${c.avatar})` } : {}"
380
+ />
381
+ <div class="pk-creator__info">
382
+ <strong>{{ c.name }}</strong>
383
+ <span>{{ c.platform }}</span>
384
+ <span v-if="c.followers" class="pk-creator__followers">
385
+ {{ Intl.NumberFormat('pt-BR', { notation: 'compact' }).format(c.followers) }} {{ $t('press_kit.followers') }}
386
+ </span>
387
+ </div>
388
+ <span v-if="c.label" class="pk-creator__label">{{ c.label }}</span>
389
+ </a>
390
+ </div>
204
391
  </section>
205
392
 
206
- <section v-if="quotes.length" class="kit-block">
207
- <h2>{{ $t('kit.press.press') }}</h2>
208
- <PressKitQuotes :quotes="quotes" />
393
+ <!-- Awards -->
394
+ <section v-if="kit.awards?.data?.length" class="pk-section">
395
+ <h2 class="pk-section__title">{{ $t('press_kit.awards') }}</h2>
396
+ <div class="pk-awards">
397
+ <div v-for="aw in kit.awards.data" :key="aw.id" class="pk-award">
398
+ <span class="pk-award__star">★</span>
399
+ <div class="pk-award__body">
400
+ <strong>{{ aw.title }}</strong>
401
+ <span v-if="aw.event || aw.year">{{ aw.event }}{{ aw.event && aw.year ? ' · ' : '' }}{{ aw.year }}</span>
402
+ </div>
403
+ <a v-if="aw.url" :href="aw.url" target="_blank" rel="noopener" class="pk-award__link">↗</a>
404
+ </div>
405
+ </div>
209
406
  </section>
210
407
 
211
- <!-- Créditos -> Equipe -->
212
- <section v-if="team.length" class="kit-block">
213
- <h2>{{ $t('kit.press.team') }}</h2>
214
- <div class="kit-team">
215
- <div v-for="(m, i) in team" :key="i" class="kit-member"><span>{{ m.name }}</span><span class="role">{{ m.role }}</span></div>
408
+ <!-- Team / Credits -->
409
+ <section v-if="kit.credits?.data?.length" class="pk-section">
410
+ <h2 class="pk-section__title">{{ $t('press_kit.team') }}</h2>
411
+ <div class="pk-credits">
412
+ <div v-for="cr in kit.credits.data" :key="cr.id" class="pk-credit">
413
+ <strong>{{ cr.name }}</strong>
414
+ <span>{{ cr.role }}</span>
415
+ <a v-if="cr.url" :href="cr.url" target="_blank" rel="noopener">↗</a>
416
+ </div>
216
417
  </div>
217
418
  </section>
218
419
 
219
- <!-- NEW: Ecossistema Mundo Gamer -->
220
- <section v-if="hasEcosystem" class="kit-block">
221
- <h2>{{ $t('kit.press.ecosystem') }}</h2>
222
- <div class="kit-eco">
223
- <div v-if="showcases.length" class="kit-eco-card full">
224
- <div class="kit-eco-h"><span class="ic">★</span>{{ $t('kit.press.showcases') }}</div>
225
- <div class="kit-sbadges">
226
- <span v-for="(s, i) in showcases" :key="i" class="kit-sbadge" :class="{ feat: s.featured }"><span class="medal">{{ s.featured ? '🏵️' : '🎮' }}</span>{{ s.name }}<span v-if="s.year"> {{ s.year }}</span></span>
420
+ <!-- Ecosystem -->
421
+ <section v-if="hasEcosystem" class="pk-section">
422
+ <h2 class="pk-section__title">{{ $t('press_kit.ecosystem') }}</h2>
423
+ <div class="pk-ecosystem">
424
+
425
+ <!-- Showcases -->
426
+ <div v-if="showcases.length" class="pk-eco-card pk-eco-card--full">
427
+ <h3 class="pk-eco-card__title">{{ $t('press_kit.showcases') }}</h3>
428
+ <div class="pk-showcases">
429
+ <span
430
+ v-for="(s, i) in showcases"
431
+ :key="i"
432
+ class="pk-showcase"
433
+ :class="{ featured: s.featured }"
434
+ >
435
+ {{ s.featured ? '🏵️' : '🎮' }} {{ s.name }}<em v-if="s.year"> {{ s.year }}</em>
436
+ </span>
227
437
  </div>
228
438
  </div>
229
- <div v-if="kit.ventures_url" class="kit-eco-card">
230
- <div class="kit-eco-h"><span class="ic">◈</span>MGN Ventures</div>
231
- <a class="kit-vrow" :href="kit.ventures_url" target="_blank" rel="noopener" @click="track('click')"><span class="vlogo">VENTURES</span><span class="vtxt">{{ $t('kit.press.ventures_text') }}</span></a>
232
- </div>
233
- <a v-if="kit.magazine_feature" class="kit-eco-card kit-mag" :href="kit.magazine_feature.url" target="_blank" rel="noopener" @click="track('click')">
234
- <div class="kit-eco-h" style="width:100%"><span class="ic">▤</span>MGN Magazine</div>
235
- <div class="kit-mag-row"><div class="mcover" :style="kit.magazine_feature.cover ? { backgroundImage: `url(${kit.magazine_feature.cover})` } : {}" /><div><div class="mtitle">{{ kit.magazine_feature.title }}</div><div class="mmeta">{{ kit.magazine_feature.issue }}</div></div></div>
236
- </a>
237
- <div v-if="kit.community_url" class="kit-eco-card full">
238
- <div class="kit-ccta">
239
- <div><div class="ctitle">{{ $t('kit.press.follow_community', { name: kit.name }) }}</div><div v-if="kit.community_followers" class="cmeta">{{ kit.community_followers }} {{ $t('kit.press.followers') }}</div></div>
240
- <a class="kit-btn kit-btn-primary" :href="kit.community_url" target="_blank" rel="noopener" @click="track('click')">{{ $t('kit.press.follow') }}</a>
439
+
440
+ <!-- Magazine feature -->
441
+ <a
442
+ v-if="kit.magazine_feature"
443
+ :href="kit.magazine_feature.url"
444
+ target="_blank"
445
+ rel="noopener"
446
+ class="pk-eco-card"
447
+ @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'magazine' } })"
448
+ >
449
+ <div class="pk-eco-mag">
450
+ <div
451
+ v-if="kit.magazine_feature.cover"
452
+ class="pk-eco-mag__cover"
453
+ :style="{ backgroundImage: `url(${kit.magazine_feature.cover})` }"
454
+ />
455
+ <div>
456
+ <p class="pk-eco-mag__title">{{ kit.magazine_feature.title }}</p>
457
+ <p class="pk-eco-mag__issue">{{ kit.magazine_feature.issue }}</p>
458
+ </div>
241
459
  </div>
460
+ </a>
461
+
462
+ <!-- Community follow -->
463
+ <div v-if="kit.community_url" class="pk-eco-card">
464
+ <p class="pk-eco-card__text">{{ $t('press_kit.follow_community_desc', { name: kit.name }) }}</p>
465
+ <a
466
+ :href="kit.community_url"
467
+ target="_blank"
468
+ rel="noopener"
469
+ class="pk-btn pk-btn--sm"
470
+ @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'community' } })"
471
+ >
472
+ {{ $t('press_kit.follow_community') }}
473
+ </a>
242
474
  </div>
243
- </div>
244
- </section>
245
475
 
246
- <section v-if="kit.press_contact_email" class="kit-block">
247
- <div class="kit-cta">
248
- <h2>{{ $t('kit.press.covering', { name: kit.name }) }}</h2>
249
- <p>{{ $t('kit.press.cta_text') }}</p>
250
- <a class="kit-btn kit-btn-primary" :href="`mailto:${kit.press_contact_email}`" @click="track('contact')">{{ $t('kit.press.request_key') }}</a>
476
+ <!-- Ventures -->
477
+ <a
478
+ v-if="kit.ventures_url"
479
+ :href="kit.ventures_url"
480
+ target="_blank"
481
+ rel="noopener"
482
+ class="pk-eco-card"
483
+ @click="trackPressKitEvent(slug, { event_type: 'click', metadata: { target: 'ventures' } })"
484
+ >
485
+ <p class="pk-eco-card__label">MGN Ventures</p>
486
+ <p class="pk-eco-card__text">{{ $t('press_kit.ventures_text') }}</p>
487
+ </a>
251
488
  </div>
252
489
  </section>
253
490
 
254
491
  </main>
255
492
  </div>
256
-
257
- <!-- ═══ Brand CTA ═══════════════════════════════════════════ -->
258
- <div class="kit-brand-footer">
259
- <div class="kit-brand-footer__inner">
260
- <div class="kit-brand-footer__left">
261
- <span class="kit-brand-footer__badge">MG</span>
262
- <div>
263
- <p class="kit-brand-footer__label">{{ $t('kit.press.made_with') }} <strong>Mundo Gamer Publishing</strong></p>
264
- <p class="kit-brand-footer__sub">{{ $t('kit.press.brand_sub') }}</p>
265
- </div>
266
- </div>
267
- <a
268
- :href="kit.create_kit_url || 'https://agency.mundogamer.network/dashboard/press-kit'"
269
- class="kit-btn kit-btn-primary kit-brand-footer__cta"
270
- target="_blank"
271
- rel="noopener"
272
- >
273
- {{ $t('kit.press.create_yours_cta') }} →
274
- </a>
275
- </div>
276
- </div>
277
493
  </div>
494
+
495
+ <!-- ═══ Brand footer ════════════════════════════════════════════ -->
496
+ <p class="pk-brand-footer">
497
+ {{ $t('press_kit.made_with') }} {{ $t('press_kit.brand_sub') }} —
498
+ <a href="https://agency.mundogamer.network/dashboard/press-kit" target="_blank" rel="noopener">{{ $t('press_kit.create_yours_cta') }}</a>
499
+ </p>
500
+
278
501
  </template>
502
+
503
+ <!-- ═══ Trailer Modal ══════════════════════════════════════════════ -->
504
+ <div
505
+ v-if="showTrailer && trailerEmbedUrl"
506
+ class="pk-modal"
507
+ role="dialog"
508
+ :aria-label="$t('press_kit.watch_trailer')"
509
+ @click.self="showTrailer = false"
510
+ @keydown.esc="showTrailer = false"
511
+ >
512
+ <button class="pk-modal__close" :aria-label="$t('common.close')" @click="showTrailer = false">×</button>
513
+ <iframe
514
+ :src="trailerEmbedUrl"
515
+ class="pk-modal__video"
516
+ frameborder="0"
517
+ allow="autoplay; encrypted-media"
518
+ allowfullscreen
519
+ />
520
+ </div>
279
521
  </div>
280
522
  </template>
281
523
 
282
524
  <style lang="scss" scoped>
283
- .kit-press { background: var(--kit-bg); color: var(--kit-text); min-height: 100vh; font-family: 'Inter', system-ui, sans-serif; }
284
- .kit-state { display: flex; align-items: center; justify-content: center; min-height: 60vh; color: var(--kit-muted); flex-direction: column; gap: 8px; }
285
- .kit-wrap { max-width: var(--kit-maxw); margin: 0 auto; padding: 0 24px; }
286
-
287
- .kit-cover { position: relative; min-height: 480px; display: flex; align-items: center; justify-content: center; text-align: center; overflow: hidden; border-bottom: 1px solid var(--kit-line); background: linear-gradient(135deg, #161b2a, #0f1320 55%, #1d1530) center/cover; }
288
- .kit-cover::after { content: ""; position: absolute; inset: 0; background: radial-gradient(circle at 50% 40%, transparent, var(--kit-bg) 95%); }
289
- .kit-cover-inner { position: relative; z-index: 2; padding: 60px 24px; display: flex; align-items: center; justify-content: center; gap: 44px; width: 100%; max-width: var(--kit-maxw); }
290
- .kit-cover-poster { width: 240px; flex-shrink: 0; aspect-ratio: 2/3; object-fit: cover; border: 1px solid rgba(255,255,255,.15); box-shadow: 0 24px 70px rgba(0,0,0,.65); background: var(--kit-surface-2); }
291
- .kit-cover-text { text-align: left; max-width: 560px; }
292
- .kit-cover-text h1 { font-family: 'Rajdhani', sans-serif; font-size: 72px; font-weight: 700; line-height: .95; }
293
- .kit-cover-logo-img { display: block; max-height: 150px; margin-bottom: 12px; }
294
- .kit-eyebrow { display: inline-block; background: var(--kit-accent); color: var(--kit-accent-ink); font-family: 'Rajdhani'; font-weight: 700; font-size: 12px; letter-spacing: 2px; text-transform: uppercase; padding: 5px 14px; margin-bottom: 18px; }
295
- .kit-tagline { font-size: 20px; color: #dce0e8; margin-top: 14px; }
296
- .kit-kicker { margin-top: 8px; font-family: 'Rajdhani'; letter-spacing: 4px; text-transform: uppercase; font-size: 13px; color: var(--kit-accent); font-weight: 600; }
297
- .kit-actions { display: flex; gap: 12px; justify-content: center; margin-top: 28px; flex-wrap: wrap; }
298
-
299
- .kit-btn { display: inline-flex; align-items: center; gap: 8px; font-family: 'Rajdhani'; font-weight: 700; letter-spacing: .5px; font-size: 15px; padding: 12px 22px; cursor: pointer; border: 1px solid transparent; text-transform: uppercase; text-decoration: none; transition: .15s; }
300
- .kit-btn-primary { background: var(--kit-accent); color: var(--kit-accent-ink); }
301
- .kit-btn-ghost { background: rgba(255,255,255,.05); border-color: var(--kit-line); color: var(--kit-text); }
302
- .kit-btn-ghost:hover { border-color: var(--kit-accent); color: var(--kit-accent); }
303
-
304
- .kit-layout { display: grid; grid-template-columns: 300px 1fr; gap: 48px; padding: 48px 0 80px; }
305
- .kit-sidebar { position: sticky; top: 24px; align-self: start; }
306
- .kit-card { background: var(--kit-surface); border: 1px solid var(--kit-line); }
307
- .kit-factsheet { padding: 22px; }
308
- .kit-fact-title { font-size: 13px; letter-spacing: 2px; text-transform: uppercase; color: var(--kit-accent); margin-bottom: 14px; font-weight: 700; }
309
- .kit-fact { display: flex; flex-direction: column; gap: 2px; padding: 10px 0; border-bottom: 1px solid var(--kit-line); }
310
- .kit-fact:last-child { border-bottom: none; }
311
- .kit-fact .k { font-size: 11px; text-transform: uppercase; letter-spacing: 1px; color: var(--kit-muted); }
312
- .kit-fact .v { font-size: 14px; font-weight: 600; text-decoration: none; color: var(--kit-text); }
313
- .kit-fact .v.accent { color: var(--kit-accent); }
314
- .kit-socials { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
315
- .kit-socials a { width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; background: var(--kit-surface-2); border: 1px solid var(--kit-line); font-size: 13px; color: var(--kit-muted); }
316
-
317
- .kit-main { display: flex; flex-direction: column; gap: 46px; min-width: 0; }
318
- .kit-block > h2, .kit-shead h2 { font-family: 'Inter'; font-size: 13px; letter-spacing: var(--kit-head-ls); text-transform: uppercase; color: var(--kit-muted); font-weight: 700; margin-bottom: 18px; display: flex; align-items: center; gap: 12px; }
319
- .kit-block > h2::after { content: ""; flex: 1; height: 1px; background: var(--kit-line); }
320
- .kit-lead { font-size: 16px; color: #c8cdd6; max-width: 70ch; }
321
- .kit-shead { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; }
322
- .kit-shead h2 { margin: 0; }
323
- .kit-dl { font-size: 12px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--kit-accent); border: 1px solid var(--kit-line); padding: 7px 14px; cursor: pointer; }
324
-
325
- .kit-features { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 28px; }
326
- .kit-feature { display: flex; gap: 10px; align-items: flex-start; font-size: 15px; }
327
- .kit-feature .m { color: var(--kit-accent); font-weight: 700; }
328
-
329
- .kit-gallery { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
330
- .kit-shot { aspect-ratio: 16/9; overflow: hidden; border: 1px solid var(--kit-line); background: var(--kit-surface-2); }
331
- .kit-shot img { width: 100%; height: 100%; object-fit: cover; }
332
-
333
- .kit-logos { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
334
- .kit-logo-tile { background: var(--kit-surface-2); border: 1px solid var(--kit-line); aspect-ratio: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; color: var(--kit-muted); font-size: 12px; text-decoration: none; }
335
- .kit-logo-tile .ic { font-size: 26px; color: var(--kit-accent); }
336
-
337
- .kit-articles { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
338
- .kit-article { background: var(--kit-surface); border: 1px solid var(--kit-line); overflow: hidden; display: flex; flex-direction: column; text-decoration: none; color: inherit; }
339
- .kit-article .thumb { aspect-ratio: 16/9; background: var(--kit-surface-2) center/cover; position: relative; }
340
- .kit-article .thumb .src { position: absolute; top: 8px; left: 8px; background: var(--kit-accent); color: var(--kit-accent-ink); font-size: 10px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; padding: 3px 8px; }
341
- .kit-article .thumb .src.ext { background: var(--kit-surface-2); color: var(--kit-muted); border: 1px solid var(--kit-line); }
342
- .kit-article .a-body { padding: 14px; }
343
- .kit-article h4 { font-size: 15px; font-weight: 600; line-height: 1.3; }
344
- .kit-article .meta { font-size: 12px; color: var(--kit-muted); margin-top: 8px; }
345
-
346
- .kit-creators { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
347
- .kit-creator { background: var(--kit-surface); border: 1px solid var(--kit-line); padding: 16px; text-align: center; text-decoration: none; color: inherit; }
348
- .kit-creator .av { width: 60px; height: 60px; margin: 0 auto 10px; background: var(--kit-surface-2) center/cover; border: 2px solid var(--kit-accent); }
349
- .kit-creator .cn { font-weight: 600; font-size: 14px; }
350
- .kit-creator .cp { font-size: 12px; color: var(--kit-muted); margin-top: 2px; }
351
- .kit-creator .cv { margin-top: 8px; font-size: 12px; color: var(--kit-accent); font-weight: 600; }
352
-
353
- .kit-team { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 28px; }
354
- .kit-member { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid var(--kit-line); font-size: 14px; }
355
- .kit-member .role { color: var(--kit-muted); }
356
-
357
- .kit-cta { background: linear-gradient(120deg, var(--kit-surface), var(--kit-surface-2)); border: 1px solid var(--kit-line); padding: 36px; text-align: center; }
358
- .kit-cta h2 { font-family: 'Rajdhani'; font-size: 28px; color: var(--kit-text); margin-bottom: 8px; }
359
- .kit-cta p { color: var(--kit-muted); margin-bottom: 20px; }
360
-
361
- /* Ecossistema Mundo Gamer */
362
- .kit-eco { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
363
- .kit-eco-card { background: var(--kit-surface); border: 1px solid var(--kit-line); padding: 20px; display: flex; flex-direction: column; gap: 14px; text-decoration: none; color: inherit; }
364
- .kit-eco-card.full { grid-column: 1 / -1; }
365
- .kit-eco-h { display: flex; align-items: center; gap: 10px; font-family: 'Rajdhani'; font-weight: 700; font-size: 15px; }
366
- .kit-eco-h .ic { width: 30px; height: 30px; background: var(--kit-accent); color: var(--kit-accent-ink); display: flex; align-items: center; justify-content: center; font-size: 14px; flex-shrink: 0; }
367
- .kit-sbadges { display: flex; flex-wrap: wrap; gap: 8px; }
368
- .kit-sbadge { display: flex; align-items: center; gap: 8px; background: var(--kit-surface-2); border: 1px solid var(--kit-line); padding: 8px 12px; font-size: 13px; }
369
- .kit-sbadge.feat { border-color: var(--kit-accent); background: linear-gradient(135deg, rgba(255,255,255,.06), transparent); }
370
- .kit-vrow { display: flex; align-items: center; gap: 10px; text-decoration: none; }
371
- .vlogo { font-family: 'Rajdhani'; font-weight: 700; color: var(--kit-accent); letter-spacing: 1px; font-size: 15px; }
372
- .vtxt { font-size: 13px; color: var(--kit-muted); }
373
- .kit-mag-row { display: flex; gap: 14px; align-items: center; }
374
- .mcover { width: 60px; aspect-ratio: 3/4; background: var(--kit-surface-2) center/cover; border: 1px solid var(--kit-line); flex-shrink: 0; }
375
- .mtitle { font-weight: 600; font-size: 14px; }
376
- .mmeta { font-size: 12px; color: var(--kit-muted); }
377
- .kit-ccta { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
378
- .ctitle { font-family: 'Rajdhani'; font-weight: 700; font-size: 16px; }
379
- .cmeta { font-size: 13px; color: var(--kit-muted); margin-top: 2px; }
380
-
381
- .kit-brand-footer { border-top: 1px solid var(--kit-line); background: var(--kit-surface); margin-top: 0; }
382
- .kit-brand-footer__inner { max-width: var(--kit-maxw); margin: 0 auto; padding: 28px 24px; display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
383
- .kit-brand-footer__left { display: flex; align-items: center; gap: 16px; }
384
- .kit-brand-footer__badge { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; background: var(--kit-accent); color: var(--kit-accent-ink); font-family: 'Rajdhani', sans-serif; font-weight: 700; font-size: 16px; letter-spacing: 1px; flex-shrink: 0; }
385
- .kit-brand-footer__label { font-size: 14px; font-weight: 600; color: var(--kit-text); margin: 0; }
386
- .kit-brand-footer__label strong { color: var(--kit-accent); }
387
- .kit-brand-footer__sub { font-size: 12px; color: var(--kit-muted); margin: 3px 0 0; }
388
- .kit-brand-footer__cta { white-space: nowrap; }
389
-
390
- @media (max-width: 880px) {
391
- .kit-layout { grid-template-columns: 1fr; gap: 32px; }
392
- .kit-sidebar { position: static; }
393
- .kit-cover-inner { flex-direction: column; gap: 24px; }
394
- .kit-cover-poster { width: 170px; }
395
- .kit-cover-text { text-align: center; }
396
- .kit-cover-text h1 { font-size: 46px; }
397
- .kit-features, .kit-team { grid-template-columns: 1fr; }
398
- .kit-gallery, .kit-logos, .kit-articles, .kit-creators { grid-template-columns: 1fr 1fr; }
525
+ .pk-page {
526
+ min-height: 100vh;
527
+ background: var(--background, #0e1015);
528
+ color: var(--text-primary, #fff);
529
+ }
530
+
531
+ // ── Loading ───────────────────────────────────────────────────────
532
+ .pk-loading {
533
+ display: flex;
534
+ justify-content: center;
535
+ align-items: center;
536
+ min-height: 60vh;
537
+ }
538
+
539
+ .pk-spinner {
540
+ width: 40px;
541
+ height: 40px;
542
+ border: 3px solid var(--divider, #2a2d35);
543
+ border-top-color: var(--primary, #fcb216);
544
+ animation: pk-spin 0.8s linear infinite;
545
+ }
546
+
547
+ @keyframes pk-spin { to { transform: rotate(360deg); } }
548
+
549
+ // ── Error ─────────────────────────────────────────────────────────
550
+ .pk-error {
551
+ text-align: center;
552
+ padding: 80px 20px;
553
+
554
+ h1 { font-size: 1.8rem; margin-bottom: 8px; }
555
+ p { color: var(--text-secondary, #888); margin-bottom: 24px; }
556
+ }
557
+
558
+ // ── Hero ─────────────────────────────────────────────────────────
559
+ .pk-hero {
560
+ position: relative;
561
+ min-height: 480px;
562
+ background-size: cover;
563
+ background-position: center;
564
+ background-color: var(--card-background, #191b20);
565
+ overflow: hidden;
566
+
567
+ @media (max-width: 768px) { min-height: 320px; }
568
+ }
569
+
570
+ .pk-hero__overlay {
571
+ position: absolute;
572
+ inset: 0;
573
+ background: linear-gradient(to top, rgba(0,0,0,0.92) 0%, rgba(0,0,0,0.15) 100%);
574
+ display: flex;
575
+ align-items: flex-end;
576
+ }
577
+
578
+ .pk-hero__inner {
579
+ max-width: 900px;
580
+ margin: 0 auto;
581
+ width: 100%;
582
+ padding: 48px 24px;
583
+
584
+ @media (max-width: 768px) { padding: 24px 16px; }
585
+ }
586
+
587
+ .pk-hero__logo {
588
+ margin-bottom: 16px;
589
+
590
+ img {
591
+ max-height: 80px;
592
+ max-width: 240px;
593
+ object-fit: contain;
594
+ }
595
+ }
596
+
597
+ .pk-hero__title {
598
+ font-size: 2.8rem;
599
+ font-weight: 700;
600
+ margin: 0 0 8px;
601
+ line-height: 1.1;
602
+
603
+ @media (max-width: 768px) { font-size: 1.8rem; }
604
+ }
605
+
606
+ .pk-hero__tagline {
607
+ font-size: 1.1rem;
608
+ color: rgba(255,255,255,0.75);
609
+ margin: 0 0 20px;
610
+ max-width: 600px;
611
+ }
612
+
613
+ .pk-hero__actions {
614
+ display: flex;
615
+ gap: 10px;
616
+ flex-wrap: wrap;
617
+ }
618
+
619
+ // ── Buttons ───────────────────────────────────────────────────────
620
+ .pk-btn {
621
+ display: inline-flex;
622
+ align-items: center;
623
+ gap: 6px;
624
+ background: var(--primary, #fcb216);
625
+ color: var(--primary-contrast, #13161c);
626
+ border: none;
627
+ padding: 10px 22px;
628
+ font-weight: 700;
629
+ font-size: 0.9rem;
630
+ cursor: pointer;
631
+ text-decoration: none;
632
+ transition: opacity 0.15s;
633
+
634
+ &:hover { opacity: 0.85; }
635
+
636
+ &--outline {
637
+ background: rgba(252, 178, 22, 0.12);
638
+ color: var(--primary, #fcb216);
639
+ border: 1px solid var(--primary, #fcb216);
640
+ }
641
+
642
+ &--ghost {
643
+ background: rgba(255,255,255,0.08);
644
+ color: var(--text-primary, #fff);
645
+ border: 1px solid rgba(255,255,255,0.2);
646
+ }
647
+
648
+ &--sm {
649
+ padding: 7px 16px;
650
+ font-size: 0.82rem;
651
+ }
652
+
653
+ &--full {
654
+ width: 100%;
655
+ justify-content: center;
656
+ margin-top: 10px;
657
+ }
658
+ }
659
+
660
+ // ── Container / Layout ────────────────────────────────────────────
661
+ .pk-container {
662
+ max-width: 1200px;
663
+ margin: 0 auto;
664
+ padding: 48px 16px;
665
+ }
666
+
667
+ .pk-layout {
668
+ display: grid;
669
+ grid-template-columns: 280px 1fr;
670
+ gap: 40px;
671
+ align-items: start;
672
+
673
+ @media (max-width: 900px) {
674
+ grid-template-columns: 1fr;
675
+ }
676
+ }
677
+
678
+ .pk-sidebar {
679
+ display: flex;
680
+ flex-direction: column;
681
+ gap: 20px;
682
+ position: sticky;
683
+ top: 24px;
684
+
685
+ @media (max-width: 900px) { position: static; }
686
+ }
687
+
688
+ .pk-main {
689
+ display: flex;
690
+ flex-direction: column;
691
+ gap: 48px;
692
+ }
693
+
694
+ // ── Card (sidebar) ────────────────────────────────────────────────
695
+ .pk-card {
696
+ background: var(--card-background, #191b20);
697
+ border: 1px solid var(--divider, #2a2d35);
698
+ padding: 20px;
699
+
700
+ &--accent {
701
+ border-color: var(--primary, #fcb216);
702
+ background: rgba(252, 178, 22, 0.05);
703
+ }
704
+
705
+ &__title {
706
+ font-size: 0.75rem;
707
+ text-transform: uppercase;
708
+ letter-spacing: 0.08em;
709
+ font-weight: 700;
710
+ color: var(--text-secondary, #888);
711
+ margin: 0 0 14px;
712
+ }
713
+
714
+ &__desc {
715
+ font-size: 0.82rem;
716
+ color: var(--text-secondary, #aaa);
717
+ line-height: 1.5;
718
+ margin: 0;
719
+ }
720
+ }
721
+
722
+ .pk-dl {
723
+ margin: 0;
724
+
725
+ dt {
726
+ font-size: 0.7rem;
727
+ text-transform: uppercase;
728
+ letter-spacing: 0.05em;
729
+ color: var(--text-secondary, #888);
730
+ margin-top: 10px;
731
+ }
732
+
733
+ dd {
734
+ margin: 3px 0 0;
735
+ font-size: 0.88rem;
736
+ color: var(--text-primary, #fff);
737
+ word-break: break-word;
738
+
739
+ a { color: var(--primary, #fcb216); text-decoration: none; }
740
+ }
741
+ }
742
+
743
+ .pk-links {
744
+ display: flex;
745
+ flex-direction: column;
746
+ gap: 8px;
747
+ }
748
+
749
+ .pk-link {
750
+ display: flex;
751
+ align-items: center;
752
+ gap: 8px;
753
+ color: var(--text-secondary, #aaa);
754
+ text-decoration: none;
755
+ font-size: 0.88rem;
756
+ padding: 6px 0;
757
+ border-bottom: 1px solid var(--divider, #2a2d35);
758
+ transition: color 0.15s;
759
+
760
+ &:last-child { border-bottom: none; }
761
+ &:hover { color: var(--primary, #fcb216); }
762
+ }
763
+
764
+ // ── Sections ──────────────────────────────────────────────────────
765
+ .pk-section {
766
+ &__head {
767
+ display: flex;
768
+ justify-content: space-between;
769
+ align-items: center;
770
+ flex-wrap: wrap;
771
+ gap: 10px;
772
+ margin-bottom: 16px;
773
+ padding-bottom: 10px;
774
+ border-bottom: 1px solid var(--divider, #2a2d35);
775
+ }
776
+
777
+ &__title {
778
+ font-size: 1.1rem;
779
+ font-weight: 700;
780
+ margin: 0 0 16px;
781
+ padding-bottom: 10px;
782
+ border-bottom: 1px solid var(--divider, #2a2d35);
783
+ }
784
+ }
785
+
786
+ .pk-prose {
787
+ font-size: 0.95rem;
788
+ line-height: 1.7;
789
+ color: var(--text-secondary, #ccc);
790
+
791
+ :deep(p) { margin-bottom: 12px; }
792
+ }
793
+
794
+ .pk-features {
795
+ list-style: none;
796
+ padding: 0;
797
+ margin: 0;
798
+ display: grid;
799
+ grid-template-columns: 1fr 1fr;
800
+ gap: 8px 24px;
801
+
802
+ @media (max-width: 600px) { grid-template-columns: 1fr; }
803
+
804
+ li {
805
+ display: flex;
806
+ align-items: flex-start;
807
+ gap: 8px;
808
+ font-size: 0.9rem;
809
+ color: var(--text-secondary, #ccc);
810
+
811
+ &::before {
812
+ content: '▸';
813
+ color: var(--primary, #fcb216);
814
+ flex-shrink: 0;
815
+ margin-top: 1px;
816
+ }
817
+ }
818
+ }
819
+
820
+ // ── Videos ────────────────────────────────────────────────────────
821
+ .pk-videos {
822
+ display: grid;
823
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
824
+ gap: 12px;
825
+ }
826
+
827
+ .pk-video-card {
828
+ background: var(--card-background, #191b20);
829
+ border: 1px solid var(--divider, #2a2d35);
830
+ cursor: pointer;
831
+ overflow: hidden;
832
+ transition: border-color 0.15s;
833
+
834
+ &:hover { border-color: var(--primary, #fcb216); }
835
+
836
+ &__thumb {
837
+ aspect-ratio: 16 / 9;
838
+ background: var(--divider, #2a2d35);
839
+ display: flex;
840
+ align-items: center;
841
+ justify-content: center;
842
+ font-size: 1.8rem;
843
+ color: var(--primary, #fcb216);
844
+ }
845
+
846
+ &__title {
847
+ display: block;
848
+ font-size: 0.8rem;
849
+ font-weight: 600;
850
+ padding: 8px 10px 2px;
851
+ color: var(--text-primary, #fff);
852
+ }
853
+
854
+ &__type {
855
+ display: block;
856
+ font-size: 0.7rem;
857
+ padding: 0 10px 8px;
858
+ color: var(--text-secondary, #888);
859
+ text-transform: uppercase;
860
+ letter-spacing: 0.04em;
861
+ }
862
+ }
863
+
864
+ // ── Asset filters ─────────────────────────────────────────────────
865
+ .pk-asset-filters {
866
+ display: flex;
867
+ gap: 6px;
868
+ flex-wrap: wrap;
869
+ }
870
+
871
+ .pk-filter {
872
+ background: var(--card-background, #191b20);
873
+ border: 1px solid var(--divider, #2a2d35);
874
+ color: var(--text-secondary, #888);
875
+ padding: 4px 12px;
876
+ font-size: 0.75rem;
877
+ cursor: pointer;
878
+ text-transform: capitalize;
879
+ transition: all 0.15s;
880
+
881
+ &:hover { color: var(--text-primary, #fff); }
882
+
883
+ &.active {
884
+ background: var(--primary, #fcb216);
885
+ border-color: var(--primary, #fcb216);
886
+ color: var(--primary-contrast, #13161c);
887
+ font-weight: 700;
888
+ }
889
+ }
890
+
891
+ // ── Assets grid ───────────────────────────────────────────────────
892
+ .pk-assets {
893
+ display: grid;
894
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
895
+ gap: 12px;
896
+ margin-top: 16px;
897
+ }
898
+
899
+ .pk-asset {
900
+ display: flex;
901
+ flex-direction: column;
902
+ background: var(--card-background, #191b20);
903
+ border: 1px solid var(--divider, #2a2d35);
904
+ text-decoration: none;
905
+ color: inherit;
906
+ transition: border-color 0.15s;
907
+
908
+ &:hover { border-color: var(--primary, #fcb216); }
909
+
910
+ &__thumb {
911
+ aspect-ratio: 16 / 9;
912
+ overflow: hidden;
913
+ background: var(--divider, #2a2d35);
914
+ display: flex;
915
+ align-items: center;
916
+ justify-content: center;
917
+ font-size: 1.5rem;
918
+ color: var(--text-secondary, #555);
919
+
920
+ img {
921
+ width: 100%;
922
+ height: 100%;
923
+ object-fit: cover;
924
+ display: block;
925
+ }
926
+ }
927
+
928
+ &__dl-icon { font-size: 1.4rem; color: var(--text-secondary, #555); }
929
+
930
+ &__body {
931
+ padding: 10px;
932
+ flex: 1;
933
+ display: flex;
934
+ flex-direction: column;
935
+ gap: 4px;
936
+ }
937
+
938
+ &__title {
939
+ font-size: 0.8rem;
940
+ font-weight: 600;
941
+ color: var(--text-primary, #fff);
942
+ }
943
+
944
+ &__size {
945
+ font-size: 0.7rem;
946
+ color: var(--text-secondary, #888);
947
+ }
948
+ }
949
+
950
+ .pk-empty {
951
+ color: var(--text-secondary, #888);
952
+ font-size: 0.9rem;
953
+ padding: 16px 0;
954
+ }
955
+
956
+ // ── Quotes ────────────────────────────────────────────────────────
957
+ .pk-quotes {
958
+ display: flex;
959
+ flex-direction: column;
960
+ gap: 16px;
961
+ }
962
+
963
+ .pk-quote {
964
+ border-left: 3px solid var(--primary, #fcb216);
965
+ padding: 12px 20px;
966
+ background: var(--card-background, #191b20);
967
+ margin: 0;
968
+
969
+ p {
970
+ font-size: 1rem;
971
+ font-style: italic;
972
+ color: var(--text-secondary, #ccc);
973
+ margin: 0 0 8px;
974
+ line-height: 1.6;
975
+ }
976
+
977
+ footer {
978
+ font-size: 0.8rem;
979
+ color: var(--text-secondary, #888);
980
+
981
+ a { color: var(--primary, #fcb216); text-decoration: none; }
982
+ }
983
+ }
984
+
985
+ // ── Articles ──────────────────────────────────────────────────────
986
+ .pk-articles {
987
+ display: grid;
988
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
989
+ gap: 14px;
990
+ }
991
+
992
+ .pk-article {
993
+ background: var(--card-background, #191b20);
994
+ border: 1px solid var(--divider, #2a2d35);
995
+ text-decoration: none;
996
+ color: inherit;
997
+ overflow: hidden;
998
+ transition: border-color 0.15s;
999
+ display: flex;
1000
+ flex-direction: column;
1001
+
1002
+ &:hover { border-color: var(--primary, #fcb216); }
1003
+
1004
+ &__thumb {
1005
+ aspect-ratio: 16 / 9;
1006
+ background: var(--divider, #2a2d35) center / cover;
1007
+ position: relative;
1008
+ }
1009
+
1010
+ &__src {
1011
+ position: absolute;
1012
+ top: 8px;
1013
+ left: 8px;
1014
+ background: var(--primary, #fcb216);
1015
+ color: var(--primary-contrast, #13161c);
1016
+ font-size: 0.65rem;
1017
+ font-weight: 700;
1018
+ letter-spacing: 0.05em;
1019
+ text-transform: uppercase;
1020
+ padding: 3px 8px;
1021
+
1022
+ &.external {
1023
+ background: var(--card-background, #191b20);
1024
+ color: var(--text-secondary, #888);
1025
+ border: 1px solid var(--divider, #2a2d35);
1026
+ }
1027
+ }
1028
+
1029
+ &__body {
1030
+ padding: 12px 14px;
1031
+ flex: 1;
1032
+ display: flex;
1033
+ flex-direction: column;
1034
+ gap: 6px;
1035
+ }
1036
+
1037
+ &__title {
1038
+ font-size: 0.88rem;
1039
+ font-weight: 600;
1040
+ line-height: 1.4;
1041
+ color: var(--text-primary, #fff);
1042
+ margin: 0;
1043
+ }
1044
+
1045
+ &__date {
1046
+ font-size: 0.75rem;
1047
+ color: var(--text-secondary, #888);
1048
+ }
1049
+ }
1050
+
1051
+ // ── Coverage ──────────────────────────────────────────────────────
1052
+ .pk-coverage {
1053
+ display: grid;
1054
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1055
+ gap: 12px;
1056
+ }
1057
+
1058
+ .pk-creator {
1059
+ display: flex;
1060
+ flex-direction: column;
1061
+ align-items: center;
1062
+ text-align: center;
1063
+ gap: 10px;
1064
+ padding: 20px 16px;
1065
+ background: var(--card-background, #191b20);
1066
+ border: 1px solid var(--divider, #2a2d35);
1067
+ text-decoration: none;
1068
+ color: inherit;
1069
+ transition: border-color 0.15s;
1070
+
1071
+ &:hover { border-color: var(--primary, #fcb216); }
1072
+
1073
+ &__avatar {
1074
+ width: 56px;
1075
+ height: 56px;
1076
+ background: var(--divider, #2a2d35) center / cover;
1077
+ border: 2px solid var(--primary, #fcb216);
1078
+ }
1079
+
1080
+ &__info {
1081
+ display: flex;
1082
+ flex-direction: column;
1083
+ gap: 2px;
1084
+
1085
+ strong { font-size: 0.9rem; color: var(--text-primary, #fff); }
1086
+ span { font-size: 0.78rem; color: var(--text-secondary, #888); }
1087
+ }
1088
+
1089
+ &__followers {
1090
+ font-size: 0.72rem !important;
1091
+ color: var(--primary, #fcb216) !important;
1092
+ font-weight: 600;
1093
+ }
1094
+
1095
+ &__label {
1096
+ font-size: 0.7rem;
1097
+ font-weight: 700;
1098
+ text-transform: uppercase;
1099
+ letter-spacing: 0.05em;
1100
+ color: var(--text-secondary, #888);
1101
+ border: 1px solid var(--divider, #2a2d35);
1102
+ padding: 2px 8px;
1103
+ }
1104
+ }
1105
+
1106
+ // ── Awards ────────────────────────────────────────────────────────
1107
+ .pk-awards {
1108
+ display: flex;
1109
+ flex-direction: column;
1110
+ gap: 10px;
1111
+ }
1112
+
1113
+ .pk-award {
1114
+ display: flex;
1115
+ align-items: center;
1116
+ gap: 12px;
1117
+ padding: 12px 16px;
1118
+ background: var(--card-background, #191b20);
1119
+ border: 1px solid var(--divider, #2a2d35);
1120
+
1121
+ &__star { color: var(--primary, #fcb216); font-size: 1.2rem; flex-shrink: 0; }
1122
+
1123
+ &__body {
1124
+ flex: 1;
1125
+ display: flex;
1126
+ flex-direction: column;
1127
+ gap: 2px;
1128
+
1129
+ strong { font-size: 0.9rem; color: var(--text-primary, #fff); }
1130
+ span { font-size: 0.8rem; color: var(--text-secondary, #888); }
1131
+ }
1132
+
1133
+ &__link { color: var(--primary, #fcb216); text-decoration: none; }
1134
+ }
1135
+
1136
+ // ── Team / Credits ─────────────────────────────────────────────────
1137
+ .pk-credits {
1138
+ display: grid;
1139
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1140
+ gap: 10px;
1141
+ }
1142
+
1143
+ .pk-credit {
1144
+ display: flex;
1145
+ flex-direction: column;
1146
+ gap: 2px;
1147
+ padding: 12px 14px;
1148
+ background: var(--card-background, #191b20);
1149
+ border: 1px solid var(--divider, #2a2d35);
1150
+
1151
+ strong { font-size: 0.9rem; color: var(--text-primary, #fff); }
1152
+ span { font-size: 0.78rem; color: var(--text-secondary, #888); }
1153
+
1154
+ a {
1155
+ color: var(--primary, #fcb216);
1156
+ text-decoration: none;
1157
+ font-size: 0.78rem;
1158
+ margin-top: 4px;
1159
+ }
1160
+ }
1161
+
1162
+ // ── Ecosystem ─────────────────────────────────────────────────────
1163
+ .pk-ecosystem {
1164
+ display: grid;
1165
+ grid-template-columns: 1fr 1fr;
1166
+ gap: 14px;
1167
+
1168
+ @media (max-width: 640px) { grid-template-columns: 1fr; }
1169
+ }
1170
+
1171
+ .pk-eco-card {
1172
+ background: var(--card-background, #191b20);
1173
+ border: 1px solid var(--divider, #2a2d35);
1174
+ padding: 20px;
1175
+ display: flex;
1176
+ flex-direction: column;
1177
+ gap: 10px;
1178
+ text-decoration: none;
1179
+ color: inherit;
1180
+ transition: border-color 0.15s;
1181
+
1182
+ &:hover { border-color: var(--primary, #fcb216); }
1183
+
1184
+ &--full { grid-column: 1 / -1; }
1185
+
1186
+ &__title {
1187
+ font-size: 0.75rem;
1188
+ text-transform: uppercase;
1189
+ letter-spacing: 0.07em;
1190
+ font-weight: 700;
1191
+ color: var(--text-secondary, #888);
1192
+ margin: 0 0 8px;
1193
+ }
1194
+
1195
+ &__label {
1196
+ font-size: 0.75rem;
1197
+ text-transform: uppercase;
1198
+ letter-spacing: 0.07em;
1199
+ font-weight: 700;
1200
+ color: var(--primary, #fcb216);
1201
+ margin: 0;
1202
+ }
1203
+
1204
+ &__text {
1205
+ font-size: 0.88rem;
1206
+ color: var(--text-secondary, #ccc);
1207
+ line-height: 1.5;
1208
+ margin: 0;
1209
+ }
1210
+ }
1211
+
1212
+ .pk-showcases {
1213
+ display: flex;
1214
+ flex-wrap: wrap;
1215
+ gap: 8px;
1216
+ }
1217
+
1218
+ .pk-showcase {
1219
+ display: flex;
1220
+ align-items: center;
1221
+ gap: 6px;
1222
+ background: var(--divider, #2a2d35);
1223
+ border: 1px solid var(--divider, #2a2d35);
1224
+ padding: 6px 12px;
1225
+ font-size: 0.82rem;
1226
+ color: var(--text-secondary, #ccc);
1227
+
1228
+ &.featured {
1229
+ border-color: var(--primary, #fcb216);
1230
+ background: rgba(252, 178, 22, 0.06);
1231
+ color: var(--text-primary, #fff);
1232
+ }
1233
+
1234
+ em { font-style: normal; color: var(--text-secondary, #888); margin-left: 4px; }
1235
+ }
1236
+
1237
+ .pk-eco-mag {
1238
+ display: flex;
1239
+ gap: 14px;
1240
+ align-items: center;
1241
+
1242
+ &__cover {
1243
+ width: 52px;
1244
+ aspect-ratio: 3 / 4;
1245
+ background: var(--divider, #2a2d35) center / cover;
1246
+ border: 1px solid var(--divider, #2a2d35);
1247
+ flex-shrink: 0;
1248
+ }
1249
+
1250
+ &__title {
1251
+ font-size: 0.88rem;
1252
+ font-weight: 600;
1253
+ color: var(--text-primary, #fff);
1254
+ margin: 0 0 4px;
1255
+ }
1256
+
1257
+ &__issue {
1258
+ font-size: 0.75rem;
1259
+ color: var(--text-secondary, #888);
1260
+ margin: 0;
1261
+ }
1262
+ }
1263
+
1264
+ // ── Brand footer ──────────────────────────────────────────────────
1265
+ .pk-brand-footer {
1266
+ text-align: center;
1267
+ font-size: 0.75rem;
1268
+ color: var(--text-secondary, #666);
1269
+ padding: 20px 16px;
1270
+ border-top: 1px solid var(--divider, #2a2d35);
1271
+ margin: 0;
1272
+
1273
+ strong { color: var(--text-secondary, #888); font-weight: 600; }
1274
+
1275
+ a {
1276
+ color: var(--text-secondary, #888);
1277
+ text-decoration: none;
1278
+ border-bottom: 1px solid var(--divider, #2a2d35);
1279
+ transition: color 0.15s, border-color 0.15s;
1280
+
1281
+ &:hover {
1282
+ color: var(--primary, #fcb216);
1283
+ border-color: var(--primary, #fcb216);
1284
+ }
1285
+ }
1286
+ }
1287
+
1288
+ // ── Trailer modal ─────────────────────────────────────────────────
1289
+ .pk-modal {
1290
+ position: fixed;
1291
+ inset: 0;
1292
+ background: rgba(0,0,0,0.92);
1293
+ z-index: 9000;
1294
+ display: flex;
1295
+ align-items: center;
1296
+ justify-content: center;
1297
+
1298
+ &__close {
1299
+ position: absolute;
1300
+ top: 16px;
1301
+ right: 20px;
1302
+ background: none;
1303
+ border: none;
1304
+ color: var(--text-primary, #fff);
1305
+ font-size: 2rem;
1306
+ cursor: pointer;
1307
+ z-index: 1;
1308
+ }
1309
+
1310
+ &__video {
1311
+ width: 80vw;
1312
+ max-width: 900px;
1313
+ aspect-ratio: 16 / 9;
1314
+ border: none;
1315
+ display: block;
1316
+ }
399
1317
  }
400
1318
  </style>