
@import url('https://fonts.googleapis.com/css2?family=Comic+Neue:wght@400;700&family=Press+Start+2P&family=VT323&display=swap');

:root {
  --ansi-black:   #000000;
  --ansi-red:     #aa0000;
  --ansi-green:   #00aa00;
  --ansi-yellow:  #aa5500;
  --ansi-blue:    #0000aa;
  --ansi-magenta: #aa00aa;
  --ansi-cyan:    #00aaaa;
  --ansi-white:   #aaaaaa;
  --ansi-bright-black:   #555555;
  --ansi-bright-red:     #ff0000;
  --ansi-bright-green:   #00ff00;
  --ansi-bright-yellow:  #ffff00;
  --ansi-bright-blue:    #5555ff;
  --ansi-bright-magenta: #ff00ff;
  --ansi-bright-cyan:    #00ffff;
  --ansi-bright-white:   #ffffff;
}

body {
  margin: 0;
  padding: 0;
  font-family: 'Comic Neue', 'Comic Sans MS', cursive;
  color: var(--ansi-bright-yellow);
  background:
    radial-gradient(circle at 20% 30%, var(--ansi-bright-white) 1px, transparent 2px),
    radial-gradient(circle at 70% 60%, var(--ansi-bright-cyan) 1px, transparent 2px),
    radial-gradient(circle at 45% 85%, var(--ansi-bright-white) 1px, transparent 2px),
    radial-gradient(circle at 85% 18%, var(--ansi-bright-cyan) 1px, transparent 2px);
  background-color: var(--ansi-black);
  background-size: 160px 160px, 200px 200px, 240px 240px, 180px 180px;
  background-attachment: fixed;
  overflow-x: hidden;
}

.top-marquee {
  background: repeating-linear-gradient(
    90deg,
    var(--ansi-bright-magenta) 0 20px,
    var(--ansi-bright-cyan) 20px 40px,
    var(--ansi-bright-yellow) 40px 60px,
    var(--ansi-bright-red) 60px 80px,
    var(--ansi-bright-green) 80px 100px
  );
  color: var(--ansi-black);
  font-weight: bold;
  font-size: 18px;
  padding: 6px 0;
  border-bottom: 4px ridge var(--ansi-bright-yellow);
  text-shadow: 1px 1px 0 var(--ansi-bright-white);
}

.title-wrap {
  text-align: center;
  margin: 30px 0 10px 0;
  perspective: 600px;
}
h1.rainbow {
  font-family: 'Impact', 'Comic Sans MS', sans-serif;
  font-size: 72px;
  margin: 0;
  background: linear-gradient(90deg,
    var(--ansi-bright-red), var(--ansi-bright-yellow), var(--ansi-bright-green),
    var(--ansi-bright-cyan), var(--ansi-bright-blue), var(--ansi-bright-magenta), var(--ansi-bright-red));
  background-size: 400% auto;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: rainbow 4s linear infinite, wobble 3s ease-in-out infinite;
  letter-spacing: 3px;
  text-shadow:
    0 0 0 transparent,
    4px 4px 0 rgba(255, 255, 255);
  filter: drop-shadow(3px 3px 0 var(--ansi-black));
}
@keyframes rainbow {
  to { background-position: 400% center; }
}
@keyframes wobble {
  0%, 100% { transform: rotateZ(-2deg) scale(1); }
  50% { transform: rotateZ(2deg) scale(1.05); }
}

.subtitle {
  text-align: center;
  font-family: 'VT323', monospace;
  font-size: 28px;
  color: var(--ansi-bright-cyan);
  text-shadow: 2px 2px 0 var(--ansi-bright-magenta);
  margin: 0 0 20px 0;
}

.blink {
  animation: blink 1s steps(2, start) infinite;
  color: var(--ansi-bright-red);
  font-weight: bold;
}
@keyframes blink { to { visibility: hidden; } }

table.layout {
  width: 90%;
  max-width: 1000px;
  margin: 0 auto;
  border-collapse: separate;
  border-spacing: 8px;
}

td.sidebar {
  width: 220px;
  vertical-align: top;
  background: var(--ansi-blue);
  border: 4px outset var(--ansi-bright-yellow);
  padding: 12px;
  color: var(--ansi-bright-white);
}

td.main {
  vertical-align: top;
  background: rgba(0,0,0,0.7);
  border: 4px ridge var(--ansi-bright-cyan);
  padding: 18px;
}

.sidebar h3 {
  font-family: 'Press Start 2P', monospace;
  font-size: 11px;
  color: var(--ansi-bright-yellow);
  background: var(--ansi-green);
  padding: 6px;
  margin: 0 -12px 10px -12px;
  text-align: center;
  border-top: 2px solid var(--ansi-bright-white);
  border-bottom: 2px solid var(--ansi-bright-white);
}
.sidebar ul {
  list-style: none;
  padding: 0;
  margin: 0 0 16px 0;
  font-size: 16px;
}
.sidebar li {
  padding: 4px 0;
  border-bottom: 1px dashed var(--ansi-bright-cyan);
}
.sidebar li::before {
  content: "►";
  color: var(--ansi-bright-magenta);
  margin-right: 6px;
  animation: pulse 1s infinite alternate;
}
@keyframes pulse {
  from { color: var(--ansi-bright-magenta); }
  to { color: var(--ansi-bright-yellow); }
}
.sidebar a {
  color: var(--ansi-bright-green);
  text-decoration: underline;
  font-weight: bold;
}
.sidebar a:visited { color: var(--ansi-bright-magenta); }
.sidebar a:hover {
  color: var(--ansi-bright-red);
  background: var(--ansi-bright-yellow);
}

.main h2 {
  font-family: 'Impact', sans-serif;
  color: var(--ansi-bright-white);
  font-size: 36px;
  margin: 20px 0 10px 0;
  text-shadow:
    2px 2px 0 var(--ansi-bright-blue),
    4px 4px 0 var(--ansi-black);
  border-bottom: 3px double var(--ansi-bright-yellow);
  padding-bottom: 4px;
}
.main h2::before { content: "~ "; color: var(--ansi-bright-yellow); }
.main h2::after  { content: " ~"; color: var(--ansi-bright-yellow); }

.main p {
  color: var(--ansi-bright-white);
  font-size: 17px;
  line-height: 1.6;
  text-shadow: 1px 1px 0 var(--ansi-black);
}
.main a {
  color: var(--ansi-bright-cyan);
  font-weight: bold;
}

.divider {
  height: 12px;
  background: repeating-linear-gradient(
    90deg,
    var(--ansi-bright-red) 0 12px, var(--ansi-bright-yellow) 12px 24px, var(--ansi-bright-green) 24px 36px,
    var(--ansi-bright-cyan) 36px 48px, var(--ansi-bright-blue) 48px 60px, var(--ansi-bright-magenta) 60px 72px
  );
  margin: 20px 0;
  border-top: 2px solid var(--ansi-bright-white);
  border-bottom: 2px solid var(--ansi-bright-white);
  animation: slide 1.5s linear infinite;
  background-size: 72px 100%;
}
@keyframes slide {
  to { background-position: 72px 0; }
}

.construction {
  text-align: center;
  background: repeating-linear-gradient(
    45deg,
    var(--ansi-bright-yellow) 0 20px,
    var(--ansi-black) 20px 40px
  );
  color: var(--ansi-bright-white);
  font-family: 'Press Start 2P', monospace;
  font-size: 12px;
  padding: 14px;
  margin: 16px 0;
  border: 4px dashed var(--ansi-bright-red);
  text-shadow: 2px 2px 0 var(--ansi-black), -1px -1px 0 var(--ansi-black);
  animation: shake 0.4s infinite;
}
@keyframes shake {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-2px); }
  75% { transform: translateX(2px); }
}

.badges {
  text-align: center;
  margin: 16px 0;
}
.badge {
  display: inline-block;
  width: 88px;
  height: 31px;
  margin: 4px;
  font-family: 'Press Start 2P', monospace;
  font-size: 6px;
  color: var(--ansi-bright-white);
  text-align: center;
  line-height: 31px;
  border: 1px solid var(--ansi-bright-white);
  text-shadow: 1px 1px 0 var(--ansi-black);
  image-rendering: pixelated;
}
.badge.ie    { background: linear-gradient(180deg,var(--ansi-bright-blue),var(--ansi-blue)); }
.badge.ns    { background: linear-gradient(180deg,var(--ansi-bright-green),var(--ansi-green)); }
.badge.html  { background: linear-gradient(180deg,var(--ansi-bright-yellow),var(--ansi-yellow)); }
.badge.midi  { background: linear-gradient(180deg,var(--ansi-bright-magenta),var(--ansi-magenta)); }
.badge.flash { background: linear-gradient(180deg,var(--ansi-bright-red),var(--ansi-red)); }

.counter-box {
  text-align: center;
  background: var(--ansi-black);
  border: 3px inset var(--ansi-white);
  padding: 10px;
  margin: 12px 0;
}
.counter-digits {
  display: inline-block;
  font-family: 'VT323', monospace;
  font-size: 34px;
  background: var(--ansi-black);
  color: var(--ansi-bright-green);
  padding: 4px 10px;
  border: 2px inset var(--ansi-bright-black);
  letter-spacing: 4px;
  text-shadow: 0 0 8px var(--ansi-bright-green);
}

.webring {
  margin: 30px auto;
  max-width: 700px;
  background: var(--ansi-black);
  color: var(--ansi-bright-white);
  border: 4px ridge var(--ansi-bright-yellow);
  padding: 14px;
  text-align: center;
  font-family: 'VT323', monospace;
  font-size: 22px;
}
.webring a {
  color: var(--ansi-bright-cyan);
  font-weight: bold;
  margin: 0 8px;
}
.webring .ring-title {
  font-family: 'Press Start 2P', monospace;
  font-size: 13px;
  color: var(--ansi-bright-magenta);
  margin-bottom: 8px;
  text-shadow: 1px 1px 0 var(--ansi-bright-yellow);
}

.guestbook-btn {
  display: inline-block;
  font-family: 'Comic Sans MS', cursive;
  font-size: 22px;
  color: var(--ansi-bright-white);
  background: linear-gradient(180deg, var(--ansi-bright-magenta), var(--ansi-magenta));
  padding: 10px 22px;
  border: 3px outset var(--ansi-bright-magenta);
  text-decoration: none;
  margin: 10px;
  text-shadow: 2px 2px 0 var(--ansi-black);
  cursor: pointer;
}
.guestbook-btn:hover {
  background: linear-gradient(180deg, var(--ansi-bright-yellow), var(--ansi-yellow));
  color: var(--ansi-black);
  border-style: inset;
}

.spin {
  display: inline-block;
  animation: spin 2s linear infinite;
  font-size: 30px;
}
@keyframes spin { to { transform: rotate(360deg); } }

.jump {
  display: inline-block;
  animation: jump 0.8s ease-in-out infinite;
}
@keyframes jump {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

.footer {
  text-align: center;
  padding: 30px 10px;
  color: var(--ansi-bright-white);
  font-family: 'VT323', monospace;
  font-size: 20px;
}
.footer a { color: var(--ansi-bright-cyan); }

.sparkle {
  position: fixed;
  pointer-events: none;
  font-size: 18px;
  z-index: 9999;
  animation: sparkleFade 0.8s linear forwards;
}
@keyframes sparkleFade {
  0%   { opacity: 1; transform: translate(0,0) scale(1) rotate(0deg); }
  100% { opacity: 0; transform: translate(0,30px) scale(0.3) rotate(180deg); }
}

.music-player {
  background: linear-gradient(180deg, var(--ansi-white), var(--ansi-bright-black));
  border: 3px outset var(--ansi-bright-white);
  padding: 8px 14px;
  margin: 14px 0;
  color: var(--ansi-black);
  font-family: 'VT323', monospace;
  font-size: 18px;
  display: flex;
  align-items: center;
  gap: 10px;
}
.music-player button {
  background: var(--ansi-white);
  border: 2px outset var(--ansi-bright-white);
  padding: 4px 10px;
  font-family: 'Press Start 2P', monospace;
  font-size: 9px;
  cursor: pointer;
}
.music-player button:active { border-style: inset; }
.now-playing { animation: scroll-text 8s linear infinite; }

.pulse-text {
  animation: pulseSize 0.6s ease-in-out infinite alternate;
  display: inline-block;
}
@keyframes pulseSize {
  from { transform: scale(1); }
  to { transform: scale(1.15); }
}

.glow {
  text-shadow:
    0 0 5px var(--ansi-bright-white),
    0 0 10px var(--ansi-bright-magenta),
    0 0 20px var(--ansi-bright-magenta),
    0 0 30px var(--ansi-bright-magenta);
}

.back-home {
  display: block;
  text-align: center;
  margin: 10px auto 4px auto;
  font-family: 'VT323', monospace;
  font-size: 22px;
}
.back-home a {
  color: var(--ansi-bright-green);
  font-weight: bold;
  text-decoration: none;
  text-shadow: 2px 2px 0 var(--ansi-black);
}
.back-home a:hover { color: var(--ansi-bright-red); background: var(--ansi-bright-yellow); }

.gb-wrap {
  width: 92%;
  max-width: 680px;
  margin: 0 auto 30px auto;
  background: rgba(0,0,0,0.72);
  border: 4px ridge var(--ansi-bright-magenta);
  padding: 22px;
  text-align: center;
}
.gb-wrap h2 {
  font-family: 'Impact', sans-serif;
  color: var(--ansi-bright-magenta);
  font-size: 30px;
  text-align: center;
  text-shadow: 2px 2px 0 var(--ansi-bright-cyan), 4px 4px 0 var(--ansi-black);
  border-bottom: 3px double var(--ansi-bright-yellow);
  padding-bottom: 6px;
  margin: 0 0 12px 0;
}

.gb-form {
  max-width: 620px;
  margin: 12px auto 20px auto;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.gb-input, .gb-msg {
  font-family: 'VT323', monospace;
  font-size: 18px;
  color: var(--ansi-bright-green);
  background: var(--ansi-black);
  border: 3px inset var(--ansi-white);
  padding: 6px 8px;
  width: 100%;
  box-sizing: border-box;
}
.gb-msg { resize: vertical; }
.gb-input::placeholder, .gb-msg::placeholder { color: var(--ansi-bright-black); }
.gb-input:focus, .gb-msg:focus {
  outline: none;
  border-color: var(--ansi-bright-cyan);
  box-shadow: 0 0 8px var(--ansi-bright-cyan);
}

.gb-entries {
  max-width: 620px;
  margin: 0 auto;
}
.gb-entry {
  background: var(--ansi-blue);
  border: 3px outset var(--ansi-bright-magenta);
  padding: 8px 10px;
  margin: 8px 0;
  text-align: left;
}
.gb-entry.gb-mine {
  border-color: var(--ansi-bright-yellow);
  background: var(--ansi-magenta);
}
.gb-entry-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
  border-bottom: 1px dashed var(--ansi-bright-cyan);
  padding-bottom: 4px;
  margin-bottom: 4px;
}
.gb-who {
  font-family: 'VT323', monospace;
  font-size: 20px;
  color: var(--ansi-bright-yellow);
  font-weight: bold;
  word-break: break-word;
}
.gb-site { color: var(--ansi-bright-cyan); font-size: 15px; }
.gb-youtag { color: var(--ansi-bright-green); font-size: 15px; }
.gb-date {
  font-family: 'VT323', monospace;
  font-size: 15px;
  color: var(--ansi-white);
  white-space: nowrap;
}
.gb-entry-msg {
  font-family: 'Comic Neue', 'Comic Sans MS', cursive;
  font-size: 15px;
  color: var(--ansi-bright-white);
  line-height: 1.4;
  word-break: break-word;
}

html.light-mode {
  filter: invert(1) hue-rotate(180deg);
}

html.light-mode img,
html.light-mode video,
html.light-mode #flash-overlay {
  filter: invert(1) hue-rotate(180deg);
}

#flash-overlay {
  position: fixed;
  inset: 0;
  background: #ffffff;
  opacity: 0;
  pointer-events: none;
  z-index: 2147483647;
}

.theme-toggle {
  color: var(--ansi-bright-yellow);
  font-weight: bold;
  cursor: pointer;
  text-decoration: underline;
}
.theme-toggle:hover {
  color: var(--ansi-bright-red);
  background: var(--ansi-bright-yellow);
}

.calc-window {
  max-width: 100%;
  margin: 14px 0;
  border: 4px ridge var(--ansi-bright-white);
  background: var(--ansi-black);
  box-shadow: 8px 8px 0 var(--ansi-bright-black);
}
.calc-titlebar {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 5px 8px;
  background: linear-gradient(90deg, var(--ansi-blue), var(--ansi-bright-blue));
  border-bottom: 3px ridge var(--ansi-bright-white);
  font-family: 'Press Start 2P', monospace;
  font-size: 10px;
  color: var(--ansi-bright-white);
}
.calc-dots {
  display: flex;
  gap: 5px;
}
.calc-dot {
  width: 12px;
  height: 12px;
  border: 2px outset var(--ansi-bright-white);
}
.calc-name { flex: 1 1 auto; }
.calc-right { color: var(--ansi-bright-yellow); }

.calc-frame {
  display: block;
  width: 100%;
  height: 520px;
  border: 0;
  background: var(--ansi-black);
}
@media (max-width: 700px) {
  .calc-frame { height: 380px; }
}
