.v0ck { position: relative; font-size: 0; overflow: hidden; /* background-color: #000;*/ background-size: contain; background-repeat: no-repeat; background-position: center center; touch-action: none; /* Prevent pull-to-refresh and scroll while interacting */ z-index: 0; } .v0ck video { display: block; } .v0ck.v0ck_fullscreen { max-width: none; max-height: none; width: 100%; height: 100%; background-color: black; } #main:fullscreen .v0ck.v0ck_fullscreen { position: fixed; top: 0; left: 0; width: 100vw; max-width: 100%; height: 100vh; z-index: 2147483647; background-color: #000 !important; background-size: contain; background-repeat: no-repeat; background-position: center center; display: flex !important; align-items: center; justify-content: center; } #main:fullscreen .v0ck.v0ck_fullscreen video { width: 100%; height: 100%; object-fit: contain; min-height: 100vh; } /* Audio in fullscreen: hide the invisible audio element, show cover art via background */ #main:fullscreen .v0ck.v0ck_fullscreen audio { display: none; } .v0ck_overlay { pointer-events: none; position: absolute; z-index: 1; top: 0; left: 0; height: 100%; width: 100%; display: none; } .v0ck.v0ck_initial .v0ck_overlay { display: block; pointer-events: auto; cursor: pointer; } .v0ck_overlay>svg { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); height: 60px; width: 60px; filter: drop-shadow(0 0 9px var(--accent)); stroke: var(--accent); stroke-width: 20px; } .v0ck_player_button { background: none; border: 0; line-height: 1; color: white; text-align: center; outline: 0; padding: 8px 6px; /* Increased hit area height and horizontal spacing */ margin: 0; cursor: pointer; display: flex; align-items: center; justify-content: center; min-width: 36px; height: 40px; /* Consistent taller height for easier tapping */ } .v0ck_fs_btn { max-width: none; } .v0ck_player_button.v0ck_tplay>svg { height: 17px; } .v0ck_player_button svg:hover { filter: drop-shadow(0 0 9px var(--accent)); fill: #000; stroke: var(--accent); stroke-width: 30px; } .v0ck_hidden { display: none; } .v0ck_player_controls svg { width: 20px; height: 20px; fill: #fff; stroke: #fff; cursor: pointer; } .v0ck_player_controls { display: flex; position: absolute; bottom: -1px; width: 100%; padding: 0; align-items: center; z-index: 2; background: linear-gradient(0deg, rgba(0, 0, 0, 0.8) 20%, rgba(0, 0, 0, 0) 100%); transition: opacity .3s, transform .3s; flex-wrap: wrap; transform: translateY(100%) translateY(-3px); } .v0ck:hover .v0ck_player_controls, .v0ck.v0ck_hover .v0ck_player_controls, .v0ck.v0ck_swf_active .v0ck_player_controls { transform: translateY(0); } .v0ck:hover .v0ck_progress, .v0ck.v0ck_hover .v0ck_progress, .v0ck.v0ck_swf_active .v0ck_progress { height: 8px; } .v0ck_progress { flex: 10; position: relative; display: flex; flex-basis: 100%; height: 5px; transition: height 0.4s; background: rgba(255, 255, 255, 0.1); cursor: pointer; overflow: hidden; } .v0ck_progress_buffered { position: absolute; top: 0; left: 0; height: 100%; background: rgba(255, 255, 255, 0.3); width: 0%; transition: width 0.2s; z-index: 1; } .v0ck_progress_filled { height: 100%; background: var(--accent); position: relative; z-index: 2; flex-basis: 0%; } .v0ck_player_controls>input[type="range"][name="volume"]::after { position: absolute; top: -2px; text-shadow: 1px 1px 1px 0 rgba(0, 0, 0, 0.5); font-size: 0.8em; } .v0ck_volume_group { display: flex; align-items: center; position: relative; } .v0ck_volume_group input[type="range"][name="volume"] { position: relative; height: 5px; margin: auto; -webkit-appearance: none; appearance: none; overflow: hidden; min-width: 0; max-width: 0; cursor: pointer; border-radius: 0; transition: min-width 0.3s, max-width 0.3s, opacity 0.3s; flex: none; opacity: 0; pointer-events: none; } @media (hover: hover) { .v0ck_volume_group:hover input[type="range"][name="volume"] { min-width: 50px; max-width: 50px; opacity: 1; pointer-events: auto; } } @media (max-width: 600px) { .v0ck_volume_group input[type="range"][name="volume"] { display: none !important; } } .v0ck_player_controls>input[type=range]:focus { outline: none; } .v0ck_player_button.v0ck_playtime { max-width: none; cursor: default; min-width: 100px; } /* Volume/Gesture HUD */ .v0ck_hud { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0, 0, 0, 0.7); color: #fff; padding: 20px; border-radius: 15px; display: flex; flex-direction: column; align-items: center; justify-content: center; pointer-events: none; opacity: 0; transition: opacity 0.3s; z-index: 100; min-width: 100px; } .v0ck_hud:not(.v0ck_hidden) { opacity: 1; } .v0ck_hud svg { width: 40px; height: 40px; fill: #fff; margin-bottom: 10px; } .v0ck_hud_bar_container { width: 100px; height: 6px; background: rgba(255, 255, 255, 0.2); border-radius: 3px; overflow: hidden; } .v0ck_hud_bar { height: 100%; background: var(--accent); width: 0%; } .v0ck_volume_group input[type="range"][name="volume"]::-webkit-slider-runnable-track { background-color: rgb(65, 65, 65); } .v0ck_volume_group input[type="range"][name="volume"]::-moz-range-track { height: 5px; background-color: rgb(65, 65, 65); } .v0ck_volume_group input[type="range"][name="volume"]::-webkit-slider-thumb { -webkit-appearance: none; background: var(--accent); height: 5px; width: 0.1px; border: 0; box-shadow: -100vw 0 0 100vw var(--accent); } .v0ck_volume_group input[type="range"][name="volume"]::-moz-range-thumb { background: var(--accent); height: 5px; width: 0.1px; border: 0; box-shadow: -100vw 0 0 100vw var(--accent); } .v0ck.v0ck_no_transition .v0ck_player_controls, .v0ck.v0ck_no_transition .v0ck_progress { transition: none !important; } /* Seek Marker Ripple */ .v0ck_seek_marker { position: absolute; top: 0; height: 100%; width: 2px; background: #fff; opacity: 0; pointer-events: none; z-index: 3; } .v0ck_seek_marker.active { animation: v0ck-seek-ripple 0.6s ease-out; } @keyframes v0ck-seek-ripple { 0% { opacity: 0.8; transform: scaleX(1); } 100% { opacity: 0; transform: scaleX(20); } } /* Loading Spinner */ .v0ck_loader { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 101; pointer-events: none; } .v0ck_loader div { width: 40px; height: 40px; border: 4px solid rgba(255, 255, 255, 0.3); border-top: 4px solid #fff; border-radius: 50%; animation: v0ck-spin 0.8s linear infinite; } @keyframes v0ck-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* ── Danmaku overlay ───────────────────────────────────────── */ .danmaku-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; overflow-x: clip; overflow-y: visible; z-index: 1; user-select: none; } .danmaku-pill { position: absolute; left: 0; white-space: normal; /* allow multiline for quotes */ max-width: 70vw; /* prevent full-width wrapping */ display: inline-flex; flex-direction: column; /* stack lines vertically */ align-items: flex-start; padding: 2px 0; font-family: var(--font, inherit); font-size: 35px; font-weight: 700; line-height: 1.1; gap: 0; color: #fff; /* Multi-layer outline shadow for readability over any background */ text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000, 0 0 6px rgba(0,0,0,0.9), 0 0 12px rgba(0,0,0,0.6); will-change: transform; background: none; border: none; text-align: left; } .danmaku-pill .dpill-text { font-family: var(--font, inherit); font-size: 35px; font-weight: 700; white-space: nowrap; } /* Each plain text line inside a multiline pill */ .danmaku-pill .dpill-line { display: block; white-space: nowrap; } /* Quoted lines > rendered as greentext */ .danmaku-pill .dpill-greentext { color: #78b87a; display: block; white-space: nowrap; } /* Spoiler inside a flying pill — black-on-black, click to reveal */ .danmaku-pill .dpill-spoiler { background: #000; color: #000 !important; cursor: pointer; pointer-events: auto; transition: color 0.15s ease, background 0.15s ease; border-radius: 3px; padding: 0 3px; text-shadow: none; } /* Hide images (emojis, inline imgs) inside unrevealed spoiler */ .danmaku-pill .dpill-spoiler img { opacity: 0; transition: opacity 0.15s ease; } .danmaku-pill .dpill-spoiler:hover, .danmaku-pill .dpill-spoiler.revealed { color: #fff !important; background: rgba(255,255,255,0.15); text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; } .danmaku-pill .dpill-spoiler:hover img, .danmaku-pill .dpill-spoiler.revealed img { opacity: 1; } /* Blur inside a flying pill — blurred text, click/hover to clear */ .danmaku-pill .dpill-blur { filter: blur(6px); cursor: pointer; pointer-events: auto; transition: filter 0.25s ease; border-radius: 3px; padding: 0 3px; } .danmaku-pill .dpill-blur:hover, .danmaku-pill .dpill-blur.revealed { filter: none; } /* Emoji inline image */ .danmaku-pill .dpill-emoji { height: 1.3em; width: auto; vertical-align: middle; object-fit: contain; display: inline-block; margin: 0 1px; } /* Inline image URL embedded in pill */ .danmaku-pill .dpill-img { max-height: 80px; max-width: 120px; width: auto; height: auto; vertical-align: middle; object-fit: contain; display: inline-block; border-radius: 4px; margin: 0 2px; } @keyframes danmaku-fly { from { transform: translateX(calc(100vw + 100%)); } to { transform: translateX(calc(-100% - 200px)); } }