diff --git a/vidflow.html b/vidflow.html
index 561f379..0631a04 100644
--- a/vidflow.html
+++ b/vidflow.html
@@ -474,28 +474,36 @@ window.onYouTubeIframeAPIReady = function(){
});
};
-// Sizes the iframe to fill the viewport without horizontal overflow.
-// Height is always vh so the iframe top is pinned to y=0 — the YouTube title bar
-// (shown briefly when a video starts) lands inside the #tb overlay area (52px, z-index:5)
-// and stays hidden from view. #pw has overflow:hidden + background:#000 for letterbox bars.
+// Sizes and positions the iframe so the YouTube title bar (shown briefly on play)
+// is always clipped above the visible viewport. #pw has overflow:hidden so anything
+// outside the viewport is invisible. #pw background:#000 provides letterbox bars.
//
-// Wider than 16:9 (landscape / ultrawide): constrain width to height × aspect ratio
-// so the video is never taller than the screen (side black bars from #pw background).
-// Narrower than 16:9 (portrait): fill the full viewport — YouTube letterboxes the 16:9
-// video internally with black bars above and below the video content.
+// The trick: oversize the iframe height so it extends ~60px above and below the
+// viewport. The CSS centering (top:50% translateY(-50%)) does the math automatically.
+// The title bar at the top of the iframe sits at y ≈ -60px — off-screen.
+//
+// Portrait (vw < vh): cap width to vw (fixes the horizontal overflow on phones).
+// Height is oversized so title bar is still clipped above the viewport.
+// YouTube letterboxes the 16:9 video within the tall iframe; black bars appear
+// above and below the video content — the user said that's acceptable.
+//
+// Landscape / desktop: use the original formula — oversizes both dimensions by ~12%
+// so the video covers the screen and the title bar is clipped on all sides.
function sizePW(){
const el = qs('#pw iframe'); if(!el) return;
const vw = window.innerWidth, vh = window.innerHeight;
- let w;
- if (vw / vh >= 16 / 9) {
- // Landscape or wider — constrain width so no vertical cropping; may have side black bars
- w = Math.min(vw, vh * 16 / 9);
- } else {
- // Portrait — fill viewport; YouTube handles 16:9 letterbox internally
+ let w, h;
+ if (vw < vh) {
+ // Portrait — cap width, oversize height just enough to push title off-screen
w = vw;
+ h = vh + 120; // 60px above + 60px below; centered by CSS transform
+ } else {
+ // Landscape / desktop — original cover formula
+ w = Math.max(vw * 1.12, vh * 1.7778);
+ h = Math.max(vh * 1.12, vw * 0.5625);
}
el.style.width = w + 'px';
- el.style.height = vh + 'px';
+ el.style.height = h + 'px';
}
// Called once by the YT API when the player is ready — sets volume, checks for popup transfer, starts first channel