@vibecuting/video-project-core 0.1.26 → 0.1.27

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.
Files changed (213) hide show
  1. package/package.json +4 -4
  2. package/src/core/intro/_shared/intro-layout.test.ts +18 -0
  3. package/src/core/intro/_shared/intro-layout.ts +50 -0
  4. package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper-Horizontal.tsx +25 -0
  5. package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper-Landscape.tsx +25 -0
  6. package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper.stories.tsx +31 -0
  7. package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper.tsx +118 -0
  8. package/src/core/intro/cyberpunk-intro-holo/index.ts +11 -0
  9. package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper-Horizontal.tsx +24 -0
  10. package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper-Landscape.tsx +24 -0
  11. package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper.stories.tsx +30 -0
  12. package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper.tsx +108 -0
  13. package/src/core/intro/cyberpunk-intro-neon/index.ts +10 -0
  14. package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper-Horizontal.tsx +24 -0
  15. package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper-Landscape.tsx +24 -0
  16. package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper.stories.tsx +29 -0
  17. package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper.tsx +234 -0
  18. package/src/core/intro/default-cinematic-intro-bumper/index.ts +11 -0
  19. package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper-Horizontal.tsx +24 -0
  20. package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper-Landscape.tsx +24 -0
  21. package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper.stories.tsx +29 -0
  22. package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper.tsx +187 -0
  23. package/src/core/intro/default-festival-intro-bumper/index.ts +11 -0
  24. package/src/core/intro/default-intro-bumper/default-intro-bumper-Horizontal.tsx +24 -0
  25. package/src/core/intro/default-intro-bumper/default-intro-bumper-Landscape.tsx +24 -0
  26. package/src/core/intro/default-intro-bumper/default-intro-bumper.stories.tsx +41 -0
  27. package/src/core/intro/default-intro-bumper/default-intro-bumper.tsx +256 -0
  28. package/src/core/intro/default-intro-bumper/index.ts +11 -0
  29. package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper-Horizontal.tsx +24 -0
  30. package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper-Landscape.tsx +24 -0
  31. package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper.stories.tsx +29 -0
  32. package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper.tsx +122 -0
  33. package/src/core/intro/default-noir-intro-bumper/index.ts +11 -0
  34. package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper-Horizontal.tsx +24 -0
  35. package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper-Landscape.tsx +24 -0
  36. package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper.stories.tsx +29 -0
  37. package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper.tsx +181 -0
  38. package/src/core/intro/default-trailer-intro-bumper/index.ts +11 -0
  39. package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper-Horizontal.tsx +18 -0
  40. package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper-Landscape.tsx +18 -0
  41. package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper.stories.tsx +31 -0
  42. package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper.tsx +158 -0
  43. package/src/core/intro/documentary-intro-observation/index.ts +10 -0
  44. package/src/core/intro/family-intro-reunion/default-family-intro-bumper-Horizontal.tsx +18 -0
  45. package/src/core/intro/family-intro-reunion/default-family-intro-bumper-Landscape.tsx +18 -0
  46. package/src/core/intro/family-intro-reunion/default-family-intro-bumper.stories.tsx +43 -0
  47. package/src/core/intro/family-intro-reunion/default-family-intro-bumper.tsx +165 -0
  48. package/src/core/intro/family-intro-reunion/index.ts +10 -0
  49. package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper-Horizontal.tsx +1 -0
  50. package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper-Landscape.tsx +1 -0
  51. package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper.stories.tsx +30 -0
  52. package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper.tsx +105 -0
  53. package/src/core/intro/festival-intro-spotlight/index.ts +10 -0
  54. package/src/core/intro/index.test.ts +45 -0
  55. package/src/core/intro/index.ts +17 -0
  56. package/src/core/intro/noir-intro-city/default-noir-intro-bumper-Horizontal.tsx +24 -0
  57. package/src/core/intro/noir-intro-city/default-noir-intro-bumper-Landscape.tsx +24 -0
  58. package/src/core/intro/noir-intro-city/default-noir-intro-bumper.stories.tsx +31 -0
  59. package/src/core/intro/noir-intro-city/default-noir-intro-bumper.tsx +96 -0
  60. package/src/core/intro/noir-intro-city/index.ts +10 -0
  61. package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper-Horizontal.tsx +1 -0
  62. package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper-Landscape.tsx +1 -0
  63. package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper.stories.tsx +31 -0
  64. package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper.tsx +117 -0
  65. package/src/core/intro/noir-intro-deluxe/index.ts +10 -0
  66. package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper-Horizontal.tsx +1 -0
  67. package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper-Landscape.tsx +1 -0
  68. package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper.stories.tsx +48 -0
  69. package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper.tsx +105 -0
  70. package/src/core/intro/sci-fi-intro/index.ts +10 -0
  71. package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper-Horizontal.tsx +18 -0
  72. package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper-Landscape.tsx +18 -0
  73. package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper.stories.tsx +31 -0
  74. package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper.tsx +155 -0
  75. package/src/core/intro/thriller-intro-suspense/index.ts +10 -0
  76. package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper-Horizontal.tsx +1 -0
  77. package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper-Landscape.tsx +1 -0
  78. package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper.stories.tsx +30 -0
  79. package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper.tsx +104 -0
  80. package/src/core/intro/trailer-intro-premiere/index.ts +10 -0
  81. package/src/core/intro/travel-intro-journey/default-travel-intro-bumper-Horizontal.tsx +18 -0
  82. package/src/core/intro/travel-intro-journey/default-travel-intro-bumper-Landscape.tsx +18 -0
  83. package/src/core/intro/travel-intro-journey/default-travel-intro-bumper.stories.tsx +43 -0
  84. package/src/core/intro/travel-intro-journey/default-travel-intro-bumper.tsx +158 -0
  85. package/src/core/intro/travel-intro-journey/index.ts +10 -0
  86. package/src/core/intro/western-intro/default-western-intro-bumper-Horizontal.tsx +24 -0
  87. package/src/core/intro/western-intro/default-western-intro-bumper-Landscape.tsx +24 -0
  88. package/src/core/intro/western-intro/default-western-intro-bumper.stories.tsx +29 -0
  89. package/src/core/intro/western-intro/default-western-intro-bumper.tsx +146 -0
  90. package/src/core/intro/western-intro/index.ts +4 -0
  91. package/src/core/intro/western-intro-gangster/default-western-intro-bumper-Horizontal.tsx +25 -0
  92. package/src/core/intro/western-intro-gangster/default-western-intro-bumper-Landscape.tsx +25 -0
  93. package/src/core/intro/western-intro-gangster/default-western-intro-bumper.stories.tsx +31 -0
  94. package/src/core/intro/western-intro-gangster/default-western-intro-bumper.tsx +105 -0
  95. package/src/core/intro/western-intro-gangster/index.ts +11 -0
  96. package/src/core/outro/_shared/outro-layout.test.ts +32 -0
  97. package/src/core/outro/_shared/outro-layout.ts +72 -0
  98. package/src/core/outro/award-outro-celebration/default-award-outro-bumper-Horizontal.tsx +18 -0
  99. package/src/core/outro/award-outro-celebration/default-award-outro-bumper-Landscape.tsx +18 -0
  100. package/src/core/outro/award-outro-celebration/default-award-outro-bumper.stories.tsx +42 -0
  101. package/src/core/outro/award-outro-celebration/default-award-outro-bumper.tsx +152 -0
  102. package/src/core/outro/award-outro-celebration/index.ts +10 -0
  103. package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper-Horizontal.tsx +1 -0
  104. package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper-Landscape.tsx +1 -0
  105. package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper.stories.tsx +28 -0
  106. package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper.tsx +71 -0
  107. package/src/core/outro/blackout-outro-finale/index.ts +10 -0
  108. package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro-Horizontal.tsx +24 -0
  109. package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro-Landscape.tsx +24 -0
  110. package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro.stories.tsx +31 -0
  111. package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro.tsx +106 -0
  112. package/src/core/outro/credits-roll-outro-epic/index.ts +10 -0
  113. package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro-Horizontal.tsx +1 -0
  114. package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro-Landscape.tsx +1 -0
  115. package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro.stories.tsx +30 -0
  116. package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro.tsx +88 -0
  117. package/src/core/outro/credits-roll-outro-premium/index.ts +10 -0
  118. package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro-Horizontal.tsx +25 -0
  119. package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro-Landscape.tsx +25 -0
  120. package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro.stories.tsx +32 -0
  121. package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro.tsx +110 -0
  122. package/src/core/outro/credits-roll-outro-royal/index.ts +11 -0
  123. package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Horizontal.tsx +22 -0
  124. package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Landscape.tsx +22 -0
  125. package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper.stories.tsx +48 -0
  126. package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper.tsx +124 -0
  127. package/src/core/outro/default-blackout-outro-bumper/index.ts +11 -0
  128. package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro-Horizontal.tsx +22 -0
  129. package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro-Landscape.tsx +22 -0
  130. package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro.stories.tsx +48 -0
  131. package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro.tsx +208 -0
  132. package/src/core/outro/default-credits-roll-outro/index.ts +11 -0
  133. package/src/core/outro/default-epilogue-outro/default-epilogue-outro-Horizontal.tsx +22 -0
  134. package/src/core/outro/default-epilogue-outro/default-epilogue-outro-Landscape.tsx +22 -0
  135. package/src/core/outro/default-epilogue-outro/default-epilogue-outro.stories.tsx +48 -0
  136. package/src/core/outro/default-epilogue-outro/default-epilogue-outro.tsx +115 -0
  137. package/src/core/outro/default-epilogue-outro/index.ts +11 -0
  138. package/src/core/outro/default-outro-bumper/default-outro-bumper-Horizontal.tsx +22 -0
  139. package/src/core/outro/default-outro-bumper/default-outro-bumper-Landscape.tsx +22 -0
  140. package/src/core/outro/default-outro-bumper/default-outro-bumper.stories.tsx +48 -0
  141. package/src/core/outro/default-outro-bumper/default-outro-bumper.tsx +159 -0
  142. package/src/core/outro/default-outro-bumper/index.ts +11 -0
  143. package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper-Horizontal.tsx +22 -0
  144. package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper-Landscape.tsx +22 -0
  145. package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper.stories.tsx +48 -0
  146. package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper.tsx +183 -0
  147. package/src/core/outro/default-sunset-outro-bumper/index.ts +11 -0
  148. package/src/core/outro/festival-outro-encore/default-festival-outro-bumper-Horizontal.tsx +18 -0
  149. package/src/core/outro/festival-outro-encore/default-festival-outro-bumper-Landscape.tsx +18 -0
  150. package/src/core/outro/festival-outro-encore/default-festival-outro-bumper.stories.tsx +31 -0
  151. package/src/core/outro/festival-outro-encore/default-festival-outro-bumper.tsx +130 -0
  152. package/src/core/outro/festival-outro-encore/index.ts +10 -0
  153. package/src/core/outro/heist-outro/default-heist-outro-bumper-Horizontal.tsx +24 -0
  154. package/src/core/outro/heist-outro/default-heist-outro-bumper-Landscape.tsx +24 -0
  155. package/src/core/outro/heist-outro/default-heist-outro-bumper.stories.tsx +29 -0
  156. package/src/core/outro/heist-outro/default-heist-outro-bumper.tsx +160 -0
  157. package/src/core/outro/heist-outro/index.ts +4 -0
  158. package/src/core/outro/index.test.ts +88 -0
  159. package/src/core/outro/index.ts +73 -0
  160. package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper-Horizontal.tsx +18 -0
  161. package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper-Landscape.tsx +18 -0
  162. package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper.stories.tsx +42 -0
  163. package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper.tsx +158 -0
  164. package/src/core/outro/memoir-outro-reflection/index.ts +10 -0
  165. package/src/core/outro/romance-outro/default-romance-outro-bumper-Horizontal.tsx +1 -0
  166. package/src/core/outro/romance-outro/default-romance-outro-bumper-Landscape.tsx +1 -0
  167. package/src/core/outro/romance-outro/default-romance-outro-bumper.stories.tsx +48 -0
  168. package/src/core/outro/romance-outro/default-romance-outro-bumper.tsx +123 -0
  169. package/src/core/outro/romance-outro/index.ts +10 -0
  170. package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper-Horizontal.tsx +1 -0
  171. package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper-Landscape.tsx +1 -0
  172. package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper.stories.tsx +30 -0
  173. package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper.tsx +75 -0
  174. package/src/core/outro/sunset-outro-coda/index.ts +10 -0
  175. package/src/core/scene/slide/_shared/index.ts +27 -0
  176. package/src/core/scene/slide/_shared/media-templates.test.ts +47 -0
  177. package/src/core/scene/slide/_shared/media-templates.tsx +324 -0
  178. package/src/core/scene/slide/index.test.ts +28 -0
  179. package/src/core/scene/slide/index.ts +14 -0
  180. package/src/core/scene/slide/person-intro/default-person-intro-duo-slide.tsx +19 -0
  181. package/src/core/scene/slide/person-intro/default-person-intro-group-slide.tsx +168 -0
  182. package/src/core/scene/slide/person-intro/default-person-intro-quad-slide.tsx +19 -0
  183. package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.animated.stories.tsx +47 -0
  184. package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.stories.tsx +46 -0
  185. package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.tsx +302 -0
  186. package/src/core/scene/slide/person-intro/default-person-intro-slide-Landscape.tsx +20 -0
  187. package/src/core/scene/slide/person-intro/default-person-intro-slide.animated.stories.tsx +126 -0
  188. package/src/core/scene/slide/person-intro/default-person-intro-slide.stories.tsx +119 -0
  189. package/src/core/scene/slide/person-intro/default-person-intro-slide.tsx +363 -0
  190. package/src/core/scene/slide/person-intro/default-person-intro-trio-slide.tsx +19 -0
  191. package/src/core/scene/slide/person-intro/index.ts +8 -0
  192. package/src/core/scene/slide/photo-album/default-photo-album-multi-slide.tsx +19 -0
  193. package/src/core/scene/slide/photo-album/default-photo-album-pair-slide.tsx +19 -0
  194. package/src/core/scene/slide/photo-album/default-photo-album-single-slide.tsx +19 -0
  195. package/src/core/scene/slide/photo-album/default-photo-album-slide-Horizontal.animated.stories.tsx +26 -0
  196. package/src/core/scene/slide/photo-album/default-photo-album-slide-Horizontal.stories.tsx +25 -0
  197. package/src/core/scene/slide/photo-album/default-photo-album-slide-Horizontal.tsx +20 -0
  198. package/src/core/scene/slide/photo-album/default-photo-album-slide-Landscape.tsx +20 -0
  199. package/src/core/scene/slide/photo-album/default-photo-album-slide.animated.stories.tsx +94 -0
  200. package/src/core/scene/slide/photo-album/default-photo-album-slide.stories.tsx +87 -0
  201. package/src/core/scene/slide/photo-album/default-photo-album-slide.tsx +414 -0
  202. package/src/core/scene/slide/photo-album/index.ts +7 -0
  203. package/src/core/scene/slide/video-showcase/default-video-showcase-multi-slide.tsx +195 -0
  204. package/src/core/scene/slide/video-showcase/default-video-showcase-slide-Horizontal.tsx +212 -0
  205. package/src/core/scene/slide/video-showcase/default-video-showcase-slide-Landscape.tsx +20 -0
  206. package/src/core/scene/slide/video-showcase/default-video-showcase-slide.animated.stories.tsx +78 -0
  207. package/src/core/scene/slide/video-showcase/default-video-showcase-slide.stories.tsx +74 -0
  208. package/src/core/scene/slide/video-showcase/default-video-showcase-slide.tsx +365 -0
  209. package/src/core/scene/slide/video-showcase/index.ts +5 -0
  210. package/src/core/intro/default-intro-bumper.stories.tsx +0 -19
  211. package/src/core/intro/default-intro-bumper.tsx +0 -218
  212. package/src/core/outro/default-outro-bumper.stories.tsx +0 -19
  213. package/src/core/outro/default-outro-bumper.tsx +0 -218
@@ -0,0 +1,117 @@
1
+ import type { ReactNode } from 'react'
2
+
3
+ import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { BaseRemotionScene, type BaseRemotionSceneProps, useRemotionSceneRuntime } from '../../../base'
6
+ import { useSceneMotion } from '../../../base'
7
+ import { getIntroBodyMaxWidth, getIntroLineClamp } from '../_shared/intro-layout'
8
+
9
+ export interface DefaultNoirIntroBumperDeluxeProps extends BaseRemotionSceneProps {
10
+ title: string
11
+ subtitle?: string
12
+ kicker?: string
13
+ creditLine?: string
14
+ footer?: string
15
+ accent?: string
16
+ secondaryAccent?: string
17
+ textColor?: string
18
+ children?: ReactNode
19
+ }
20
+
21
+ export const componentMetadata = defineComponentProjectComponentMetadata({
22
+ name: 'DefaultNoirIntroBumperDeluxe',
23
+ description: 'Noir deluxe film-style intro bumper',
24
+ sourceFile: 'src/core/intro/noir-intro-deluxe/default-noir-intro-bumper.tsx',
25
+ aspectRatio: '16:9',
26
+ sceneType: 'intro',
27
+ tags: ['intro', 'bumper', 'noir', 'deluxe', 'thriller'],
28
+ propsTypeName: 'DefaultNoirIntroBumperDeluxeProps',
29
+ })
30
+
31
+ export function DefaultNoirIntroBumperDeluxe({
32
+ id,
33
+ name,
34
+ title,
35
+ subtitle,
36
+ kicker,
37
+ creditLine,
38
+ footer,
39
+ accent,
40
+ secondaryAccent,
41
+ textColor,
42
+ children,
43
+ }: DefaultNoirIntroBumperDeluxeProps) {
44
+ const runtime = useRemotionSceneRuntime()
45
+ const motion = useSceneMotion()
46
+ const portrait = runtime.height > runtime.width
47
+
48
+ return (
49
+ <BaseRemotionScene
50
+ id={id}
51
+ name={name}
52
+ style={{
53
+ background: portrait
54
+ ? `linear-gradient(180deg, #050505 0%, ${accent ?? '#111111'} 44%, #000000 100%)`
55
+ : `radial-gradient(circle at 50% 20%, ${secondaryAccent ?? 'rgba(255,255,255,0.14)'} 0%, ${accent ?? '#050505'} 42%, #000000 100%)`,
56
+ color: textColor ?? '#f5f5f5',
57
+ display: 'grid',
58
+ placeItems: 'center',
59
+ padding: Math.round(runtime.height * 0.07),
60
+ fontFamily: `Georgia, 'Times New Roman', serif`,
61
+ }}
62
+ >
63
+ <section
64
+ style={{
65
+ position: 'relative',
66
+ zIndex: 1,
67
+ width: '100%',
68
+ height: '100%',
69
+ display: 'grid',
70
+ gridTemplateColumns: portrait ? '1fr' : 'minmax(0, 1.08fr) minmax(260px, 0.92fr)',
71
+ gap: portrait ? 18 : 26,
72
+ alignItems: 'center',
73
+ minWidth: 0,
74
+ minHeight: 0,
75
+ }}
76
+ >
77
+ <div style={{ display: 'grid', gap: 12, textAlign: portrait ? 'center' : 'left', minWidth: 0 }}>
78
+ <p style={{ margin: 0, fontSize: Math.round(runtime.height * 0.017), letterSpacing: '0.4em', textTransform: 'uppercase', opacity: 0.6 }}>
79
+ {kicker ?? 'Noir Deluxe'}
80
+ </p>
81
+ <h1
82
+ style={{
83
+ margin: 0,
84
+ fontSize: portrait ? Math.round(runtime.height * 0.08) : Math.round(runtime.height * 0.072),
85
+ lineHeight: 0.9,
86
+ letterSpacing: '-0.08em',
87
+ textTransform: 'uppercase',
88
+ transform: motion.isAnimation ? `translate3d(0, ${(1 - motion.progress) * 10}px, 0)` : 'none',
89
+ }}
90
+ >
91
+ {title}
92
+ </h1>
93
+ {subtitle ? <p style={{ margin: 0, maxWidth: getIntroBodyMaxWidth(runtime.width, portrait, 0.44, 1, { min: 240, max: 700 }), fontSize: Math.round(runtime.height * 0.024), lineHeight: 1.6, opacity: 0.8, ...getIntroLineClamp(portrait ? 4 : 3) }}>{subtitle}</p> : null}
94
+ <div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: portrait ? 'center' : 'flex-start', gap: 10 }}>
95
+ {creditLine ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.22em', textTransform: 'uppercase', opacity: 0.72 }}>{creditLine}</span> : null}
96
+ {footer ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.52 }}>{footer}</span> : null}
97
+ </div>
98
+ </div>
99
+
100
+ <div style={{ display: 'grid', alignContent: 'center', justifyItems: portrait ? 'center' : 'end', minWidth: 0 }}>
101
+ <div style={{ width: portrait ? '76%' : '100%', minWidth: 0, aspectRatio: '4 / 5', border: '1px solid rgba(255,255,255,0.12)', background: 'linear-gradient(180deg, rgba(255,255,255,0.04) 0%, rgba(0,0,0,0.18) 40%, rgba(0,0,0,0.86) 100%)', position: 'relative', overflow: 'hidden', minHeight: portrait ? 200 : 0 }}>
102
+ <div style={{ position: 'absolute', inset: 18, border: '1px solid rgba(255,255,255,0.08)' }} />
103
+ <div style={{ position: 'absolute', inset: '18% 12%', border: '1px solid rgba(255,255,255,0.08)', transform: motion.isAnimation ? `scale(${0.98 + motion.progress * 0.02})` : 'none' }} />
104
+ <div style={{ position: 'absolute', left: 18, right: 18, top: 18, height: 2, background: 'linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.84) 50%, transparent 100%)' }} />
105
+ <div style={{ position: 'absolute', left: 18, right: 18, bottom: 18, display: 'grid', gap: 8 }}>
106
+ <div style={{ fontSize: Math.round(runtime.height * 0.017), letterSpacing: '0.24em', textTransform: 'uppercase', opacity: 0.58 }}>Smoke and Shadows</div>
107
+ <div style={{ fontSize: Math.round(runtime.height * 0.029), fontWeight: 800, letterSpacing: '-0.06em' }}>A case worth remembering</div>
108
+ </div>
109
+ </div>
110
+ </div>
111
+ </section>
112
+ {children ? <div style={{ position: 'absolute', inset: 'auto 0 8%', display: 'grid', placeItems: 'center' }}>{children}</div> : null}
113
+ </BaseRemotionScene>
114
+ )
115
+ }
116
+
117
+ VideoComponent(componentMetadata)(DefaultNoirIntroBumperDeluxe)
@@ -0,0 +1,10 @@
1
+ export { DefaultNoirIntroBumperDeluxe } from './default-noir-intro-bumper'
2
+ export { componentMetadata } from './default-noir-intro-bumper'
3
+ export {
4
+ DefaultNoirIntroBumperDeluxeLandscape,
5
+ componentMetadata as DefaultNoirIntroBumperDeluxeLandscapeMetadata,
6
+ } from './default-noir-intro-bumper-Landscape'
7
+ export {
8
+ DefaultNoirIntroBumperDeluxeHorizontal,
9
+ componentMetadata as DefaultNoirIntroBumperDeluxeHorizontalMetadata,
10
+ } from './default-noir-intro-bumper-Horizontal'
@@ -0,0 +1 @@
1
+ export { DefaultSciFiIntroBumper as DefaultSciFiIntroBumperHorizontal, componentMetadata } from './default-sci-fi-intro-bumper'
@@ -0,0 +1 @@
1
+ export { DefaultSciFiIntroBumper as DefaultSciFiIntroBumperLandscape, componentMetadata } from './default-sci-fi-intro-bumper'
@@ -0,0 +1,48 @@
1
+ import { DefaultSciFiIntroBumperHorizontal } from './default-sci-fi-intro-bumper-Horizontal'
2
+ import { DefaultSciFiIntroBumperLandscape } from './default-sci-fi-intro-bumper-Landscape'
3
+
4
+ const args = {
5
+ kicker: 'Quantum Opening',
6
+ title: 'Starlight Protocol',
7
+ subtitle: 'A futuristic title bumper built for launch reels, tech narratives, and space-opera openings.',
8
+ creditLine: 'Prepared by Vibecuting',
9
+ footer: 'Opening Sequence',
10
+ accent: '#020617',
11
+ secondaryAccent: '#22d3ee',
12
+ }
13
+
14
+ const meta = {
15
+ title: 'core/intro/sci-fi-intro/DefaultSciFiIntroBumper',
16
+ component: DefaultSciFiIntroBumperLandscape,
17
+ args,
18
+ }
19
+
20
+ export default meta
21
+
22
+ export const Landscape = {
23
+ parameters: {
24
+ scenePreviewAspectRatio: '16:9',
25
+ },
26
+ }
27
+
28
+ export const LandscapeAnimated = {
29
+ parameters: {
30
+ scenePreviewAspectRatio: '16:9',
31
+ scenePreviewMode: 'animation',
32
+ },
33
+ }
34
+
35
+ export const Horizontal = {
36
+ render: (storyArgs: typeof args) => <DefaultSciFiIntroBumperHorizontal {...storyArgs} />,
37
+ parameters: {
38
+ scenePreviewAspectRatio: '9:16',
39
+ },
40
+ }
41
+
42
+ export const HorizontalAnimated = {
43
+ render: (storyArgs: typeof args) => <DefaultSciFiIntroBumperHorizontal {...storyArgs} />,
44
+ parameters: {
45
+ scenePreviewAspectRatio: '9:16',
46
+ scenePreviewMode: 'animation',
47
+ },
48
+ }
@@ -0,0 +1,105 @@
1
+ import type { ReactNode } from 'react'
2
+
3
+ import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { BaseRemotionScene, type BaseRemotionSceneProps, useRemotionSceneRuntime } from '../../../base'
6
+ import { useSceneMotion } from '../../../base'
7
+ import { getIntroBodyMaxWidth, getIntroLineClamp, getIntroPanelMinHeight } from '../_shared/intro-layout'
8
+
9
+ export interface DefaultSciFiIntroBumperProps extends BaseRemotionSceneProps {
10
+ title: string
11
+ subtitle?: string
12
+ kicker?: string
13
+ creditLine?: string
14
+ footer?: string
15
+ accent?: string
16
+ secondaryAccent?: string
17
+ textColor?: string
18
+ children?: ReactNode
19
+ }
20
+
21
+ export const componentMetadata = defineComponentProjectComponentMetadata({
22
+ name: 'DefaultSciFiIntroBumper',
23
+ description: 'Sci-fi film-style intro bumper',
24
+ sourceFile: 'src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper.tsx',
25
+ aspectRatio: '16:9',
26
+ sceneType: 'intro',
27
+ tags: ['intro', 'bumper', 'sci-fi', 'space', 'futuristic'],
28
+ propsTypeName: 'DefaultSciFiIntroBumperProps',
29
+ })
30
+
31
+ export function DefaultSciFiIntroBumper({
32
+ id,
33
+ name,
34
+ title,
35
+ subtitle,
36
+ kicker,
37
+ creditLine,
38
+ footer,
39
+ accent,
40
+ secondaryAccent,
41
+ textColor,
42
+ children,
43
+ }: DefaultSciFiIntroBumperProps) {
44
+ const runtime = useRemotionSceneRuntime()
45
+ const motion = useSceneMotion()
46
+ const portrait = runtime.height > runtime.width
47
+
48
+ return (
49
+ <BaseRemotionScene
50
+ id={id}
51
+ name={name}
52
+ style={{
53
+ background: portrait
54
+ ? `linear-gradient(180deg, ${accent ?? '#0f172a'} 0%, #020617 34%, #000000 100%)`
55
+ : `radial-gradient(circle at 16% 18%, ${secondaryAccent ?? '#22d3ee'} 0%, ${accent ?? '#020617'} 42%, #000000 100%)`,
56
+ color: textColor ?? '#ecfeff',
57
+ display: 'grid',
58
+ placeItems: 'center',
59
+ padding: Math.round(runtime.height * 0.068),
60
+ }}
61
+ >
62
+ <section
63
+ style={{
64
+ width: '100%',
65
+ height: '100%',
66
+ display: 'grid',
67
+ gridTemplateColumns: portrait ? '1fr' : 'minmax(0, 1.08fr) minmax(260px, 0.92fr)',
68
+ gap: portrait ? 18 : 26,
69
+ alignItems: 'center',
70
+ minWidth: 0,
71
+ minHeight: 0,
72
+ }}
73
+ >
74
+ <div style={{ display: 'grid', gap: 12, textAlign: portrait ? 'center' : 'left', minWidth: 0 }}>
75
+ <p style={{ margin: 0, fontSize: Math.round(runtime.height * 0.017), letterSpacing: '0.34em', textTransform: 'uppercase', opacity: 0.66 }}>
76
+ {kicker ?? 'Signal Lock'}
77
+ </p>
78
+ <h1 style={{ margin: 0, fontSize: portrait ? Math.round(runtime.height * 0.078) : Math.round(runtime.height * 0.072), lineHeight: 0.9, letterSpacing: '-0.08em', textTransform: 'uppercase', transform: motion.isAnimation ? `translate3d(0, ${(1 - motion.progress) * 8}px, 0)` : 'none' }}>
79
+ {title}
80
+ </h1>
81
+ {subtitle ? <p style={{ margin: 0, maxWidth: getIntroBodyMaxWidth(runtime.width, portrait, 0.42, 1, { min: 240, max: 680 }), fontSize: Math.round(runtime.height * 0.023), lineHeight: 1.56, opacity: 0.82, ...getIntroLineClamp(portrait ? 4 : 3) }}>{subtitle}</p> : null}
82
+ <div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: portrait ? 'center' : 'flex-start', gap: 10 }}>
83
+ {creditLine ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.72 }}>{creditLine}</span> : null}
84
+ {footer ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.52 }}>{footer}</span> : null}
85
+ </div>
86
+ </div>
87
+
88
+ <div style={{ display: 'grid', alignContent: 'center', justifyItems: portrait ? 'center' : 'end', minWidth: 0 }}>
89
+ <div style={{ width: portrait ? '78%' : '100%', minWidth: 0, aspectRatio: '4 / 5', border: '1px solid rgba(236,254,255,0.14)', background: 'linear-gradient(145deg, rgba(34,211,238,0.2) 0%, rgba(15,23,42,0.3) 36%, rgba(2,6,23,0.96) 100%)', position: 'relative', overflow: 'hidden', minHeight: getIntroPanelMinHeight(runtime.height, portrait, 0.3, 0.24, { min: 180, max: 320 }) }}>
90
+ <div style={{ position: 'absolute', inset: 16, border: '1px solid rgba(236,254,255,0.1)' }} />
91
+ <div style={{ position: 'absolute', inset: '18% 12%', border: '1px solid rgba(34,211,238,0.18)', borderRadius: 9999, transform: motion.isAnimation ? `scale(${0.96 + motion.progress * 0.04})` : 'none' }} />
92
+ <div style={{ position: 'absolute', left: 18, right: 18, top: 18, height: 2, background: 'linear-gradient(90deg, transparent 0%, rgba(34,211,238,0.95) 50%, transparent 100%)' }} />
93
+ <div style={{ position: 'absolute', left: 18, right: 18, bottom: 18, display: 'grid', gap: 8, color: '#ecfeff' }}>
94
+ <div style={{ fontSize: Math.round(runtime.height * 0.017), letterSpacing: '0.24em', textTransform: 'uppercase', opacity: 0.58 }}>Deep Space Title Card</div>
95
+ <div style={{ fontSize: Math.round(runtime.height * 0.029), fontWeight: 800, letterSpacing: '-0.06em' }}>Launch sequence engaged</div>
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </section>
100
+ {children ? <div style={{ position: 'absolute', inset: 'auto 0 8%', display: 'grid', placeItems: 'center' }}>{children}</div> : null}
101
+ </BaseRemotionScene>
102
+ )
103
+ }
104
+
105
+ VideoComponent(componentMetadata)(DefaultSciFiIntroBumper)
@@ -0,0 +1,10 @@
1
+ export { DefaultSciFiIntroBumper } from './default-sci-fi-intro-bumper'
2
+ export { componentMetadata } from './default-sci-fi-intro-bumper'
3
+ export {
4
+ DefaultSciFiIntroBumperLandscape,
5
+ componentMetadata as DefaultSciFiIntroBumperLandscapeMetadata,
6
+ } from './default-sci-fi-intro-bumper-Landscape'
7
+ export {
8
+ DefaultSciFiIntroBumperHorizontal,
9
+ componentMetadata as DefaultSciFiIntroBumperHorizontalMetadata,
10
+ } from './default-sci-fi-intro-bumper-Horizontal'
@@ -0,0 +1,18 @@
1
+ import type { ComponentProps } from 'react'
2
+
3
+ import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { DefaultThrillerIntroBumper, componentMetadata as baseComponentMetadata } from './default-thriller-intro-bumper'
6
+
7
+ export const componentMetadata = defineComponentProjectComponentMetadata({
8
+ ...baseComponentMetadata,
9
+ name: 'DefaultThrillerIntroBumperHorizontal',
10
+ aspectRatio: '9:16',
11
+ sourceFile: 'src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper-Horizontal.tsx',
12
+ })
13
+
14
+ export const DefaultThrillerIntroBumperHorizontal = VideoComponent(componentMetadata)(
15
+ function DefaultThrillerIntroBumperHorizontal(props: ComponentProps<typeof DefaultThrillerIntroBumper>) {
16
+ return <DefaultThrillerIntroBumper {...props} />
17
+ },
18
+ )
@@ -0,0 +1,18 @@
1
+ import type { ComponentProps } from 'react'
2
+
3
+ import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { DefaultThrillerIntroBumper, componentMetadata as baseComponentMetadata } from './default-thriller-intro-bumper'
6
+
7
+ export const componentMetadata = defineComponentProjectComponentMetadata({
8
+ ...baseComponentMetadata,
9
+ name: 'DefaultThrillerIntroBumperLandscape',
10
+ aspectRatio: '16:9',
11
+ sourceFile: 'src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper-Landscape.tsx',
12
+ })
13
+
14
+ export const DefaultThrillerIntroBumperLandscape = VideoComponent(componentMetadata)(
15
+ function DefaultThrillerIntroBumperLandscape(props: ComponentProps<typeof DefaultThrillerIntroBumper>) {
16
+ return <DefaultThrillerIntroBumper {...props} />
17
+ },
18
+ )
@@ -0,0 +1,31 @@
1
+ import { DefaultThrillerIntroBumperHorizontal } from './default-thriller-intro-bumper-Horizontal'
2
+ import { DefaultThrillerIntroBumperLandscape } from './default-thriller-intro-bumper-Landscape'
3
+
4
+ const args = {
5
+ kicker: 'Critical Night',
6
+ title: 'Last Transmission',
7
+ subtitle: 'A suspense dossier with alert cards, threat rails, and a colder editorial tone.',
8
+ creditLine: 'A Vibecuting Original',
9
+ footer: 'Opening Sequence',
10
+ accent: '#020617',
11
+ secondaryAccent: '#dc2626',
12
+ }
13
+
14
+ const meta = {
15
+ title: 'core/intro/thriller-intro-suspense/DefaultThrillerIntroBumperLandscape',
16
+ component: DefaultThrillerIntroBumperLandscape,
17
+ args,
18
+ }
19
+
20
+ export default meta
21
+
22
+ export const Default = {}
23
+ export const Animated = { parameters: { scenePreviewMode: 'animation' } }
24
+ export const Horizontal = {
25
+ render: (storyArgs: typeof args) => <DefaultThrillerIntroBumperHorizontal {...storyArgs} />,
26
+ parameters: { scenePreviewAspectRatio: '9:16' },
27
+ }
28
+ export const HorizontalAnimated = {
29
+ render: (storyArgs: typeof args) => <DefaultThrillerIntroBumperHorizontal {...storyArgs} />,
30
+ parameters: { scenePreviewMode: 'animation', scenePreviewAspectRatio: '9:16' },
31
+ }
@@ -0,0 +1,155 @@
1
+ import type { ReactNode } from 'react'
2
+
3
+ import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { BaseRemotionScene, type BaseRemotionSceneProps, useRemotionSceneRuntime } from '../../../base'
6
+ import { useSceneMotion } from '../../../base'
7
+ import { getIntroBodyMaxWidth, getIntroLineClamp, getIntroPanelMinHeight } from '../_shared/intro-layout'
8
+
9
+ export interface DefaultThrillerIntroBumperProps extends BaseRemotionSceneProps {
10
+ title: string
11
+ subtitle?: string
12
+ kicker?: string
13
+ creditLine?: string
14
+ footer?: string
15
+ accent?: string
16
+ secondaryAccent?: string
17
+ textColor?: string
18
+ children?: ReactNode
19
+ }
20
+
21
+ export const componentMetadata = defineComponentProjectComponentMetadata({
22
+ name: 'DefaultThrillerIntroBumper',
23
+ description: 'Thriller intro with an alert dossier and tension board layout',
24
+ sourceFile: 'src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper.tsx',
25
+ aspectRatio: '16:9',
26
+ sceneType: 'intro',
27
+ tags: ['intro', 'bumper', 'thriller', 'suspense'],
28
+ propsTypeName: 'DefaultThrillerIntroBumperProps',
29
+ })
30
+
31
+ export function DefaultThrillerIntroBumper({
32
+ id,
33
+ name,
34
+ title,
35
+ subtitle,
36
+ kicker,
37
+ creditLine,
38
+ footer,
39
+ accent,
40
+ secondaryAccent,
41
+ textColor,
42
+ children,
43
+ }: DefaultThrillerIntroBumperProps) {
44
+ const runtime = useRemotionSceneRuntime()
45
+ const motion = useSceneMotion()
46
+ const portrait = runtime.height > runtime.width
47
+
48
+ const text = textColor ?? '#f8fafc'
49
+ const bg = accent ?? '#030712'
50
+ const glow = secondaryAccent ?? '#dc2626'
51
+
52
+ return (
53
+ <BaseRemotionScene
54
+ id={id}
55
+ name={name}
56
+ style={{
57
+ background: portrait
58
+ ? `linear-gradient(180deg, #020617 0%, ${bg} 45%, #111827 100%)`
59
+ : `radial-gradient(circle at 78% 18%, rgba(220,38,38,0.42) 0%, ${bg} 42%, #020617 100%)`,
60
+ color: text,
61
+ display: 'grid',
62
+ placeItems: 'center',
63
+ padding: portrait ? Math.round(runtime.height * 0.058) : Math.round(runtime.height * 0.064),
64
+ }}
65
+ >
66
+ <div
67
+ aria-hidden="true"
68
+ style={{
69
+ position: 'absolute',
70
+ inset: 0,
71
+ background:
72
+ 'linear-gradient(90deg, rgba(255,255,255,0.03) 0%, transparent 14%, transparent 86%, rgba(255,255,255,0.03) 100%)',
73
+ pointerEvents: 'none',
74
+ }}
75
+ />
76
+ <section
77
+ style={{
78
+ position: 'relative',
79
+ zIndex: 1,
80
+ width: '100%',
81
+ height: '100%',
82
+ display: 'grid',
83
+ gridTemplateColumns: portrait ? '1fr' : 'minmax(0, 0.82fr) minmax(300px, 1.18fr)',
84
+ gap: portrait ? 18 : 24,
85
+ alignItems: 'stretch',
86
+ minWidth: 0,
87
+ minHeight: 0,
88
+ }}
89
+ >
90
+ <div style={{ display: 'grid', gap: portrait ? 14 : 16, minWidth: 0, textAlign: portrait ? 'center' : 'left', alignContent: 'center' }}>
91
+ <p style={{ margin: 0, fontSize: Math.round(runtime.height * 0.018), letterSpacing: '0.42em', textTransform: 'uppercase', opacity: 0.72 }}>
92
+ {kicker ?? 'Suspense File'}
93
+ </p>
94
+ <h1
95
+ style={{
96
+ margin: 0,
97
+ fontSize: portrait ? Math.round(runtime.height * 0.08) : Math.round(runtime.height * 0.072),
98
+ lineHeight: 0.9,
99
+ letterSpacing: '-0.09em',
100
+ textTransform: 'uppercase',
101
+ textShadow: `0 0 20px ${glow}33`,
102
+ transform: motion.isAnimation ? `translate3d(0, ${(1 - motion.progress) * 14}px, 0)` : 'none',
103
+ }}
104
+ >
105
+ {title}
106
+ </h1>
107
+ {subtitle ? (
108
+ <p style={{ margin: 0, maxWidth: getIntroBodyMaxWidth(runtime.width, portrait, 0.43, 1, { min: 240, max: 680 }), fontSize: Math.round(runtime.height * 0.023), lineHeight: 1.6, opacity: 0.8, ...getIntroLineClamp(portrait ? 4 : 3) }}>
109
+ {subtitle}
110
+ </p>
111
+ ) : null}
112
+ <div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: portrait ? 'center' : 'flex-start', gap: 10 }}>
113
+ {creditLine ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.22em', textTransform: 'uppercase', opacity: 0.8 }}>{creditLine}</span> : null}
114
+ {footer ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.52 }}>{footer}</span> : null}
115
+ </div>
116
+ </div>
117
+
118
+ <div style={{ display: 'grid', gap: 12, minWidth: 0, alignContent: 'center' }}>
119
+ <div
120
+ style={{
121
+ border: '1px solid rgba(248,250,252,0.12)',
122
+ background: 'linear-gradient(180deg, rgba(255,255,255,0.05), rgba(15,23,42,0.28))',
123
+ padding: portrait ? 18 : 22,
124
+ display: 'grid',
125
+ gap: 10,
126
+ overflow: 'hidden',
127
+ minHeight: getIntroPanelMinHeight(runtime.height, portrait, 0.3, 0.24, { min: 220, max: 360 }),
128
+ }}
129
+ >
130
+ <div style={{ height: 2, width: '100%', background: `linear-gradient(90deg, transparent, ${glow}, transparent)` }} />
131
+ <div style={{ display: 'grid', gap: 10, gridTemplateColumns: portrait ? '1fr' : 'repeat(3, minmax(0, 1fr))' }}>
132
+ {[
133
+ ['Signal', 'Unstable'],
134
+ ['Threat', 'Unknown'],
135
+ ['Pulse', 'Low light'],
136
+ ].map(([label, value], index) => (
137
+ <div key={label} style={{ border: '1px solid rgba(248,250,252,0.1)', padding: '12px 14px', background: index === 1 ? 'rgba(220,38,38,0.12)' : 'rgba(0,0,0,0.16)', display: 'grid', gap: 6 }}>
138
+ <span style={{ fontSize: Math.round(runtime.height * 0.014), letterSpacing: '0.22em', textTransform: 'uppercase', opacity: 0.56 }}>{label}</span>
139
+ <span style={{ fontSize: Math.round(runtime.height * 0.02) }}>{value}</span>
140
+ </div>
141
+ ))}
142
+ </div>
143
+ <div style={{ border: '1px solid rgba(248,250,252,0.1)', padding: 14, background: 'rgba(0,0,0,0.18)', display: 'grid', gap: 8 }}>
144
+ <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.3em', textTransform: 'uppercase', opacity: 0.56 }}>Alert Dossier</span>
145
+ <span style={{ fontSize: Math.round(runtime.height * 0.02), lineHeight: 1.5, opacity: 0.82 }}>A tension board built to feel like a case file instead of a generic title card.</span>
146
+ </div>
147
+ </div>
148
+ {children ? <div>{children}</div> : null}
149
+ </div>
150
+ </section>
151
+ </BaseRemotionScene>
152
+ )
153
+ }
154
+
155
+ VideoComponent(componentMetadata)(DefaultThrillerIntroBumper)
@@ -0,0 +1,10 @@
1
+ export { DefaultThrillerIntroBumper } from './default-thriller-intro-bumper'
2
+ export { componentMetadata } from './default-thriller-intro-bumper'
3
+ export {
4
+ DefaultThrillerIntroBumperLandscape,
5
+ componentMetadata as DefaultThrillerIntroBumperLandscapeMetadata,
6
+ } from './default-thriller-intro-bumper-Landscape'
7
+ export {
8
+ DefaultThrillerIntroBumperHorizontal,
9
+ componentMetadata as DefaultThrillerIntroBumperHorizontalMetadata,
10
+ } from './default-thriller-intro-bumper-Horizontal'
@@ -0,0 +1 @@
1
+ export { DefaultTrailerIntroBumperPremiere as DefaultTrailerIntroBumperPremiereHorizontal, componentMetadata } from './default-trailer-intro-bumper'
@@ -0,0 +1 @@
1
+ export { DefaultTrailerIntroBumperPremiere as DefaultTrailerIntroBumperPremiereLandscape, componentMetadata } from './default-trailer-intro-bumper'
@@ -0,0 +1,30 @@
1
+ import { DefaultTrailerIntroBumperPremiereHorizontal } from './default-trailer-intro-bumper-Horizontal'
2
+ import { DefaultTrailerIntroBumperPremiereLandscape } from './default-trailer-intro-bumper-Landscape'
3
+
4
+ const args = {
5
+ kicker: 'Official Trailer',
6
+ title: 'Run to the Edge',
7
+ subtitle: 'A punchy intro bumper for trailers, teasers, and fast-paced launches.',
8
+ creditLine: 'A Vibecuting Original',
9
+ footer: 'Opening Sequence',
10
+ accent: '#ef4444',
11
+ secondaryAccent: '#7f1d1d',
12
+ }
13
+
14
+ const meta = {
15
+ title: 'core/intro/trailer-intro-premiere/DefaultTrailerIntroBumperPremiere',
16
+ component: DefaultTrailerIntroBumperPremiereLandscape,
17
+ args,
18
+ }
19
+
20
+ export default meta
21
+ export const Landscape = { parameters: { scenePreviewAspectRatio: '16:9' } }
22
+ export const LandscapeAnimated = { parameters: { scenePreviewAspectRatio: '16:9', scenePreviewMode: 'animation' } }
23
+ export const Horizontal = {
24
+ render: (storyArgs: typeof args) => <DefaultTrailerIntroBumperPremiereHorizontal {...storyArgs} />,
25
+ parameters: { scenePreviewAspectRatio: '9:16' },
26
+ }
27
+ export const HorizontalAnimated = {
28
+ render: (storyArgs: typeof args) => <DefaultTrailerIntroBumperPremiereHorizontal {...storyArgs} />,
29
+ parameters: { scenePreviewAspectRatio: '9:16', scenePreviewMode: 'animation' },
30
+ }