s1ne/static/styles.css
2026-09-09 06:30:07 +00:00

1031 lines
16 KiB
CSS

:root{
--bg:#000;
--surface:#131213;
--surface-2:#232323;
--surface-hover:#010010;
--text:#f2f2f2;
--text-strong:#f5f5f5;
--muted:#c9c9c9;
--border:#707070;
--border-strong:#808080;
--focus:#817567;
--seek-accent:#817567;
--page-max:975px;
--player-height:95px;
}
*{
box-sizing:border-box;
border-radius:0!important;
}
html,
body{
margin:0;
min-height:100%;
background:var(--bg);
}
body{
min-height:100vh;
color:var(--text);
font-family:"Courier New",Courier,monospace;
font-size:13px;
line-height:1.2;
}
button,
input,
audio{
font-family:inherit;
}
button{
cursor:pointer;
}
.page{
width:min(var(--page-max),calc(100% - 32px));
min-height:100vh;
max-height:100vh;
margin:0 auto;
padding:32px 0 calc(var(--player-height) + 56px);
}
.page.page-home{
display:flex;
flex-direction:column;
}
.view-tabs{
display:flex;
gap:8px;
margin-bottom:13px;
}
.tab-button{
padding:6px 10px;
border:0;
background:transparent;
color:var(--text);
}
.tab-button.active{
background:color-mix(in srgb,var(--seek-accent) 11%,transparent);
}
.icon-tab-button{
display:inline-flex;
align-items:center;
justify-content:center;
width:34px;
height:30px;
padding:4px;
}
.icon-tab-button svg{
width:20px;
height:20px;
fill:currentColor;
}
.search-hero{
display:flex;
flex:1;
align-items:center;
justify-content:center;
min-height:calc(100vh - 220px);
}
.search-hero.is-compact{
min-height:0;
}
.search-hero-inner{
width:100%;
max-width:780px;
}
.page-home .search-form-hero{
transform:translateY(-4vh);
}
.search-input{
width:100%;
height:40px;
padding:8px 10px;
border:1px solid #ffffff22;
outline:none;
background:transparent;
color:var(--text);
font-size:13px;
margin-bottom:3px;
margin-top:3px;
}
.search-input:focus{
border-color:color-mix(in srgb,var(--seek-accent) 45%,transparent);
outline-offset:2px;
}
.status{
display:flex;
align-items:center;
min-height:26px;
color:var(--muted);
}
.results-section{
width:100%;
overflow:auto;
}
.results-section-home{
display:none;
}
.results-section-active{
display:block;
max-height:min(72vh,755px);
}
.results-table{
width:100%;
min-width:900px;
border-collapse:collapse;
table-layout:fixed;
}
button .play-button:hover{
border-color:#fff!important;
border:1px solid #fff!important;
}
.results-table thead th{
position:sticky;
top:0;
z-index:2;
background:var(--bg);
}
.results-table th,
.results-table td{
padding:6px 7px;
text-align:left;
vertical-align:top;
}
.results-table th{
color:var(--muted);
font-weight:400;
}
.results-table tr:hover td{
background:color-mix(in srgb,var(--seek-accent) 12%,transparent);
}
.col-index{
width:36px;
}
.col-channel{
width:190px;
}
.col-duration{
width:67px;
}
.col-meta{
width:67px;
}
.col-play{
width:67px;
text-align:center!important;
}
.col-download{
width:33px;
padding-right:2px!important;
padding-left:2px!important;
text-align:center!important;
}
.col-fav{
width:33px;
padding-right:2px!important;
padding-left:2px!important;
text-align:center!important;
}
.col-playlist{
width:33px;
padding-right:2px!important;
padding-left:2px!important;
text-align:center!important;
white-space:nowrap;
}
.col-title,
.col-channel{
overflow:hidden;
}
.empty{
padding:16px 8px!important;
color:var(--muted);
}
.link-button{
padding:0;
border:0;
background:transparent;
color:var(--text);
font-size:13px;
text-align:left;
}
.link-button:hover{
color:#f7f7f7;
text-decoration:underline;
}
.title-button{
display:inline-block;
max-width:100%;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
.result-meta{
display:flex;
flex-wrap:wrap;
gap:6px;
}
.badge{
display:inline-block;
padding:4px 5px;
border:1px solid var(--border-strong);
background:rgba(9,5,11,0.07);
color:var(--text);
font-size:11px;
padding-left:-1px;
padding-right:-1px;
}
.badge.live{
border-color:#b15f5f;
background:#2a1717;
color:#ffd0d0;
}
.star-button,
.download-button{
display:inline-flex;
align-items:center;
justify-content:center;
width:100%;
min-width:22px;
min-height:22px;
padding:0;
border:0;
background:transparent;
color:var(--muted);
}
.star-button{
font-size:19px;
}
.star-button.favorited{
color:#ffd96b;
}
.download-button svg{
width:17px;
height:17px;
fill:currentColor;
}
.download-button:hover{
color:var(--seek-accent);
}
.playlist-action-button{
display:inline-flex;
align-items:center;
justify-content:center;
min-width:18px;
height:20px;
margin:0 1px;
padding:0 3px;
border:0;
background:transparent;
color:var(--text);
font-size:15px;
}
.playlist-action-button:hover{
background:var(--surface-2);
}
.player{
position:fixed;
right:0;
bottom:0;
left:0;
z-index:100;
display:flex;
flex-direction:column;
align-items:center;
justify-content:center;
min-height:var(--player-height);
gap:.44rem;
padding:.65rem 1rem;
border-top:1px solid #02020233;
background:rgba(7,6,9,.55);
}
.player.hidden{
display:none;
}
.now-playing{
width:100%;
max-width:900px;
min-width:0;
text-align:center;
}
#playerTitle,
#playerMeta{
width:100%;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
#playerTitle{
font-weight:600;
}
#playerMeta{
margin-top:.18rem;
color:var(--muted);
font-size:.78rem;
}
.player-controls{
display:flex;
align-items:center;
justify-content:center;
width:100%;
max-width:1200px;
gap:.4rem;
margin-bottom:2px;
}
.queue-control-button{
display:flex;
align-items:center;
justify-content:center;
min-width:2.2rem;
height:2rem;
padding:0 .7rem;
border:1px solid var(--border);
background:rgba(255,255,255,.03);
color:var(--text);
}
.queue-control-button:hover{
background:rgba(255,255,255,.08);
}
.queue-control-button:disabled{
color:#555;
opacity:.45;
}
.queue-control-button.active{
border-color:var(--seek-accent);
color:var(--seek-accent);
}
.icon-control-button{
position:relative;
width:2.25rem;
min-width:2.25rem;
padding:0;
}
.play-button:hover{
border-color:#fff;
}
.icon-control-button svg{
width:17px;
height:17px;
fill:currentColor;
}
.primary-control{
width:2.5rem;
min-width:2.5rem;
height:2.25rem;
border-color:var(--text);
}
.primary-control .pause-icon{
display:none;
}
.primary-control.is-playing .play-icon{
display:none;
}
.primary-control.is-playing .play-icon:hover{
border-color:#fff;
}
.primary-control.is-playing .pause-icon{
display:block;
}
.mode-control.inactive{
border-color:#555;
color:#777;
opacity:.72;
}
.control-indicator{
position:absolute;
right:3px;
bottom:3px;
width:4px;
height:4px;
border:1px solid currentColor;
}
.mode-control.active .control-indicator{
border-color:var(--seek-accent);
background:var(--seek-accent);
}
.loop-one-icon{
display:none!important;
}
button .primary-icon:hover{
border-color:#fff;
}
#loopButton.loop-one .loop-all-icon{
display:none;
}
#loopButton.loop-one .loop-one-icon{
display:block!important;
}
.loop-one-number{
fill:var(--bg);
stroke:var(--seek-accent);
stroke-width:.45;
}
.player-seek{
flex:1;
min-width:133px;
height:20px;
margin:0;
appearance:none;
background:transparent;
}
.player-seek::-webkit-slider-runnable-track{
height:3px;
background:linear-gradient(
to right,
var(--seek-accent) 0,
var(--seek-accent) var(--progress,0%),
rgba(255,255,255,.14) var(--progress,0%),
rgba(255,255,255,.14) 100%
);
}
.player-seek::-webkit-slider-thumb{
width:12px;
height:12px;
margin-top:-4px;
appearance:none;
border:1px solid var(--border);
border-radius:50%!important;
background:var(--seek-accent);
}
.player-seek::-moz-range-track{
height:3px;
background:rgba(255,255,255,.14);
}
.player-seek::-moz-range-progress{
height:3px;
background:var(--seek-accent);
}
.player-seek::-moz-range-thumb{
width:12px;
height:12px;
border:1px solid var(--border);
border-radius:50%!important;
background:var(--seek-accent);
}
#currentTime,
#duration{
width:3.5rem;
color:var(--muted);
font-size:.78rem;
text-align:center;
}
.player-volume{
width:95px;
height:20px;
appearance:none;
background:transparent;
padding-right:3px;
padding-left:3px;
}
.player-volume::-webkit-slider-runnable-track{
height:3px;
background:rgba(255,255,255,.1);
}
.player-volume::-webkit-slider-thumb{
width:12px;
height:12px;
margin-top:-4px;
appearance:none;
border:1px solid var(--border);
border-radius:50%!important;
background:var(--seek-accent);
}
.player-volume::-moz-range-track{
height:3px;
background:rgba(255,255,255,.1);
}
.player-volume::-moz-range-thumb{
width:12px;
height:12px;
border:1px solid var(--border);
border-radius:50%!important;
background:var(--seek-accent);
}
.seek-theme-picker{
position:relative;
}
.theme-picker-button{
color:var(--seek-accent);
}
.seek-theme-menu{
position:absolute;
right:0;
bottom:calc(100% + 7px);
z-index:220;
min-width:111px;
padding:4px;
border:1px solid var(--border-strong);
background:var(--surface);
}
.seek-theme-menu[hidden]{
display:none;
}
.seek-theme-option{
display:flex;
align-items:center;
width:100%;
gap:7px;
min-height:30px;
padding:5px 7px;
border:0;
background:transparent;
color:var(--text);
text-align:left;
}
.seek-theme-option:hover,
.seek-theme-option[aria-selected="true"]{
background:var(--surface-hover);
}
.seek-color-swatch{
width:11px;
height:11px;
border:1px solid rgba(255,255,255,.7);
background:var(--swatch);
}
.scroll-sentinel{
display:flex;
align-items:center;
min-height:42px;
padding:10px 8px;
color:var(--muted);
}
.scroll-sentinel:empty{
display:none;
}
.scroll-sentinel.loading::after,
tr.loading-row td::after{
display:inline-block;
width:1ch;
content:"";
animation:loading-dots 1s steps(4,end) infinite;
}
tr.loading-row td::before{
content:"> ";
}
@keyframes loading-dots{
0%{content:""}
25%{content:"."}
50%{content:".."}
75%,100%{content:"..."}
}
.queue-panel{
width:min(1000px,calc(100% - 22px));
margin:18px auto;
border:0px solid var(--border-strong);
background:var(--bg);
}
.queue-panel-header{
display:flex;
align-items:center;
justify-content:space-between;
gap:12px;
padding:10px 12px;
border-bottom:1px solid rgba(120,120,120,.3);
}
.queue-panel-actions{
display:flex;
gap:8px;
}
.queue-panel-actions select,
.queue-panel-actions button{
padding:5px 7px;
border:1px solid var(--border-strong);
background:transparent;
color:var(--text);
font:inherit;
font-size:12px;
}
.queue-list{
display:flex;
flex-direction:column;
max-height:260px;
overflow:auto;
}
.queue-item{
display:flex;
align-items:flex-start;
gap:10px;
width:100%;
padding:9px 12px;
border:0;
border-bottom:0px solid rgba(120,120,120,.2);
background:transparent;
color:var(--text);
text-align:left;
}
.queue-item:hover{
background:var(--surface-hover);
}
.queue-item-index{
width:24px;
color:var(--muted);
}
.queue-item-main{
display:flex;
flex-direction:column;
min-width:0;
}
.queue-item-title,
.queue-item-meta{
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
.queue-item-meta{
color:var(--muted);
font-size:11px;
}
.queue-empty{
padding:14px 12px;
color:var(--muted);
}
#audioPlayer{
display:none;
}
@media (max-width:700px){
:root{
--player-height:164px;
}
.page{
width:100%;
padding:18px 10px calc(var(--player-height) + 36px);
}
.search-hero{
min-height:calc(100vh - 250px);
}
.search-input{
height:42px;
font-size:16px;
}
.results-section-active{
max-height:min(54dvh,620px);
overflow-x:hidden;
}
.results-table{
min-width:0;
}
.results-table th,
.results-table td{
padding:8px 4px;
}
.results-table td:nth-child(3),
.results-table th:nth-child(3),
.results-table td:nth-child(5),
.results-table th:nth-child(5){
display:none;
}
.col-index{ width:28px; }
.col-duration{ width:46px; }
.col-play{ width:42px; }
.col-download{ width:30px; }
.col-fav{ width:28px; }
.col-playlist{ width:52px; }
.title-button{
display:-webkit-box;
overflow:hidden;
white-space:normal;
-webkit-box-orient:vertical;
-webkit-line-clamp:2;
}
.player{
padding:.56rem .56rem;
overflow:hidden;
}
.player-controls{
display:flex;
align-items:center;
justify-content:center;
flex-wrap:wrap;
gap:.35rem;
width:100%;
min-width:0;
}
.queue-control-button{
min-width:2.05rem;
height:1.95rem;
padding:0 .55rem;
flex:0 0 auto;
}
.icon-control-button{
width:2.05rem;
min-width:2.05rem;
}
.primary-control{
width:2.25rem;
min-width:2.25rem;
height:2.05rem;
}
.icon-control-button svg{
width:15px;
height:15px;
}
.player-volume{
display:none !important;
}
#currentTime,
#duration{
flex:0 0 auto;
width:2.85rem;
min-width:2.85rem;
font-size:.72rem;
text-align:center;
}
.seek-theme-picker{
flex:0 0 auto;
white-space:nowrap;
}
.theme-picker-button{
min-width:2rem;
height:1.95rem;
padding:0 .4rem;
}
.player-seek{
order:999;
flex:0 0 100%;
width:100%;
min-width:100%;
max-width:100%;
height:28px;
margin:0;
}
.queue-panel{
width:calc(100% - 20px);
}
.queue-panel-header{
flex-direction:column;
align-items:flex-start;
}
.queue-panel-actions{
width:100%;
}
.queue-panel-actions select,
.queue-panel-actions button{
min-height:40px;
}
}
@media (max-width:420px){
:root{
--player-height:156px;
}
.page{
padding:14px 8px calc(var(--player-height) + 30px);
}
.player{
padding:.5rem .42rem;
gap:.32rem;
}
.player-controls{
gap:.22rem;
}
.queue-control-button{
min-width:1.85rem;
height:1.8rem;
padding:0 .38rem;
}
.icon-control-button{
width:1.85rem;
min-width:1.85rem;
}
.primary-control{
width:2rem;
min-width:2rem;
height:1.9rem;
}
.icon-control-button svg{
width:14px;
height:14px;
}
#currentTime,
#duration{
width:2.35rem;
min-width:2.35rem;
font-size:.66rem;
}
.theme-picker-button{
min-width:1.8rem;
height:1.8rem;
padding:0 .28rem;
}
.player-seek{
height:26px;
}
#playerTitle{
font-size:.86rem;
}
#playerMeta{
font-size:.68rem;
}
}
.drag-handle{
display:inline-flex;
align-items:center;
justify-content:center;
min-width:18px;
margin-right:8px;
color:var(--muted);
cursor:grab;
user-select:none;
}
.drag-handle:active{
cursor:grabbing;
}
.results-table tr.dragging td{
opacity:.45;
}
.results-table tr.drag-over td{
background:color-mix(in srgb,var(--seek-accent) 12%,transparent);
}
/* keep title cell on one line */
.results-table td.col-title {
white-space: nowrap;
}
/* make the title button shrink safely instead of wrapping */
.results-table td.col-title .title-button {
display: inline-block;
max-width: calc(100% - 24px);
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
white-space: nowrap;
}
/* keep drag handle visible and clickable */
.results-table td.col-title .drag-handle {
display: inline-flex;
align-items: center;
justify-content: center;
width: 18px;
margin-right: 8px;
flex: 0 0 auto;
cursor: grab;
user-select: none;
vertical-align: middle;
}
.results-table td.col-title .drag-handle:active {
cursor: grabbing;
}
.results-table tr.dragging {
opacity: 0.6;
}
.results-table tr.drag-over {
outline: 1px solid rgba(255, 255, 255, 0.2);
outline-offset: -1px;
}