diff --git a/server/public/home.html b/server/public/home.html index 972f398..0ef5929 100644 --- a/server/public/home.html +++ b/server/public/home.html @@ -664,7 +664,7 @@ /* In-chat video: native (poster from /thumbs, plays inline on one tap, HTTP-Range streamed). Wrapped so we can overlay a clear CENTER spinner while it buffers — the OS controls' own buffering hint is small/unclear. The spinner is display-only (pointer-events:none) so it never blocks the controls. */ - .att-vid{position:relative;width:min(260px,74vw);max-height:340px;border-radius:10px;overflow:hidden;display:block;margin:.15rem 0;background:#000;line-height:0;} + .att-vid{position:relative;width:min(260px,74vw);min-height:146px;max-height:340px;border-radius:10px;overflow:hidden;display:block;margin:.15rem 0;background:#000;line-height:0;} /* min-height: the tile keeps its size before the poster lands, so the thread never jumps */ .att-vid-v{display:block;width:100%;max-height:340px;background:#000;object-fit:contain;} .att-vid-spin{position:absolute;top:50%;left:50%;width:46px;height:46px;margin:-23px 0 0 -23px;border-radius:50%;border:3px solid rgba(255,255,255,.35);border-top-color:#fff;background:rgba(0,0,0,.45);opacity:0;pointer-events:none;z-index:3;} .att-vid.buffering .att-vid-spin{opacity:1;animation:ptrspin .8s linear infinite;} @@ -678,11 +678,13 @@ .dl-prog .dp-pct{font-weight:700;flex:0 0 auto;font-variant-numeric:tabular-nums;} .dl-prog .dp-bar{height:4px;border-radius:3px;background:rgba(255,255,255,.22);overflow:hidden;} .dl-prog .dp-fill{display:block;height:100%;width:0;background:#fff;transition:width .15s linear;} - /* A video owns its whole tile (the player fills it), so its download control is an overlay rather than a - link like images/files get. Once saved it becomes a tick and the tile plays from disk. */ - .att-vid-dl{position:absolute;top:8px;right:8px;z-index:4;width:34px;height:34px;border-radius:50%;border:0;background:rgba(0,0,0,.62);color:#fff;display:grid;place-items:center;cursor:pointer;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);} - .att-vid-dl:active{transform:scale(.94);} - .att-vid-saved{position:absolute;top:8px;right:8px;z-index:4;width:22px;height:22px;border-radius:50%;background:rgba(16,185,129,.92);color:#fff;display:grid;place-items:center;pointer-events:none;} + /* One CENTRED control over the masked poster: download → % → play. A corner button collided with the + native control bar, and the bar itself is only turned on once playback starts, so nothing overlaps. */ + .att-vid-ov{position:absolute;inset:0;z-index:4;width:100%;height:100%;border:0;padding:0;margin:0;background:rgba(0,0,0,.38);display:grid;place-items:center;cursor:pointer;} + .att-vid.playing .att-vid-ov{display:none;} + .att-vid-btn{width:62px;height:62px;border-radius:50%;background:rgba(0,0,0,.62);border:2px solid rgba(255,255,255,.85);color:#fff;display:grid;place-items:center;font-weight:700;font-size:.92rem;font-variant-numeric:tabular-nums;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);} + .att-vid-ov:active .att-vid-btn{transform:scale(.94);} + .att-vid.saved .att-vid-btn svg{margin-left:3px;} /* optically centre the play triangle */ /* Manage storage */ .stor-tot{display:flex;align-items:center;gap:.45rem;margin:.1rem 0 .5rem;} .stor-tot b{font-size:1.3rem;} @@ -1195,7 +1197,7 @@ -