:root {
  --bg: #0f0f0f;
  --bg2: #212121;
  --bg3: #272727;
  --text: #f1f1f1;
  --muted: #aaaaaa;
  --accent: #ff0033;
  --accent2: #3ea6ff;
  --border: #303030;
  --sidebar: 240px;
  --radius: 12px;
  --font: "Segoe UI", system-ui, -apple-system, sans-serif;
}

* { box-sizing: border-box; }
html, body { height: 100%; }
body {
  margin: 0;
  font-family: var(--font);
  background: var(--bg);
  color: var(--text);
  display: flex;
  min-height: 100%;
}

a { color: inherit; text-decoration: none; }
button, input, textarea {
  font: inherit;
  color: inherit;
}
.muted { color: var(--muted); font-size: 0.9rem; }

.sidebar {
  width: var(--sidebar);
  flex-shrink: 0;
  background: var(--bg);
  border-right: 1px solid var(--border);
  padding: 12px 10px;
  position: sticky;
  top: 0;
  height: 100vh;
  overflow: auto;
}
.brand {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  font-weight: 800;
  font-size: 1.25rem;
  letter-spacing: -0.02em;
}
.brand-mark {
  display: inline-grid;
  place-items: center;
  width: 34px;
  height: 24px;
  border-radius: 8px;
  background: var(--accent);
  color: #fff;
  font-size: 0.75rem;
}
.nav { margin-top: 12px; display: grid; gap: 4px; }
.nav-item {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 10px 14px;
  border-radius: 10px;
  color: var(--text);
}
.nav-item:hover, .nav-item.active { background: var(--bg3); }
.side-note {
  margin: 24px 12px 8px;
  color: var(--muted);
  font-size: 0.75rem;
  line-height: 1.4;
}

.main-wrap { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.topbar {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 18px;
  border-bottom: 1px solid var(--border);
  position: sticky;
  top: 0;
  background: rgba(15,15,15,0.92);
  backdrop-filter: blur(8px);
  z-index: 5;
}
.icon-btn {
  display: none;
  background: transparent;
  border: 0;
  color: var(--text);
  font-size: 1.3rem;
  cursor: pointer;
}
.search {
  flex: 1;
  max-width: 640px;
  display: flex;
  margin: 0 auto;
}
.search input {
  flex: 1;
  background: var(--bg);
  border: 1px solid var(--border);
  border-right: 0;
  border-radius: 40px 0 0 40px;
  padding: 10px 16px;
  outline: none;
}
.search input:focus { border-color: var(--accent2); }
.search button {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 0 40px 40px 0;
  padding: 0 22px;
  cursor: pointer;
}
.btn-upload, .btn, .btn-primary {
  background: var(--bg3);
  border: 1px solid var(--border);
  border-radius: 20px;
  padding: 8px 16px;
  cursor: pointer;
  white-space: nowrap;
}
.btn-primary, .btn-upload {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
  font-weight: 700;
}
.btn-ghost { background: transparent; }
.top-title { margin: 0; font-size: 1.1rem; }
.brand-inline { font-weight: 800; }

.content { padding: 20px 24px 48px; }
.content.narrow { max-width: 720px; }
.page-title { margin: 0 0 8px; font-size: 1.35rem; }

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: 18px 14px;
  margin-top: 16px;
}
.card {
  display: block;
  color: inherit;
}
.thumb {
  aspect-ratio: 16 / 9;
  background:
    linear-gradient(135deg, #1a1a1a, #2a1018 40%, #121212),
    repeating-linear-gradient(-12deg, transparent, transparent 8px, rgba(255,0,51,0.04) 8px, rgba(255,0,51,0.04) 16px);
  border-radius: var(--radius);
  display: grid;
  place-items: center;
  font-size: 2rem;
  color: #fff;
  position: relative;
  overflow: hidden;
}
.thumb::after {
  content: "▶";
  opacity: 0.85;
  z-index: 1;
}
.thumb.has-img::after { display: none; }
.thumb-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.thumb-duration {
  position: absolute;
  right: 6px;
  bottom: 6px;
  z-index: 2;
  background: rgba(0, 0, 0, 0.82);
  color: #fff;
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1;
  padding: 3px 5px;
  border-radius: 3px;
  letter-spacing: 0.02em;
}
.thumb-res {
  position: absolute;
  left: 6px;
  top: 6px;
  z-index: 2;
  background: rgba(255, 0, 51, 0.92);
  color: #fff;
  font-size: 0.65rem;
  font-weight: 800;
  line-height: 1;
  padding: 3px 5px;
  border-radius: 3px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.45);
}
.title-duration {
  color: var(--muted);
  font-weight: 600;
  font-size: 0.88em;
  white-space: nowrap;
}
.res-badge {
  display: inline-block;
  vertical-align: middle;
  margin-left: 4px;
  padding: 2px 6px;
  border-radius: 4px;
  background: #ff0033;
  color: #fff;
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.04em;
  line-height: 1.2;
  text-transform: uppercase;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}
.thumb-res.res-sd, .res-badge.res-sd { background: #5a5a5a; }
.thumb-res.res-hd, .res-badge.res-hd { background: #1a73e8; }
.thumb-res.res-4k, .res-badge.res-4k { background: #ff0033; }
.thumb-res.res-8k, .res-badge.res-8k { background: #9c27b0; }
.thumb-res.res-16k, .res-badge.res-16k {
  background: linear-gradient(135deg, #ff9800, #ff0033);
}
.thumb-res.res-other, .res-badge.res-other { background: #333; border: 1px solid #666; }
.card-body { padding: 10px 4px 0; }
.card-title {
  margin: 0 0 4px;
  font-size: 0.98rem;
  line-height: 1.3;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.card-meta { color: var(--muted); font-size: 0.82rem; }

.watch-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 360px;
  gap: 20px;
  padding: 18px 22px 40px;
}
.player-shell {
  background: #000;
  border-radius: 14px;
  overflow: hidden;
  aspect-ratio: 16 / 9;
}
.player-shell video,
.player-shell iframe {
  width: 100%;
  height: 100%;
  display: block;
  background: #000;
  border: 0;
}
.player-shell .external-player {
  width: 100%;
  height: 100%;
  display: grid;
  place-items: center;
  gap: 12px;
  padding: 24px;
  text-align: center;
  color: var(--muted);
}
.player-shell [hidden] { display: none !important; }
.watch-title { margin: 14px 0 8px; font-size: 1.25rem; }
.watch-meta {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 12px;
  align-items: center;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--border);
}
.watch-meta .muted { display: block; margin-top: 2px; }
.actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.chip {
  background: var(--bg3);
  border: 0;
  border-radius: 20px;
  padding: 8px 14px;
  cursor: pointer;
}
.chip-tip { background: #1f3d2a; color: #7dffa0; }
.tip-box { display: flex; gap: 6px; align-items: center; }
.tip-box input {
  width: 72px;
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 7px 8px;
}
.watch-desc {
  background: var(--bg2);
  border-radius: 12px;
  padding: 12px 14px;
  margin: 14px 0;
  white-space: pre-wrap;
  color: #ddd;
  font-size: 0.92rem;
}
.status { color: var(--accent2); min-height: 1.2em; }

.comments h2, .related-col h2 {
  font-size: 1rem;
  margin: 18px 0 10px;
}
.comment-form {
  display: grid;
  grid-template-columns: 140px 1fr auto;
  gap: 8px;
  margin-bottom: 14px;
}
.comment-form input {
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--border);
  padding: 8px 4px;
  outline: none;
}
.comment-form input:focus { border-bottom-color: var(--text); }
.comment-form button {
  background: var(--accent2);
  color: #0f0f0f;
  border: 0;
  border-radius: 18px;
  padding: 8px 14px;
  font-weight: 700;
  cursor: pointer;
}
.comment-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
.comment-list li {
  background: var(--bg2);
  border-radius: 10px;
  padding: 10px 12px;
}
.comment-list strong { display: block; margin-bottom: 4px; font-size: 0.9rem; }
.comment-list p { margin: 0; color: #ddd; font-size: 0.92rem; }
.comment-list time { color: var(--muted); font-size: 0.75rem; }

.related-list { display: grid; gap: 10px; }
.related {
  display: grid;
  grid-template-columns: 160px 1fr;
  gap: 10px;
  align-items: start;
}
.related .thumb { border-radius: 8px; font-size: 1.2rem; }
.related .card-title { font-size: 0.9rem; }

.upload-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 16px;
  padding: 20px;
  display: grid;
  gap: 14px;
}
.upload-card label { display: grid; gap: 6px; font-size: 0.9rem; color: var(--muted); }
.upload-card input[type="text"],
.upload-card input[type="url"],
.upload-card textarea {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 12px;
  color: var(--text);
}
.drop {
  border: 2px dashed var(--border);
  border-radius: 14px;
  padding: 28px 16px;
  text-align: center;
  cursor: pointer;
  color: var(--text);
  position: relative;
}
.drop input {
  position: absolute;
  inset: 0;
  opacity: 0;
  cursor: pointer;
}
.drop:hover { border-color: var(--accent); }

.modal[hidden] { display: none; }
.modal {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.65);
  display: grid;
  place-items: center;
  z-index: 50;
  padding: 16px;
}
.modal-card {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 18px;
  width: min(420px, 100%);
  display: grid;
  gap: 10px;
}
.modal-card input {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 12px;
}
.modal-actions { display: flex; gap: 8px; }

@media (max-width: 980px) {
  .watch-layout { grid-template-columns: 1fr; }
  .related { grid-template-columns: 140px 1fr; }
}
@media (max-width: 800px) {
  .sidebar {
    position: fixed;
    left: 0;
    top: 0;
    z-index: 40;
    transform: translateX(-105%);
    transition: transform 0.2s ease;
    background: #0f0f0f;
  }
  body.sidebar-open .sidebar { transform: none; box-shadow: 8px 0 30px rgba(0,0,0,0.5); }
  .icon-btn { display: inline-block; }
  .comment-form { grid-template-columns: 1fr; }
  .search { max-width: none; }
}

.auth-chip { display:flex; align-items:center; gap:8px; margin-left:auto; }
.btn-login, .btn-ghost, .user-pill {
  background: var(--bg3); border:1px solid var(--border); border-radius:18px;
  padding:6px 12px; font-size:0.85rem; cursor:pointer; color:inherit; text-decoration:none;
}
.btn-login { background:#5865f2; border-color:#5865f2; color:#fff; font-weight:700; }
.user-pill { cursor:default; max-width:220px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
body.sidebar-open .sidebar { transform: none; box-shadow: 8px 0 30px rgba(0,0,0,.5); }


/* BobTube layout aliases */
.brand-mark{display:inline-grid;place-items:center;width:34px;height:24px;border-radius:8px;background:var(--accent);color:#fff;font-size:.75rem}
.brand-text{font-weight:800;font-size:1.25rem;letter-spacing:-.02em}
.side-note{margin:24px 12px 8px;color:var(--muted);font-size:.75rem;line-height:1.4}
.btn-upload{background:var(--accent);border:1px solid var(--accent);color:#fff;border-radius:20px;padding:8px 16px;font-weight:700;white-space:nowrap}
.auth-chip{display:flex;align-items:center;gap:8px}
.btn-login{background:#5865f2;border:1px solid #5865f2;color:#fff;border-radius:18px;padding:6px 12px;font-weight:700;text-decoration:none}
.user-pill{background:var(--bg3);border:1px solid var(--border);border-radius:18px;padding:6px 12px;font-size:.85rem;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.btn-ghost{background:transparent;border:1px solid var(--border);border-radius:18px;padding:6px 12px;cursor:pointer}
.watch-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:20px;padding:18px 22px 40px}
.player-shell{background:#000;border-radius:14px;overflow:hidden;aspect-ratio:16/9}
.player-shell video,.player-shell iframe{width:100%;height:100%;display:block;background:#000;border:0}
.watch-title{margin:14px 0 8px;font-size:1.25rem}
.watch-meta{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;align-items:center;padding-bottom:12px;border-bottom:1px solid var(--border)}
.actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.chip{background:var(--bg3);border:0;border-radius:20px;padding:8px 14px;cursor:pointer}
.chip-tip{background:#1f3d2a;color:#7dffa0}
.tip-box{display:flex;gap:6px;align-items:center}
.tip-box input{width:72px;background:var(--bg2);border:1px solid var(--border);border-radius:10px;padding:7px 8px}
.watch-desc{background:var(--bg2);border-radius:12px;padding:12px 14px;margin:14px 0;white-space:pre-wrap;color:#ddd;font-size:.92rem}
.status{color:var(--accent2);min-height:1.2em}
.comments h2,.related-col h2{font-size:1rem;margin:18px 0 10px}
.comment-form{display:grid;grid-template-columns:140px 1fr auto;gap:8px;margin-bottom:14px}
.comment-form input{background:transparent;border:0;border-bottom:1px solid var(--border);padding:8px 4px;outline:none}
.comment-form button{background:var(--accent2);color:#0f0f0f;border:0;border-radius:18px;padding:8px 14px;font-weight:700;cursor:pointer}
.comment-list{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.comment-list li{background:var(--bg2);border-radius:10px;padding:10px 12px}
.related-list{display:grid;gap:10px}
.related{display:grid;grid-template-columns:160px 1fr;gap:10px;align-items:start}
.related .thumb{border-radius:8px}
.upload-card{background:var(--bg2);border:1px solid var(--border);border-radius:16px;padding:20px;display:grid;gap:14px}
.upload-card label{display:grid;gap:6px;font-size:.9rem;color:var(--muted)}
.upload-card input[type=text],.upload-card input[type=url],.upload-card textarea{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:10px 12px;color:var(--text)}
.drop{border:2px dashed var(--border);border-radius:14px;padding:28px 16px;text-align:center;cursor:pointer;position:relative;color:var(--text)}
.drop input{position:absolute;inset:0;opacity:0;cursor:pointer}
.drop:hover{border-color:var(--accent)}
.btn-primary{background:var(--accent);border:1px solid var(--accent);color:#fff;border-radius:20px;padding:10px 16px;font-weight:700;cursor:pointer}
.top-title{margin:0;font-size:1.1rem}
.brand-inline{font-weight:800}
.content.narrow,.narrow{max-width:720px}
body.sidebar-open .sidebar{transform:none;box-shadow:8px 0 30px rgba(0,0,0,.5)}
@media (max-width:980px){.watch-layout{grid-template-columns:1fr}}
@media (max-width:800px){.comment-form{grid-template-columns:1fr}}


/* /bobtube link code auth */
.code-auth{margin:14px 12px;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--bg2)}
.code-auth .hint{margin:0 0 8px;font-size:.78rem;color:var(--muted);line-height:1.35}
.code-label{display:block;font-size:.75rem;color:var(--muted);margin-bottom:6px}
.code-row{display:flex;gap:6px}
.code-row input{flex:1;min-width:0;background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:8px 10px;color:var(--text);letter-spacing:.12em;font-weight:700}
.btn-code{background:var(--accent);border:0;border-radius:10px;padding:8px 12px;color:#fff;font-weight:700;cursor:pointer}
.auth-msg{margin:8px 0 0;font-size:.78rem;color:var(--accent2)}
.auth-msg.err{color:#ff7b7b}
.auth-msg.ok{color:#7dffa0}
.code-auth[hidden]{display:none!important}
