:root {
  --bg: #0a0a0a;
  --fg: #c0c0c0;
  --accent: #ffffff;
  --font: -apple-system, 'Helvetica Neue', Arial, sans-serif;
  --border: #1a1a1a;
  --border-hover: #333;
  --muted: #666;
  --dim: #444;
  --surface: #1a1a1a;
  --green: #4ade80;
  --blue: #60a5fa;
  --purple: #a78bfa;
  --red: #ef4444;
  --yellow: #fbbf24;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  background: var(--bg);
  color: var(--fg);
  font-family: var(--font);
  font-size: 14px;
  line-height: 1.6;
}

body {
  max-width: 960px;
  margin: 0 auto;
  padding: 4em 3em 4em 3em;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

a {
  color: var(--accent);
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

h1, h2, h3 {
  color: var(--accent);
  font-weight: normal;
  margin-bottom: 0.5em;
}

h1 {
  font-size: 1.5em;
  margin-bottom: 1em;
}

h2 {
  font-size: 1.2em;
  text-transform: lowercase;
}

p {
  margin-bottom: 1em;
}

main {
  flex: 1;
}

/* hide number input spinners */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
input[type="number"] {
  -moz-appearance: textfield;
}

/* top bar — network navigation */

#top-bar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 3em;
  background: var(--bg);
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 2em;
  z-index: 100;
}

.site-identity {
  color: var(--accent);
  font-size: 0.9em;
  text-decoration: none;
}

.site-identity:hover {
  text-decoration: none;
  color: var(--fg);
}

.network-nav {
  display: flex;
  align-items: center;
  gap: 2ch;
  flex-shrink: 0;
}

.network-nav a {
  color: var(--muted);
  font-size: 0.9em;
  text-decoration: none;
  white-space: nowrap;
}

.network-nav a:hover {
  color: var(--accent);
}

/* top bar wallet */

#top-bar-wallet {
  display: flex;
  align-items: center;
  gap: 0.75ch;
}

.top-bar-balance {
  color: var(--accent);
  font-size: 0.85em;
}

.top-bar-addr {
  color: var(--dim);
  font-size: 0.8em;
  cursor: pointer;
}

.top-bar-addr:hover {
  color: var(--muted);
}

.top-bar-connect {
  background: none;
  border: 1px solid var(--border);
  color: var(--muted);
  font-family: inherit;
  font-size: 0.8em;
  padding: 0.2em 0.8ch;
  cursor: pointer;
}

.top-bar-connect:hover {
  color: var(--accent);
  border-color: var(--muted);
}

.wallet-dd-btn {
  display: block;
  width: 100%;
  background: none;
  border: none;
  color: var(--muted);
  font-family: inherit;
  font-size: 0.8em;
  padding: 0.4em 0.5ch;
  cursor: pointer;
  text-align: left;
}

.wallet-dd-btn:hover {
  color: var(--accent);
}

/* floating owner dock — left edge */

.owner-dock {
  position: fixed;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0;
  padding: 0 2em;
  z-index: 200;
}

.dock-btn {
  background: none;
  border: none;
  color: var(--dim);
  cursor: pointer;
  font-size: 1.1em;
  padding: 0.3em;
  display: flex;
  align-items: center;
  text-decoration: none;
  transition: color 0.15s;
}

.dock-btn:hover,
.dock-btn.active {
  color: var(--accent);
}

.dock-tools {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1em;
}

.dock-sections {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.4em;
  margin-top: 1em;
  padding-top: 0.75em;
  border-top: 1px solid var(--border);
}

.dock-section-link {
  color: var(--dim);
  font-size: 0.8em;
  text-decoration: none;
}

.dock-section-link:hover {
  color: var(--accent);
}

/* feed mode: dock is position:fixed, override body left padding to clear dock */
body.feed-mode,
body.feed-mode-pending {
  padding-left: 3.5em;
}

/* show dock with anti-flash */
.feed-mode-pending .owner-dock,
.feed-mode .owner-dock {
  display: flex;
}

/* mobile: dock becomes horizontal bottom tab bar */
@media (max-width: 768px) {
  .owner-dock {
    position: fixed !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    top: auto !important;
    transform: none !important;
    flex-direction: row !important;
    justify-content: space-around !important;
    align-items: center !important;
    padding: 0.4em 0 calc(0.4em + env(safe-area-inset-bottom)) !important;
    background: var(--bg) !important;
    border-top: 1px solid var(--border) !important;
    gap: 0 !important;
    z-index: 300 !important;
  }
  .dock-btn {
    font-size: 1.3em;
    padding: 0.5em;
    min-width: 44px;
    min-height: 44px;
    justify-content: center;
  }
  /* hide section links in bottom bar (they're in the menu sheet) */
  .dock-sections { display: none !important; }
  .dock-tools {
    display: flex !important;
    flex-direction: row !important;
    justify-content: space-around !important;
    width: 100% !important;
    gap: 0 !important;
  }
  /* hide the portfolio nav on mobile (links are in menu) */
  .portfolio-nav { display: none !important; }
  /* push page content above the bottom bar */
  body { padding-bottom: 60px !important; }
  /* push player above the bottom bar */
  body:has(#global-player.active) .owner-dock { bottom: 44px !important; }
  body:has(#global-player.active) { padding-bottom: 104px !important; }

  body.feed-mode,
  body.feed-mode-pending {
    padding-left: 1em;
  }
}

/* bottom nav — portfolio sections */

.portfolio-nav {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: var(--bg);
  border-top: 1px solid var(--border);
  padding: 0.75em 1em;
  text-align: center;
  z-index: 100;
}

.portfolio-nav a {
  margin: 0 1.2ch;
  color: var(--muted);
  font-size: 0.8em;
  text-decoration: none;
}

.portfolio-nav a:hover {
  color: var(--fg);
}

hr {
  border: none;
  margin: 3em 0;
}

footer {
  margin-top: 4em;
  padding-top: 2em;
  color: var(--muted);
}

footer a {
  color: var(--muted);
}

.praxis-badge {
  display: inline-block;
  padding: 0.2em 0.8em;
  border: 1px solid var(--border);
  font-family: 'SF Mono', 'Fira Code', monospace;
  font-size: 0.7em;
  color: var(--dim);
  text-decoration: none;
  letter-spacing: 0.05em;
  margin-top: 0.75em;
}

.praxis-badge:hover {
  color: var(--fg);
  border-color: var(--border-hover);
  text-decoration: none;
}

.bio {
  color: var(--fg);
  margin-bottom: 1em;
  max-width: 72ch;
}

/* music */

.alias {
  margin-bottom: 2em;
}

.alias-name {
  color: var(--accent);
  margin-bottom: 0.5em;
}

.album {
  display: flex;
  align-items: center;
  gap: 1.5ch;
  margin-bottom: 0.5em;
}

.album img {
  width: 80px;
  height: 80px;
  object-fit: cover;
  image-rendering: auto;
}


.album-detail img,
section img {
  max-width: 100%;
  height: auto;
}

.album-detail img {
  max-width: 400px;
}

.album-info {
  color: var(--fg);
}

.album-title {
  color: var(--accent);
}

.album-year {
  color: var(--muted);
}

/* credits */

.credit {
  margin-bottom: 0.75em;
}

.credit-title {
  color: var(--accent);
}

.credit-detail {
  color: var(--fg);
}

/* engineering */

.project {
  margin-bottom: 1em;
}

.project-name {
  color: var(--accent);
}

.project-role {
  color: var(--fg);
}

/* store */

.store-item {
  margin-bottom: 2em;
  padding: 1em 0;
}

.store-item-title {
  color: var(--accent);
}

.store-item-price {
  color: var(--fg);
  margin: 0.25em 0;
}

.buy-btn {
  background: none;
  border: 1px solid var(--fg);
  color: var(--accent);
  font-family: inherit;
  font-size: 0.9em;
  padding: 0.5em 2ch;
  cursor: pointer;
  margin-top: 0.5em;
}

.buy-btn:hover {
  background: var(--accent);
  color: var(--bg);
}

.buy-btn:disabled, .buy-btn.btn-disabled {
  opacity: 0.4;
  cursor: not-allowed;
  pointer-events: none;
  border-color: var(--dim);
  color: var(--dim);
}

.buy-btn:disabled:hover, .buy-btn.btn-disabled:hover {
  background: none;
  color: var(--dim);
}

/* blog */

.post-list {
  list-style: none;
}

.post-list li {
  margin-bottom: 1em;
}

.post-list time {
  color: var(--muted);
  margin-right: 2ch;
}

.post-body {
  margin-top: 1em;
  max-width: 72ch;
}

.post-body p {
  margin-bottom: 1em;
}

.post-body blockquote {
  border-left: 2px solid var(--border-hover);
  padding-left: 2ch;
  color: var(--fg);
  margin: 1em 0;
}

.post-body code {
  background: var(--surface);
  padding: 0.1em 0.5ch;
}

.post-body pre {
  background: var(--surface);
  padding: 1em;
  overflow-x: auto;
  margin: 1em 0;
}

/* reading list */

.reading-list {
  list-style: none;
}

.reading-list li {
  margin-bottom: 1em;
}

.reading-list .book-title {
  color: var(--accent);
}

.reading-list .book-author {
  color: var(--fg);
}

.reading-list .book-note {
  color: var(--muted);
  display: block;
}

/* wallet */

#wallet-status {
  color: var(--muted);
  font-size: 0.85em;
  margin-top: 0.5em;
}

/* unread message dot on dock */
.dock-msg-dot {
  position: absolute;
  top: 0;
  right: 0;
  width: 6px;
  height: 6px;
  background: #ef4444;
  border-radius: 50%;
  pointer-events: none;
  font-size: 0;
  overflow: hidden;
  line-height: 0;
}

/* dm panel */

.dm-badge {
  display: none;
  position: absolute;
  top: -4px;
  right: -6px;
  background: var(--red);
  color: var(--accent);
  font-size: 0.6em;
  font-weight: bold;
  min-width: 16px;
  height: 16px;
  border-radius: 8px;
  align-items: center;
  justify-content: center;
  padding: 0 4px;
  font-style: normal;
}

#dm-panel {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 380px;
  max-width: 100vw;
  height: 70vh;
  background: var(--bg);
  border-right: 1px solid var(--border-hover);
  border-top: 1px solid var(--border-hover);
  z-index: 201;
  transition: transform 0.2s ease;
  display: flex;
  flex-direction: column;
}

#dm-panel.dm-closed {
  transform: translateX(-100%);
  pointer-events: none;
}

#dm-panel.dm-open {
  transform: translateX(0);
  pointer-events: auto;
}

.dm-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.75em 1em;
  border-bottom: 1px solid var(--border);
  color: var(--accent);
  font-size: 0.95em;
  flex-shrink: 0;
}

.dm-icon-btn {
  background: none;
  border: none;
  color: var(--muted);
  cursor: pointer;
  padding: 0.25em;
  font-size: 1.1em;
}

.dm-icon-btn:hover {
  color: var(--accent);
}

#dm-list-view {
  flex: 1;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
}

.dm-tab {
  background: none;
  border: none;
  border-bottom: 2px solid transparent;
  color: var(--muted);
  cursor: pointer;
  font-family: inherit;
  font-size: 0.85em;
  padding: 0.5em 1em;
}

.dm-tab:hover {
  color: var(--fg);
}

.dm-tab-active {
  color: var(--accent);
  border-bottom-color: var(--accent);
}

#dm-tabs {
  gap: 0;
  flex-shrink: 0;
}

#dm-convo-list {
  flex: 1;
  overflow-y: auto;
}

#dm-project-list {
  flex: 1;
  overflow-y: auto;
}

.dm-convo-item {
  padding: 0.75em 1em;
  border-bottom: 1px solid var(--border);
  cursor: pointer;
}

.dm-convo-item:hover {
  background: var(--surface);
}

.dm-convo-peer {
  color: var(--accent);
  font-size: 0.9em;
}

.dm-convo-preview {
  color: var(--muted);
  font-size: 0.8em;
  margin-top: 0.2em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.dm-convo-time {
  color: var(--dim);
  font-size: 0.75em;
  margin-top: 0.1em;
}

#dm-convo-view {
  flex: 1;
  flex-direction: column;
  overflow: hidden;
}

#dm-messages {
  flex: 1;
  overflow-y: auto;
  padding: 1em;
  display: flex;
  flex-direction: column;
  gap: 0.5em;
}

.dm-msg {
  display: flex;
  flex-direction: column;
  max-width: 75%;
}

.dm-msg-mine {
  align-self: flex-end;
  align-items: flex-end;
}

.dm-msg-theirs {
  align-self: flex-start;
  align-items: flex-start;
}

.dm-bubble {
  background: var(--surface);
  border: 1px solid var(--border-hover);
  padding: 0.6em 1.2em;
  font-size: 0.95em;
  line-height: 1.5;
  word-break: break-word;
  width: fit-content;
  min-width: 3em;
}

.dm-msg-mine .dm-bubble {
  border-radius: 16px 16px 4px 16px;
  color: var(--accent);
}

.dm-msg-theirs .dm-bubble {
  border-radius: 16px 16px 16px 4px;
  color: var(--fg);
}

.dm-time {
  font-size: 0.7em;
  color: var(--dim);
  margin-top: 0.15em;
}

#dm-send-form {
  display: flex;
  gap: 0.5em;
  padding: 0.75em 1em;
  border-top: 1px solid var(--border);
  flex-shrink: 0;
}

#dm-input {
  flex: 1;
  background: var(--surface);
  border: 1px solid var(--border-hover);
  color: var(--fg);
  font-family: inherit;
  font-size: 0.9em;
  padding: 0.5em 1ch;
  border-radius: 4px;
}

#dm-input:focus {
  outline: none;
  border-color: var(--muted);
}

#dm-new-section {
  padding: 0 1em 0.5em;
  flex-shrink: 0;
}

@media (max-width: 768px) {
  body {
    padding: 4em 1.5em 6em;
  }
  .project-tiers {
    flex-direction: column;
  }
  .tier-card {
    min-width: unset;
  }
  /* touch targets — 44px minimum */
  .buy-btn, .follow-btn, .dm-btn {
    padding: 0.5em 1.2ch;
    font-size: 0.85em;
    min-height: 44px;
    min-width: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
  .network-nav a {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
  .top-bar-connect {
    min-height: 44px;
    min-width: 44px;
    display: inline-flex;
    align-items: center;
  }
  /* portfolio nav becomes bottom bar on mobile */
  .portfolio-nav {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    top: auto;
    transform: none;
    flex-direction: row;
    justify-content: center;
    flex-wrap: wrap;
    padding: 0.75em 1em;
    background: var(--bg);
    border-top: 1px solid var(--border);
    z-index: 150;
  }
  .portfolio-nav a {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    font-size: 0.85em;
  }
  /* mobile: hide nav links + selectors, keep wallet visible and right-aligned */
  .network-nav a { display: none; }
  .network-nav .lang-switcher { display: none; }
  .network-nav > span:last-child { display: none; } /* selectors wrapper */
  .network-nav { margin-left: auto; gap: 0.5ch; }
  #mobile-menu-btn { display: flex !important; margin-left: 0.5ch; }

  #mobile-menu-sheet {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background: var(--bg);
    border-top: 1px solid var(--border);
    padding: 1.5em 1em 2em;
    z-index: 500;
    display: flex;
    flex-direction: column;
    gap: 1em;
    max-height: 70vh;
    overflow-y: auto;
    transform: translateY(100%);
    transition: transform 0.3s ease;
    pointer-events: none;
  }
  #mobile-menu-sheet.open {
    transform: translateY(0);
    pointer-events: auto;
  }
  .mobile-menu-section {
    display: flex;
    flex-direction: column;
    gap: 0.25em;
  }
  .mobile-menu-section + .mobile-menu-section {
    border-top: 1px solid var(--border);
    padding-top: 1em;
  }
  .mobile-menu-section-title {
    color: var(--muted);
    font-size: 0.75em;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    margin-bottom: 0.25em;
  }
  .mobile-menu-item {
    color: var(--fg);
    font-size: 1em;
    text-decoration: none;
    padding: 0.5em 0;
    min-height: 44px;
    display: flex;
    align-items: center;
    gap: 0.75ch;
    background: none;
    border: none;
    cursor: pointer;
    font-family: inherit;
    width: 100%;
    text-align: left;
  }
  .mobile-menu-item:hover { color: var(--accent); }
  .mobile-menu-item i { font-size: 1.1em; color: var(--muted); }
  #mobile-menu-sheet a,
  #mobile-menu-sheet button {
    color: var(--fg);
    font-size: 1em;
    text-decoration: none;
    padding: 0.5em 0;
    min-height: 44px;
    display: flex;
    align-items: center;
  }
  #mobile-menu-sheet a:hover { color: var(--accent); }
  #mobile-menu-sheet .lang-switcher {
    font-size: 1em;
    min-height: 44px;
  }

  #mobile-menu-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.5);
    z-index: 499;
  }
  #mobile-menu-overlay.open { display: block; }
  /* form inputs fill width */
  .project-input, .join-input, .tier-qty {
    font-size: 16px; /* prevent iOS zoom */
  }
  /* settings panel full width on mobile */
  .settings-inner {
    padding: 0 1em 4em;
  }
  /* gallery grid responsive */
  .gallery-grid {
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  }
  /* compose panel mobile padding */
  .compose-panel-inner {
    padding: 0 1em;
  }
  /* script toolbar touch targets */
  .script-toolbar { flex-wrap: wrap; }
  .script-toolbar button {
    min-height: 44px;
    min-width: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
  /* additional touch targets */
  .compose-fmt { min-height: 44px; }
  .projects-filter, .projects-list-filter {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
  .library-tag {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
  .track-play-btn {
    min-height: 44px;
    min-width: 44px;
  }
}

/* mobile menu: hidden on desktop, visible on mobile via media query */
@media (min-width: 769px) {
  #mobile-menu-btn { display: none !important; }
  #mobile-menu-sheet { display: none !important; }
  #mobile-menu-overlay { display: none !important; }
}

/* mobile menu sections */
.mobile-menu-section {
  padding: 0.75em 0;
  border-bottom: 1px solid var(--border);
}
.mobile-menu-section:last-child {
  border-bottom: none;
}
#mobile-menu-portfolio a {
  display: flex;
  align-items: center;
  gap: 1ch;
  padding: 0.75em 0;
  color: var(--fg);
  text-decoration: none;
  font-size: 0.95em;
  min-height: 44px;
  cursor: pointer;
}
#mobile-menu-portfolio a:hover { color: var(--accent); }
.mobile-menu-section-title {
  color: var(--dim);
  font-size: 0.7em;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: 0.75em;
}
.mobile-menu-item {
  display: flex;
  align-items: center;
  gap: 1ch;
  padding: 0.75em 0;
  color: var(--fg);
  text-decoration: none;
  font-size: 0.95em;
  min-height: 44px;
  cursor: pointer;
  background: none;
  border: none;
  font-family: inherit;
  width: 100%;
  text-align: left;
}

@media (max-width: 480px) {
  #dm-panel {
    width: 100vw;
    height: 100vh;
  }
  #top-bar {
    padding: 0 0.75em;
  }
  body {
    padding: 4em 1em 6em;
  }
  .template-grid {
    grid-template-columns: 1fr;
  }
  /* feed compose fills width */
  .feed-compose textarea {
    min-height: 80px;
  }
  /* project cards no overflow */
  .project-card-header {
    flex-direction: column;
    gap: 0.25em;
  }
  .project-funding-text {
    flex-direction: column;
    gap: 0.15em;
  }
  .album img {
    width: 60px;
    height: 60px;
  }
  /* player compact on phones */
  #global-player {
    padding: 0 0.75em;
    gap: 0.75ch;
    font-size: 0.8em;
  }
  #global-player .player-info {
    max-width: 15ch;
  }
  /* modal overlays constrained */
  .wallet-dropdown, .domain-dropdown {
    max-width: 100vw;
  }
  /* library search fill */
  .library-search {
    width: 100%;
  }
  /* dock + player overlap fix */
  body:has(#global-player.active) .owner-dock { bottom: 44px; }
}

/* label */

.label-credit {
  color: var(--muted);
  margin-top: 1em;
}

.label-credit a {
  color: var(--fg);
}

/* projects */

.project-card {
  border: 1px solid var(--border);
  padding: 1.5em;
  margin-bottom: 1.5em;
}

.project-card:hover {
  border-color: var(--border-hover);
}

.project-card-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 0.75em;
}

.project-card-title {
  color: var(--accent);
  font-weight: normal;
  font-size: 1.1em;
  margin-bottom: 0.25em;
}

.project-type-badge {
  color: var(--muted);
  font-size: 0.75em;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-right: 1ch;
}

.project-status-badge {
  font-size: 0.75em;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.project-deadline {
  color: var(--dim);
  font-size: 0.8em;
  white-space: nowrap;
}

.project-description {
  color: var(--fg);
  font-size: 0.9em;
  margin-bottom: 1em;
  line-height: 1.5;
}

.project-team {
  margin-bottom: 1em;
}

.project-proposer {
  color: var(--muted);
  font-size: 0.85em;
  display: block;
  margin-bottom: 0.5em;
}

.project-proposer a {
  color: var(--fg);
}

.project-team-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5em;
}

.project-team-member {
  font-size: 0.85em;
}

.project-team-member a {
  color: var(--fg);
}

.project-split {
  color: var(--dim);
  font-size: 0.85em;
}

.project-funding {
  margin-bottom: 0.75em;
}

.project-funding-text {
  display: flex;
  justify-content: space-between;
  font-size: 0.85em;
  color: var(--fg);
  margin-bottom: 0.25em;
}

.project-progress-bar {
  width: 100%;
  height: 4px;
  background: var(--surface);
  border-radius: 2px;
  overflow: hidden;
}

.project-progress-fill {
  height: 100%;
  background: var(--green);
  border-radius: 2px;
  transition: width 0.3s ease;
}

.project-funders {
  margin-bottom: 0.75em;
  font-size: 0.85em;
}

.project-funder {
  color: var(--fg);
  margin-right: 1.5ch;
}

.project-actions {
  display: flex;
  gap: 0.75ch;
  align-items: center;
  margin-top: 0.75em;
}

.project-fund-input {
  width: 8ch;
  background: var(--surface);
  border: 1px solid var(--border-hover);
  color: var(--fg);
  font-family: inherit;
  font-size: 0.9em;
  padding: 0.4em 0.5ch;
}

.project-input {
  width: 100%;
  background: var(--surface);
  border: 1px solid var(--border-hover);
  color: var(--fg);
  font-family: inherit;
  font-size: 1em;
  padding: 0.5em 1ch;
}

.project-input:focus {
  outline: none;
  border-color: var(--muted);
}

.project-label {
  color: var(--muted);
  font-size: 0.85em;
  display: block;
  margin-bottom: 0.4em;
}

/* tiers */

.project-tiers {
  display: flex;
  gap: 1em;
  flex-wrap: wrap;
  margin-top: 0.75em;
}

.tier-card {
  border: 1px solid var(--border);
  padding: 1em;
  min-width: 160px;
  flex: 1;
}

.tier-card:hover {
  border-color: var(--border-hover);
}

.tier-card.tier-sold-out {
  opacity: 0.5;
}

.tier-header {
  margin-bottom: 0.5em;
}

.tier-name {
  color: var(--accent);
  font-size: 0.9em;
}

.tier-badge {
  font-size: 0.65em;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  padding: 0.15em 0.5em;
  border-radius: 2px;
  margin-right: 0.5ch;
}

.tier-ticket {
  background: var(--surface);
  color: var(--green);
  border: 1px solid var(--border-hover);
}

.tier-producer {
  background: var(--surface);
  color: var(--purple);
  border: 1px solid var(--border-hover);
}

.tier-price {
  color: var(--fg);
  font-size: 0.9em;
}

.tier-supply {
  color: var(--dim);
  font-size: 0.8em;
  margin-bottom: 0.5em;
}

.tier-actions {
  display: flex;
  gap: 0.5ch;
  align-items: center;
}

.domain-dropdown {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background: var(--surface);
  border: 1px solid var(--border-hover);
  z-index: 10;
}

.domain-option {
  padding: 0.4em 1ch;
  color: var(--fg);
  cursor: pointer;
  font-size: 0.9em;
}

.domain-option:hover {
  background: var(--border-hover);
  color: var(--accent);
}

.tier-qty {
  width: 4ch;
  background: var(--surface);
  border: 1px solid var(--border-hover);
  color: var(--fg);
  font-family: inherit;
  font-size: 0.85em;
  padding: 0.3em 0.3ch;
  text-align: center;
}

/* feed */

.feed-balance {
  padding: 0.75em 0;
  margin-bottom: 1em;
  border-bottom: 1px solid var(--border);
  font-size: 0.9em;
  color: var(--fg);
}

.feed-compose {
  margin-bottom: 2em;
  padding-bottom: 1.5em;
  border-bottom: 1px solid var(--border);
}

.feed-compose input,
.feed-compose textarea {
  width: 100%;
  background: var(--surface);
  border: 1px solid var(--border-hover);
  color: var(--fg);
  font-family: inherit;
  font-size: 1em;
  padding: 0.5em 1ch;
  margin-bottom: 0.5em;
  resize: vertical;
}

.feed-compose input:focus,
.feed-compose textarea:focus {
  outline: none;
  border-color: var(--muted);
}

.feed-item {
  padding: 1.5em 0;
  border-bottom: 1px solid var(--border);
}

.feed-item-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 0.5em;
}

.feed-author {
  color: var(--accent);
  font-size: 0.85em;
}

.feed-time {
  color: var(--dim);
  font-size: 0.8em;
}

.feed-title {
  color: var(--accent);
  font-weight: normal;
  font-size: 1.1em;
  margin-bottom: 0.5em;
}

.feed-content {
  color: var(--fg);
  font-size: 0.9em;
  line-height: 1.6;
  max-height: 4.8em;
  overflow: hidden;
  transition: max-height 0.3s ease;
  cursor: pointer;
}

.feed-content.expanded {
  max-height: none;
}

.feed-content-toggle {
  color: var(--dim);
  font-size: 0.8em;
  cursor: pointer;
  margin-top: 0.25em;
}

.feed-item.expandable {
  cursor: pointer;
}

.feed-project .project-funding {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease;
}

.feed-project.expanded .project-funding {
  max-height: 200px;
}

.feed-activity {
  padding: 0.75em 0;
  border-bottom: 1px solid var(--border);
}

.feed-activity-text {
  color: var(--muted);
  font-size: 0.85em;
}

.feed-activity-text .feed-author {
  color: var(--fg);
}

/* highlights */

.highlights-section {
  margin-bottom: 2em;
}

.highlights-section h3 {
  color: var(--muted);
  font-size: 0.85em;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: 0.75em;
}

/* domain search */

.domain-option-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0.75em 0;
  border-bottom: 1px solid var(--border);
  gap: 1em;
}

/* library */

.library-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5em;
  margin-bottom: 1.5em;
}

.library-tag {
  color: var(--dim);
  font-size: 0.75em;
  padding: 0.2em 0.6em;
  border: 1px solid var(--border);
  cursor: pointer;
}

.library-tag:hover {
  color: var(--fg);
  border-color: var(--border-hover);
}

.library-item {
  padding: 1em 0;
  border-bottom: 1px solid var(--border);
}

.library-item-header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 0.25em;
}

.library-item-title {
  color: var(--accent);
  font-size: 1em;
}

.library-item-date {
  color: var(--dim);
  font-size: 0.8em;
}

.library-item-meta {
  font-size: 0.85em;
  color: var(--muted);
  margin-bottom: 0.5em;
}

.library-item-author {
  margin-right: 1.5ch;
}

.library-item-contributor a {
  color: var(--muted);
}

.library-item-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3em;
}

.library-item-ipfs {
  color: var(--dim);
  font-size: 0.7em;
  font-family: monospace;
  margin-left: 0.5ch;
}

/* profile */

.profile-header {
  margin-bottom: 1.5em;
}

.profile-domain {
  color: var(--accent);
  font-weight: normal;
  font-size: 1.3em;
  margin-bottom: 0.25em;
}

.profile-addr {
  color: var(--dim);
  font-size: 0.85em;
}

.profile-actions {
  display: flex;
  gap: 0.5ch;
  margin-top: 0.75em;
}

.profile-visit {
  display: inline-block;
  color: var(--muted);
  font-size: 0.85em;
  margin-top: 0.5em;
}

.profile-stats {
  display: flex;
  gap: 2ch;
  color: var(--muted);
  font-size: 0.85em;
  margin-bottom: 2em;
  padding-bottom: 1em;
  border-bottom: 1px solid var(--border);
}

.profile-section {
  margin-bottom: 2em;
}

.profile-section h3 {
  color: var(--muted);
  font-size: 0.8em;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: 0.75em;
}

.credential-item {
  padding: 0.5em 0;
  border-bottom: 1px solid var(--border);
  font-size: 0.9em;
}

.credential-role {
  color: var(--purple);
  font-size: 0.75em;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-right: 1ch;
}

.credential-project {
  color: var(--accent);
}

.credential-type {
  color: var(--dim);
  font-size: 0.8em;
  margin-left: 1ch;
}

.profile-post {
  padding: 0.4em 0;
}

.profile-post-date {
  color: var(--dim);
  font-size: 0.85em;
  margin-right: 1.5ch;
}

.profile-post-title {
  color: var(--fg);
}

.profile-connections {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75em;
}

.profile-connection {
  color: var(--fg);
  font-size: 0.85em;
}

.profile-connection:hover {
  color: var(--accent);
}

/* feed mode — owner is logged in, site becomes a feed */

.feed-mode #portfolio-highlights,
.feed-mode-pending #portfolio-highlights,
.feed-mode #portfolio-cv,
.feed-mode-pending #portfolio-cv {
  display: none !important;
}

.feed-mode #feed,
.feed-mode-pending #feed {
  display: block !important;
}

.feed-mode .portfolio-nav,
.feed-mode-pending .portfolio-nav,
.feed-mode footer,
.feed-mode-pending footer {
  display: none !important;
}

/* left side nav — replaces footer nav */
.portfolio-nav {
  position: fixed;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.4em;
  padding: 0 2em;
  z-index: 150;
  bottom: auto;
  border-top: none;
  background: none;
}

.portfolio-nav a {
  color: var(--dim);
  font-size: 0.8em;
  text-decoration: none;
  margin: 0;
}

.portfolio-nav a:hover {
  color: var(--accent);
}

/* hide left side nav when dock is visible (dock replaces it with tools + section links) */
body:has(.owner-dock) .portfolio-nav {
  display: none !important;
}

/* mobile: revert left-side nav to bottom bar */
@media (max-width: 768px) {
  .portfolio-nav {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    top: auto;
    transform: none;
    flex-direction: row;
    justify-content: center;
    flex-wrap: wrap;
    padding: 0.75em 1em;
    background: var(--bg);
    border-top: 1px solid var(--border);
    z-index: 150;
  }
}

/* compact header in feed mode — small name, hide bio */
.feed-mode header:not(#top-bar),
.feed-mode-pending header:not(#top-bar) {
  margin-bottom: 0 !important;
}

.feed-mode header:not(#top-bar) h1,
.feed-mode-pending header:not(#top-bar) h1 {
  font-size: 1.3em !important;
  margin-bottom: 0.25em !important;
}

.feed-mode header:not(#top-bar) .bio,
.feed-mode header:not(#top-bar) .artist-bio,
.feed-mode-pending header:not(#top-bar) .bio,
.feed-mode-pending header:not(#top-bar) .artist-bio {
  display: none !important;
}

/* blog posts in feed — article style, not tweet style */

.feed-article {
  padding: 1.5em 0 !important;
}

.feed-article-title {
  color: var(--accent);
  font-weight: normal;
  font-size: 1.2em;
  margin: 0.5em 0 0.5em;
  line-height: 1.3;
}

.feed-article-body {
  color: var(--fg);
  font-size: 0.95em;
  line-height: 1.7;
  max-width: 65ch;
}

/* project cards in feed — prominent, encouraging */

.feed-project-card {
  border: 1px solid var(--border) !important;
  padding: 1.5em !important;
  margin: 0.5em 0;
  background: var(--surface);
}

.feed-project-card:hover {
  border-color: var(--border-hover) !important;
}

.feed-project-type {
  color: var(--dim);
  font-size: 0.7em;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: 0.5em;
}

.feed-project-header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 0.25em;
}

.feed-project-title {
  color: var(--accent);
  font-size: 1.3em;
  font-weight: normal;
  text-decoration: none;
}

.feed-project-title:hover {
  text-decoration: underline;
}

.feed-project-proposer {
  color: var(--muted);
  font-size: 0.8em;
  margin-bottom: 0.75em;
}

.feed-project-proposer a {
  color: var(--fg);
}

.feed-project-desc {
  color: var(--fg);
  font-size: 0.9em;
  line-height: 1.5;
  margin-bottom: 1em;
  max-width: 65ch;
}

.feed-project-funding {
  padding-top: 0.75em;
  border-top: 1px solid var(--border);
}

.feed-project-funding-row {
  display: flex;
  justify-content: space-between;
  font-size: 0.85em;
  margin-bottom: 0.4em;
}

.feed-project-funded {
  color: var(--fg);
}

/* write button in top bar */
#write-toggle:hover {
  color: var(--accent) !important;
}

/* compose panel — full screen slide-up */
.compose-panel {
  position: fixed;
  inset: 0;
  z-index: 1000;
  background: var(--bg);
  transform: translateY(100%);
  transition: transform 0.3s ease;
  display: flex;
  flex-direction: column;
}

.compose-panel.compose-open {
  transform: translateY(0);
}

.compose-panel-inner {
  flex: 1;
  display: flex;
  flex-direction: column;
  max-width: 680px;
  width: 100%;
  margin: 0 auto;
  padding: 0 2em;
  overflow-y: auto;
  min-height: 0;
}

.compose-header {
  display: flex;
  align-items: center;
  gap: 1.5ch;
  padding: 1.5em 0;
  border-bottom: 1px solid var(--border);
  margin-bottom: 1.5em;
}

.compose-close-btn {
  background: none;
  border: none;
  color: var(--muted);
  cursor: pointer;
  font-size: 1.2em;
  padding: 0.2em;
  display: flex;
  align-items: center;
}

.compose-close-btn:hover { color: var(--accent); }

.compose-label {
  flex: 1;
  color: var(--muted);
  font-size: 0.85em;
  text-transform: uppercase;
  letter-spacing: 0.1em;
}

.compose-body {
  flex: 1;
  display: flex;
  flex-direction: column;
}

.compose-title {
  width: 100%;
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--border);
  color: var(--accent);
  font-family: inherit;
  font-size: 1.5em;
  padding: 0.5em 0;
  margin-bottom: 1em;
  outline: none;
}

.compose-title::placeholder { color: var(--dim); }

.compose-content {
  flex: 1;
  width: 100%;
  min-height: 50vh;
  background: transparent;
  border: none;
  color: var(--fg);
  font-family: inherit;
  font-size: 1em;
  line-height: 1.8;
  padding: 0;
  resize: none;
  outline: none;
}

.compose-content::placeholder { color: var(--border-hover); }

.compose-toolbar {
  display: flex;
  align-items: center;
  gap: 0.5ch;
  padding: 1em 0;
  border-top: 1px solid var(--border);
  margin-top: 1em;
}

.compose-tool {
  background: none;
  border: 1px solid var(--border);
  color: var(--muted);
  cursor: pointer;
  font-size: 1em;
  padding: 0.3em 0.6em;
  display: flex;
  align-items: center;
}

.compose-tool:hover {
  color: var(--accent);
  border-color: var(--muted);
}

.compose-format-bar {
  display: flex;
  gap: 0.25ch;
  padding: 0.5em 0;
  border-bottom: 1px solid var(--border);
  margin-bottom: 0.75em;
}

.compose-fmt {
  background: none;
  border: 1px solid transparent;
  color: var(--muted);
  cursor: pointer;
  font-family: inherit;
  font-size: 0.9em;
  padding: 0.2em 0.5em;
  display: flex;
  align-items: center;
}

.compose-fmt:hover {
  color: var(--accent);
  border-color: var(--border);
}

.compose-preview {
  flex: 1;
  min-height: 50vh;
  max-height: 60vh;
  overflow-y: auto;
  font-size: 1em;
  line-height: 1.8;
  color: var(--fg);
  max-width: 65ch;
  padding-bottom: 2em;
}

.compose-preview p {
  margin-bottom: 1em;
}

.compose-preview img {
  max-width: 100%;
  margin: 1em 0;
}

/* post page — full article view */

.post-page-header {
  margin-bottom: 2em;
  padding-bottom: 1.5em;
  border-bottom: 1px solid var(--border);
}

.post-page-title {
  color: var(--accent);
  font-weight: normal;
  font-size: 2em;
  line-height: 1.2;
  margin-bottom: 0.5em;
  letter-spacing: -0.01em;
}

.post-page-meta {
  color: var(--muted);
  font-size: 0.85em;
}

.post-page-meta a {
  color: var(--fg);
}

.post-page-meta time {
  color: var(--dim);
}

.post-page-body {
  max-width: 65ch;
  font-size: 1.05em;
  line-height: 1.8;
  color: var(--fg);
}

.post-page-body p {
  margin-bottom: 1.5em;
}

.post-page-body img {
  max-width: 100%;
  margin: 1.5em 0;
}

.post-page-body a {
  color: var(--accent);
  text-decoration: underline;
}

.post-reference {
  margin-top: 2em;
  padding-top: 1.5em;
  border-top: 1px solid var(--border);
  font-size: 0.85em;
}

.post-ref-label {
  color: var(--dim);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-size: 0.8em;
  margin-right: 0.5ch;
}

.post-ref-title {
  color: var(--accent);
}

.post-ref-author {
  color: var(--muted);
}

/* journal */

.journal-entry {
  padding: 1em 0;
  border-bottom: 1px solid var(--border);
}

.journal-entry-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 0.5em;
}

.journal-entry-name {
  color: var(--accent);
  font-size: 0.9em;
}

.journal-entry-preview {
  color: var(--muted);
  font-size: 0.85em;
  line-height: 1.5;
}

/* graph */

.network-toggle {
  background: none;
  border: none;
  color: var(--dim);
  font-family: inherit;
  font-size: 0.85em;
  cursor: pointer;
  padding: 0;
}

.network-toggle.active {
  color: var(--accent);
}

.network-toggle:hover {
  color: var(--fg);
}

/* CV — clean text resume on homepage */

.cv {
  margin-top: 2em;
}

.cv-section {
  margin-bottom: 2em;
}

.cv-section h3 {
  color: var(--muted);
  font-size: 0.85em;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: 0.75em;
  padding-bottom: 0.25em;
  border-bottom: 1px solid var(--border);
}

.cv-item {
  margin-bottom: 0.5em;
  font-size: 0.9em;
}

.cv-title {
  color: var(--accent);
}

.cv-detail {
  color: var(--muted);
}

/* settings panel */

.settings-panel {
  position: fixed;
  inset: 0;
  z-index: 300;
  background: var(--bg);
  transform: translateY(100%);
  transition: transform 0.3s ease;
  overflow-y: auto;
}

.settings-panel.settings-open {
  transform: translateY(0);
}

.settings-inner {
  max-width: 680px;
  margin: 0 auto;
  padding: 0 2em 4em;
}

.settings-header {
  display: flex;
  align-items: center;
  gap: 1.5ch;
  padding: 1.5em 0;
  border-bottom: 1px solid var(--border);
  margin-bottom: 1.5em;
}

.settings-tabs {
  display: flex;
  gap: 0;
  border-bottom: 1px solid var(--border);
  margin-bottom: 1.5em;
}

.settings-tab {
  background: none;
  border: none;
  border-bottom: 2px solid transparent;
  color: var(--muted);
  font-family: inherit;
  font-size: 0.85em;
  padding: 0.5em 1.5ch;
  cursor: pointer;
}

.settings-tab:hover { color: var(--fg); }
.settings-tab.active { color: var(--accent); border-bottom-color: var(--accent); }

.settings-field {
  margin-bottom: 1.25em;
}

.settings-label {
  display: block;
  color: var(--muted);
  font-size: 0.85em;
  margin-bottom: 0.4em;
}

.settings-module {
  border: 1px solid var(--border);
  padding: 1em;
  margin-bottom: 0.75em;
}

.settings-module-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.editor-item {
  padding: 0.75em 0;
  border-bottom: 1px solid var(--border);
}

/* loading skeletons */
@keyframes skeleton-pulse {
  0%, 100% { opacity: 0.15; }
  50% { opacity: 0.3; }
}

.skeleton {
  background: var(--surface);
  border-radius: 2px;
  animation: skeleton-pulse 1.5s ease-in-out infinite;
}

.skeleton-text { height: 0.9em; margin-bottom: 0.75em; }
.skeleton-title { height: 1.2em; width: 60%; margin-bottom: 1em; }
.skeleton-block { height: 4em; margin-bottom: 1em; }

#graph-canvas {
  background: var(--bg);
}

/* messages page — two-column layout */

.messages-container {
  display: flex;
  height: calc(100vh - 4em);
  margin: 0 -3em;
  overflow: hidden;
}

.messages-sidebar {
  width: 280px;
  min-width: 280px;
  border-right: 1px solid var(--border);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

#messages-list {
  flex: 1;
  overflow-y: auto;
  min-height: 0;
}

.messages-sidebar-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1em;
  border-bottom: 1px solid var(--border);
  color: var(--accent);
  font-size: 0.9em;
}

.messages-chat {
  flex: 1;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  min-height: 0;
}

.messages-chat-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0.75em 1.5em;
  border-bottom: 1px solid var(--border);
  color: var(--accent);
  font-size: 0.9em;
}

.messages-msgs {
  flex: 1;
  overflow-y: auto;
  padding: 1.5em;
  display: flex;
  flex-direction: column;
  gap: 0.5em;
}

.messages-send-form {
  display: flex;
  gap: 0.5em;
  padding: 0.75em 1.5em;
  border-top: 1px solid var(--border);
}

.messages-send-form input {
  flex: 1;
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--fg);
  font-family: inherit;
  font-size: 0.9em;
  padding: 0.5em 1ch;
}

.messages-send-form input:focus {
  outline: none;
  border-color: var(--muted);
}

.messages-pay-bar {
  display: flex;
  gap: 0.5em;
  align-items: center;
  padding: 0.5em 1em;
  border-top: 1px solid var(--border);
  background: var(--bg, #0a0a0a);
}
.messages-pay-bar input {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 8px;
  color: var(--fg);
  font-family: inherit;
  font-size: 0.95em;
  padding: 0.5em 1ch;
  text-align: center;
  width: 10ch;
}
.messages-pay-bar .buy-btn {
  border-radius: 8px;
  padding: 0.5em 1.5ch;
}


.msg-convo-item {
  padding: 0.75em 1em;
  border-bottom: 1px solid var(--border);
  cursor: pointer;
}

.msg-convo-item:hover,
.msg-convo-item.active {
  background: var(--surface);
}

.msg-convo-peer {
  color: var(--accent);
  font-size: 0.85em;
}

.msg-convo-preview {
  color: var(--muted);
  font-size: 0.8em;
  margin-top: 0.15em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.msg-convo-time {
  color: var(--dim);
  font-size: 0.7em;
  margin-top: 0.1em;
}

.msg-reaction {
  font-size: 0.75em;
  margin-top: 0.15em;
  opacity: 0.8;
}

.msg-reply-quote {
  font-size: 0.75em;
  color: var(--dim);
  border-left: 2px solid var(--border);
  padding-left: 0.75ch;
  margin-bottom: 0.25em;
  max-width: 75%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.msg-sender {
  font-size: 0.7em;
  color: var(--accent);
  margin-bottom: 0.15em;
}

.msg-convo-group .msg-convo-peer::before {
  content: '# ';
  color: var(--dim);
}

/* messages: reuse dm bubble styles from existing CSS */

#messages-chat-active {
  flex: 1;
  display: flex;
  flex-direction: column;
  min-height: 0;
}

#messages-chat-active .messages-msgs {
  flex: 1;
  min-height: 0;
}

#messages-chat-active .messages-send-form {
  flex-shrink: 0;
}

@media (max-width: 768px) {
  .messages-container {
    flex-direction: column;
    height: calc(100vh - 3.5em);
    margin: 0 -1.5em;
  }
  .messages-sidebar {
    width: 100%;
    max-height: none;
    height: calc(100vh - 3.5em - 3em); /* subtract top bar + dock */
    border-right: none;
    border-bottom: none;
    display: flex;
  }
  .messages-chat {
    display: none;
    height: calc(100vh - 3.5em - 3em); /* subtract top bar + dock */
  }
  .messages-send-form {
    position: sticky;
    bottom: 0;
    background: var(--bg, #0a0a0a);
    padding: 0.5em 1em;
    z-index: 10;
  }
  .messages-pay-bar {
    position: sticky;
    bottom: 3em;
    z-index: 10;
  }
  .messages-container.chat-active .messages-sidebar {
    display: none;
  }
  .messages-container.chat-active .messages-chat {
    display: flex;
  }
  .messages-back-btn {
    display: inline-flex !important;
    background: none;
    border: none;
    color: var(--fg);
    cursor: pointer;
    font-size: 1.2em;
    padding: 0.2em;
    margin-right: 0.5ch;
    align-items: center;
  }
  .messages-msgs {
    padding: 1em !important;
  }
  .messages-send-form {
    padding: 0.5em 1em !important;
  }
  .dm-bubble {
    font-size: 1em !important;
  }
  /* message input sticky above bottom nav */
  .messages-send-form {
    position: sticky !important;
    bottom: 0 !important;
    background: var(--bg) !important;
    z-index: 10 !important;
    padding-bottom: calc(0.5em + env(safe-area-inset-bottom)) !important;
  }
  /* hide EN/USD selectors on mobile (they go in hamburger menu) */
  .lang-switcher { display: none !important; }
}
@media (max-width: 480px) {
  .messages-container { margin: 0 -1em; }
}

/* Album detail + track player */
.album-clickable:hover { opacity: 0.85; }
.album-detail {
  padding: 0.75em 0 1.5em 0;
  margin-bottom: 1em;
  border-bottom: 1px solid var(--border);
}
.album-tracks { display: flex; flex-direction: column; gap: 0.25em; }
.album-track {
  display: flex;
  align-items: center;
  gap: 1ch;
  padding: 0.4em 0;
  font-size: 0.9em;
}
.track-title { color: var(--fg); }
.track-duration { color: var(--dim); font-size: 0.85em; }
.track-player { display: none; }
.track-play-btn {
  background: none;
  border: 1px solid var(--border);
  color: var(--muted);
  font-family: inherit;
  font-size: 0.75em;
  padding: 0.15em 0.8ch;
  cursor: pointer;
  margin-left: auto;
}
.track-play-btn:hover { border-color: var(--accent); color: var(--accent); }
.album-links {
  display: flex;
  gap: 1.5ch;
  margin-top: 0.75em;
  padding-top: 0.5em;
}
.album-link {
  color: var(--dim);
  font-size: 0.8em;
  text-decoration: none;
}
.album-link:hover { color: var(--accent); }

/* Global persistent player */
#global-player {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 40px;
  background: var(--bg);
  border-top: 1px solid var(--border);
  display: none;
  align-items: center;
  gap: 1.5ch;
  padding: 0 2em;
  z-index: 500;
  font-size: 0.85em;
}
#global-player.active { display: flex; }
#global-player .player-btn {
  background: none;
  border: 1px solid var(--border);
  color: var(--fg);
  font-family: inherit;
  font-size: 0.85em;
  padding: 0.1em 0.8ch;
  cursor: pointer;
  min-width: 4.5ch;
  text-align: center;
}
#global-player .player-btn:hover { border-color: var(--accent); color: var(--accent); }
#global-player .player-info {
  display: flex;
  gap: 0.5ch;
  color: var(--fg);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 30ch;
}
#global-player .player-artist { color: var(--dim); }
#global-player .player-progress {
  flex: 1;
  height: 3px;
  background: var(--border);
  cursor: pointer;
  position: relative;
  min-width: 60px;
}
#global-player .player-progress-fill {
  height: 100%;
  background: var(--accent);
  width: 0%;
  pointer-events: none;
}
#global-player .player-time { color: var(--dim); white-space: nowrap; font-size: 0.9em; }

/* push content up when player is visible */
body:has(#global-player.active) { padding-bottom: 60px; }
body:has(#global-player.active) .owner-dock { bottom: 44px; }
body:has(#global-player.active) .portfolio-nav { bottom: 44px; }

/* Video player container — consistent sizing before/after load */
.video-player { max-width: 100%; }
.video-player video {
  max-width: 100%;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  display: block;
  background: var(--bg);
  object-fit: contain;
}
.video-lazy {
  max-width: 100%;
  aspect-ratio: 16 / 9;
}
.video-lazy img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* Video section layout — featured + grid */
.video-featured {
  margin-bottom: 2em;
}
.video-featured .video-player {
  width: 100%;
}
.video-caption {
  margin-top: 0.4em;
  font-size: 0.85em;
  color: var(--fg);
}
.video-caption .video-title {
  color: var(--accent);
}
.video-caption .video-year {
  color: var(--muted);
}
.video-caption .video-collabs {
  color: var(--muted);
  margin-left: 0.5ch;
}
.video-desc {
  color: var(--muted);
  font-size: 0.85em;
  margin-top: 0.3em;
}
.video-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.5em;
}
.video-grid .video-item {
  min-width: 0;
}
@media (max-width: 600px) {
  .video-grid {
    grid-template-columns: 1fr;
  }
  .script-character { margin-left: 20%; }
  .script-dialogue { margin-left: 10%; margin-right: 10%; }
  .script-paren { margin-left: 15%; margin-right: 15%; }
}

/* Track duration */
.track-duration {
  color: var(--muted);
  font-size: 0.8em;
  margin-left: 0.5ch;
}

/* PiP video thumbnail */
#pip-container {
  position: fixed;
  bottom: 48px;
  right: 1em;
  width: 240px;
  z-index: 501;
  border: 1px solid var(--border);
  display: none;
}
#pip-container.active { display: block; }
#pip-container video { width: 100%; display: block; }

/* style the inline video when it's in PiP mode */
video:picture-in-picture + *, video:-webkit-picture-in-picture + * { display: none; }
video[style*="display: none"] ~ * { }
/* center Chrome's "Playing in picture-in-picture" overlay */
video { background: var(--bg); }

/* SPA loading fade */
main.spa-loading { opacity: 0.5; transition: opacity 0.15s; }

/* Language switcher */
.lang-switcher {
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--muted);
  font-family: 'SF Mono', 'Fira Code', monospace;
  font-size: 0.7em;
  padding: 0.2em 0.3ch;
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
}
#currency-switcher {
  margin-left: 4px;
}
.lang-switcher:hover { border-color: var(--muted); color: var(--fg); }
.lang-switcher:focus { outline: none; border-color: var(--accent); }

/* RTL support */
[dir="rtl"] #top-bar { flex-direction: row-reverse; }
[dir="rtl"] .network-nav { flex-direction: row-reverse; }
[dir="rtl"] .portfolio-nav { direction: rtl; }
[dir="rtl"] .owner-dock { left: auto; right: 0; }
[dir="rtl"] .feed-item-header { flex-direction: row-reverse; }
[dir="rtl"] .feed-activity-text { direction: rtl; }
[dir="rtl"] .compose-header { flex-direction: row-reverse; }
[dir="rtl"] .compose-format-bar { direction: rtl; }
[dir="rtl"] .messages-container { flex-direction: row-reverse; }
[dir="rtl"] .messages-sidebar { border-right: none; border-left: 1px solid var(--border); }
[dir="rtl"] .dm-bubble-self { margin-left: 0; margin-right: auto; }
[dir="rtl"] .dm-bubble-peer { margin-right: 0; margin-left: auto; }
[dir="rtl"] .settings-panel { direction: rtl; }
[dir="rtl"] .settings-tabs { direction: rtl; }
[dir="rtl"] .project-input { direction: rtl; }
[dir="rtl"] .journal-entry-header { flex-direction: row-reverse; }
[dir="rtl"] .credit { direction: rtl; }
[dir="rtl"] .project { direction: rtl; }

/* notifications */
.notif-badge {
  position: absolute;
  top: -0.2em;
  right: -0.3em;
  background: var(--red);
  color: var(--accent);
  font-size: 0.55em;
  min-width: 1.4em;
  height: 1.4em;
  line-height: 1.4em;
  text-align: center;
  border-radius: 50%;
  font-weight: bold;
  pointer-events: none;
}

#dock-notifications {
  position: relative;
}

.notif-panel {
  position: absolute;
  left: 3em;
  top: -2em;
  background: var(--bg);
  border: 1px solid var(--border);
  width: 28ch;
  max-height: 60vh;
  overflow-y: auto;
  z-index: 300;
  font-size: 0.85em;
}

.notif-header {
  padding: 0.5em 1ch;
  border-bottom: 1px solid var(--border);
  color: var(--muted);
  font-size: 0.9em;
}

.notif-empty {
  padding: 1.5em 1ch;
  color: var(--dim);
  text-align: center;
}

.notif-item {
  display: block;
  padding: 0.5em 1ch;
  border-bottom: 1px solid var(--border);
  color: var(--fg);
  text-decoration: none;
  transition: background 0.1s;
}

.notif-item:hover {
  background: var(--surface);
  text-decoration: none;
}

.notif-item.notif-unread {
  border-left: 2px solid var(--accent);
}

.notif-item:not(.notif-unread) {
  opacity: 0.55;
}

.notif-page-row:not(.notif-unread) {
  opacity: 0.55;
}

.notif-text {
  line-height: 1.4;
}

@media (max-width: 768px) {
  .notif-panel {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 3.5em;
    top: auto;
    width: 100%;
    max-height: 50vh;
  }
}

[dir="rtl"] .notif-panel { left: auto; right: 3em; }
[dir="rtl"] .notif-item.notif-unread { border-left: none; border-right: 2px solid var(--accent); }
[dir="rtl"] .notif-page-row.notif-unread { border-left: none; border-right: 2px solid var(--accent); }

/* projects view toggle */
.projects-toggle {
  background: none;
  border: none;
  color: var(--muted);
  cursor: pointer;
  font-family: inherit;
  font-size: 0.9em;
}

.projects-toggle.active {
  color: var(--accent);
}

.projects-toggle:hover {
  color: var(--fg);
}

/* projects map */
#projects-map {
  border-radius: 2px;
  background: var(--surface);
}

#projects-map .leaflet-popup-content-wrapper {
  background: var(--surface);
  color: var(--fg);
  border: 1px solid var(--border);
  border-radius: 2px;
  box-shadow: none;
}

#projects-map .leaflet-popup-tip {
  background: var(--surface);
  border: 1px solid var(--border);
}

#projects-map .leaflet-popup-close-button {
  color: var(--muted);
}

/* map filter buttons */
.projects-map-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5em;
  margin-bottom: 1em;
  align-items: center;
}

.projects-filter,
.projects-list-filter {
  background: none;
  border: 1px solid var(--border);
  color: var(--muted);
  cursor: pointer;
  font-family: inherit;
  font-size: 0.8em;
  padding: 0.25em 1ch;
}

.projects-filter.active,
.projects-list-filter.active {
  color: var(--accent);
  border-color: var(--accent);
}

.projects-filter:hover,
.projects-list-filter:hover {
  color: var(--fg);
  border-color: var(--border-hover);
}

/* no-location project items */
.project-no-loc-item {
  padding: 0.3em 0;
  font-size: 0.9em;
}

.project-no-loc-item a {
  color: var(--fg);
}

/* marker cluster overrides for dark theme */
.marker-cluster-small {
  background-color: rgba(192, 192, 192, 0.3);
}
.marker-cluster-small div {
  background-color: rgba(192, 192, 192, 0.6);
  color: var(--bg);
}
.marker-cluster-medium {
  background-color: rgba(74, 222, 128, 0.3);
}
.marker-cluster-medium div {
  background-color: rgba(74, 222, 128, 0.6);
  color: var(--bg);
}
.marker-cluster-large {
  background-color: rgba(96, 165, 250, 0.3);
}
.marker-cluster-large div {
  background-color: rgba(96, 165, 250, 0.6);
  color: var(--bg);
}

/* propose form mini map */
#propose-location-map {
  border-radius: 2px;
  background: var(--surface);
}

#propose-location-map .leaflet-popup-content-wrapper {
  background: var(--surface);
  color: var(--fg);
  border: 1px solid var(--border);
  border-radius: 2px;
  box-shadow: none;
}

#propose-location-map .leaflet-popup-tip {
  background: var(--surface);
  border: 1px solid var(--border);
}

#propose-location-map .leaflet-control-zoom a {
  background: var(--surface);
  color: var(--fg);
  border-color: var(--border);
}

#propose-location-map .leaflet-control-zoom a:hover {
  background: var(--border-hover);
}

#propose-location-map .leaflet-control-attribution {
  background: rgba(10, 10, 10, 0.7);
  color: var(--dim);
  font-size: 0.7em;
}

#propose-location-map .leaflet-control-attribution a {
  color: var(--muted);
}

/* radius slider */
#propose-radius-row {
  display: flex;
  align-items: center;
  gap: 1ch;
}

#propose-radius {
  -webkit-appearance: none;
  appearance: none;
  height: 2px;
  background: var(--border);
  outline: none;
  flex: 1;
}

#propose-radius::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--fg);
  cursor: pointer;
  border: none;
}

#propose-radius::-moz-range-thumb {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--fg);
  cursor: pointer;
  border: none;
}

/* Universal loading animation */
.praxis-loader {
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 4em 0;
  color: var(--dim);
  font-family: 'SF Mono', 'Fira Code', monospace;
  font-size: 1.2em;
}
.praxis-loader::after {
  content: '~';
  animation: spin-ascii 1s steps(4) infinite;
}
@keyframes spin-ascii {
  0% { content: '~'; }
  25% { content: '\00B7'; }
  50% { content: '\25C7'; }
  75% { content: '\25CB'; }
}

/* script mode — screenplay editor */

.script-editor {
  font-family: 'Courier New', Courier, monospace;
  font-size: 13px;
  line-height: 1.5;
  min-height: 60vh;
  max-width: 680px;
  padding: 1em 0;
  outline: none;
  color: var(--fg);
  white-space: pre-wrap;
  word-wrap: break-word;
}

.script-editor:empty::before {
  content: attr(data-placeholder);
  color: var(--border-hover);
  pointer-events: none;
}

.script-line {
  padding: 0.1em 0;
  min-height: 1.5em;
}

.script-scene {
  text-transform: uppercase;
  font-weight: bold;
  color: var(--accent);
  margin-top: 1.5em;
  text-align: left;
}

.script-action {
  color: var(--fg);
}

.script-character {
  text-transform: uppercase;
  margin-left: 35%;
  color: var(--accent);
  margin-top: 1em;
}

.script-dialogue {
  margin-left: 18%;
  margin-right: 18%;
  color: var(--fg);
}

.script-paren {
  margin-left: 26%;
  margin-right: 26%;
  color: var(--dim);
}

.script-transition {
  text-align: right;
  text-transform: uppercase;
  color: var(--dim);
  margin-top: 1em;
}

/* stage play element types */
.script-act {
  text-transform: uppercase;
  font-weight: bold;
  text-align: center;
  color: var(--accent);
  font-size: 1.1em;
  margin-top: 2em;
}

.script-direction {
  font-style: italic;
  color: var(--dim);
  margin-left: 5%;
  margin-right: 5%;
  margin-top: 0.5em;
}

.script-type-indicator {
  display: inline-block;
  color: var(--dim);
  font-size: 0.7em;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  font-family: var(--font);
  min-width: 10ch;
}

.script-toolbar {
  display: flex;
  align-items: center;
  gap: 1.5ch;
  padding: 0.75em 0;
  border-bottom: 1px solid var(--border);
  margin-bottom: 1em;
  font-family: var(--font);
}

.script-toolbar button {
  background: none;
  border: 1px solid var(--border);
  color: var(--dim);
  font-family: inherit;
  font-size: 0.8em;
  padding: 0.2em 1ch;
  cursor: pointer;
}

.script-toolbar button:hover {
  color: var(--accent);
  border-color: var(--border-hover);
}

.script-toolbar button.active {
  color: var(--accent);
  border-color: var(--accent);
}

/* screenplay rendering in blog posts */
.post-page-body .fountain-scene {
  text-transform: uppercase;
  font-weight: bold;
  font-family: 'Courier New', Courier, monospace;
  margin-top: 1.5em;
  text-align: left;
}
.post-page-body .fountain-action {
  font-family: 'Courier New', Courier, monospace;
  margin-top: 0.5em;
  text-align: left;
}
.post-page-body .fountain-character {
  text-transform: uppercase;
  font-family: 'Courier New', Courier, monospace;
  margin-left: 35%;
  margin-top: 1em;
}
.post-page-body .fountain-dialogue {
  font-family: 'Courier New', Courier, monospace;
  margin-left: 18%;
  margin-right: 18%;
}
.post-page-body .fountain-paren {
  font-family: 'Courier New', Courier, monospace;
  margin-left: 26%;
  margin-right: 26%;
  color: var(--dim);
}
.post-page-body .fountain-transition {
  text-align: right;
  text-transform: uppercase;
  font-family: 'Courier New', Courier, monospace;
  color: var(--dim);
  margin-top: 1em;
}
.post-page-body .fountain-blank {
  height: 1em;
}

/* stage play rendering in blog posts */
.post-page-body .stageplay-act {
  text-transform: uppercase;
  font-weight: bold;
  text-align: center;
  font-family: 'Courier New', Courier, monospace;
  font-size: 1.1em;
  margin-top: 2em;
  margin-bottom: 0.5em;
}
.post-page-body .stageplay-scene {
  text-transform: uppercase;
  font-weight: bold;
  text-align: center;
  font-family: 'Courier New', Courier, monospace;
  margin-top: 1.5em;
}
.post-page-body .stageplay-direction {
  font-family: 'Courier New', Courier, monospace;
  font-style: italic;
  color: var(--dim);
  margin-left: 5%;
  margin-right: 5%;
  margin-top: 0.5em;
}
.post-page-body .stageplay-character {
  text-transform: uppercase;
  font-weight: bold;
  font-family: 'Courier New', Courier, monospace;
  margin-top: 1em;
  text-align: left;
}
.post-page-body .stageplay-dialogue {
  font-family: 'Courier New', Courier, monospace;
  margin-left: 5%;
}
.post-page-body .stageplay-paren {
  font-family: 'Courier New', Courier, monospace;
  font-style: italic;
  margin-left: 5%;
  color: var(--dim);
}
.post-page-body .stageplay-action {
  font-family: 'Courier New', Courier, monospace;
  text-align: left;
  margin-top: 0.5em;
}
.post-page-body .stageplay-blank {
  height: 1em;
}

/* --- Modal overlay / bottom sheet system --- */
.praxis-modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.85);
  z-index: 10000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1em;
}
.praxis-modal-overlay.z-10001 {
  z-index: 10001;
}
.praxis-modal-dialog {
  background: #0a0a0a;
  border: 1px solid #222;
  color: #c0c0c0;
  padding: 2em;
  max-width: 440px;
  width: 95%;
}
.praxis-modal-dialog h3 { color: var(--accent, #fff); }
.praxis-modal-dialog input[type="text"],
.praxis-modal-dialog input[type="password"],
.praxis-modal-dialog select {
  background: #111 !important;
  border-color: #333 !important;
  color: #c0c0c0 !important;
}
.praxis-modal-dialog button {
  color: #c0c0c0;
  border-color: #333;
}

@media (max-width: 768px) {
  .praxis-modal-overlay {
    align-items: flex-end !important;
  }
  .praxis-modal-dialog {
    max-width: 100%;
    width: 100%;
    border-radius: 12px 12px 0 0;
    border-bottom: none;
    padding-bottom: calc(2em + env(safe-area-inset-bottom));
    max-height: 85vh;
    overflow-y: auto;
  }
}

/* --- Funding bottom sheet (always slides up from bottom) --- */
.funding-sheet-overlay {
  align-items: flex-end !important;
  justify-content: center !important;
}
.funding-sheet {
  max-width: 500px;
  width: 100%;
  padding: 1.5em 1.5em calc(1em + env(safe-area-inset-bottom));
  border-radius: 16px 16px 0 0;
  border-bottom: none;
  max-height: 85vh;
  overflow-y: auto;
  animation: slideUp 0.3s cubic-bezier(0.32, 0.72, 0, 1);
}
.funding-sheet::before {
  content: '';
  display: block;
  width: 36px;
  height: 4px;
  background: #333;
  border-radius: 2px;
  margin: 0 auto 1em;
}
@keyframes slideUp {
  from { transform: translateY(100%); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}
.funding-sheet-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.2em; }
.funding-sheet-header h3 { margin: 0; font-size: 1em; font-weight: 400; color: var(--fg, #c0c0c0); }
.funding-sheet-needed { font-size: 0.85em; color: var(--accent, #00ff41); }
.funding-section-label { font-size: 0.75em; color: var(--dim, #666); text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 0.6em; }
.funding-chains { display: flex; flex-direction: column; gap: 0.4em; margin-bottom: 1.2em; }
.funding-chain-row { display: flex; align-items: center; justify-content: space-between; padding: 0.5em 0.6em; border: 1px solid var(--border, #333); background: var(--bg, #0a0a0a); }
.funding-chain-row:hover { border-color: var(--dim, #666); }
.funding-chain-info { display: flex; align-items: center; gap: 0.6em; }
.funding-chain-name { font-size: 0.85em; color: var(--fg, #c0c0c0); min-width: 6em; }
.funding-chain-balance { font-size: 0.85em; color: var(--dim, #666); }
.funding-chain-balance.sufficient { color: var(--accent, #00ff41); }
.funding-bridge-btn { background: none; border: 1px solid var(--accent, #00ff41); color: var(--accent, #00ff41); font-family: inherit; font-size: 0.8em; padding: 0.25em 0.7em; cursor: pointer; white-space: nowrap; }
.funding-bridge-btn:hover { background: var(--accent, #00ff41); color: #000; }
.funding-bridge-btn:disabled { opacity: 0.4; cursor: default; }
.funding-bridge-btn:disabled:hover { background: none; color: var(--accent, #00ff41); }
.funding-chain-row.no-balance { opacity: 0.4; }
.funding-fiat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.5em; margin-bottom: 1.2em; }
.funding-fiat-btn { display: flex; align-items: center; justify-content: center; gap: 0.4em; padding: 0.6em 0.4em; border: 1px solid var(--border, #333); background: var(--bg, #0a0a0a); color: var(--fg, #c0c0c0); font-family: inherit; font-size: 0.82em; cursor: pointer; }
.funding-fiat-btn:hover { border-color: var(--accent, #00ff41); color: var(--accent, #00ff41); }
.funding-fiat-btn i { font-size: 1.1em; }
.funding-status { font-size: 0.85em; color: var(--muted, #888); min-height: 1.5em; margin-bottom: 0.8em; }
.funding-status.error { color: var(--red, #a44); }
.funding-status.success { color: var(--accent, #00ff41); }
.funding-cancel-btn { display: block; width: 100%; background: none; border: 1px solid var(--border, #333); color: var(--dim, #666); font-family: inherit; font-size: 0.85em; padding: 0.5em; cursor: pointer; }
.funding-cancel-btn:hover { border-color: var(--dim, #666); color: var(--fg, #c0c0c0); }
.funding-loading { display: flex; align-items: center; justify-content: center; padding: 2em; color: var(--dim, #666); font-size: 0.85em; }

@media (max-width: 768px) {
  .funding-sheet { max-width: 100%; width: 100%; }
  .funding-fiat-grid { grid-template-columns: repeat(2, 1fr); }
}

/* Supporter homepage — masonry grid + top artists */
.masonry-grid { column-count: 3; column-gap: 1em; }
.masonry-tile { break-inside: avoid; margin-bottom: 1em; border: 1px solid var(--border); overflow: hidden; position: relative; cursor: pointer; display: block; text-decoration: none; color: var(--fg); }
.masonry-tile img { width: 100%; display: block; }
.masonry-tile-overlay { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient(transparent, rgba(0,0,0,0.8)); padding: 0.75em; }
.my-artists-section { margin-bottom: 2em; }
.top-artists-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1em; }
.top-artist-card { display: flex; flex-direction: column; align-items: center; gap: 0.5em; padding: 1em; border: 1px solid var(--border); text-decoration: none; color: var(--fg); }
.top-artist-card:hover { border-color: var(--accent); }
@media (max-width: 600px) { .masonry-grid { column-count: 2; } .top-artists-grid { grid-template-columns: repeat(2, 1fr); } }
