@import "tailwindcss"; /* ========================================================================== Webcore / Old Web theme — Windows 98 + early GeoCities/Y2K Palette, bevels, retro scrollbars, desktop wallpaper, animations. ========================================================================== */ @theme { --font-sans: "MS Sans Serif", "Tahoma", "Verdana", Geneva, sans-serif; --font-display: "MS Sans Serif", "Tahoma", "Verdana", Geneva, sans-serif; --font-mono: "Courier New", "Lucida Console", monospace; /* Classic Win98 palette */ --color-ink: #008080; /* desktop teal */ --color-panel: #c0c0c0; /* classic gray chrome */ --color-surface: #ffffff; /* white work area */ --color-surface-2: #dfdfdf; /* light gray */ --color-surface-3: #808080; /* dark gray */ --color-line: #808080; /* borders */ --color-fg: #000000; /* black text */ --color-muted: #404040; --color-faint: #808080; --color-accent: #000080; /* navy — links / own messages */ --color-accent-strong: #1084d0; /* active title gradient */ --color-accent-ghost: #d6e4f0; /* selected row tint */ --color-online: #008000; /* IRC green */ --color-away: #808000; --color-danger: #cc0000; --animate-msg-in: msg-in 0.18s steps(3, end) both; --animate-fade-in: fade-in 0.2s steps(4, end) both; --animate-rise: rise 0.22s steps(4, end) both; --animate-pulse-soft: pulse-soft 1.2s steps(2, end) infinite; --animate-bounce-dot: bounce-dot 1s steps(2, end) infinite; --animate-blink: blink 1s steps(1, end) infinite; --animate-marquee: marquee 20s linear infinite; } @keyframes msg-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } } @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes rise { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } } @keyframes pulse-soft { 50% { opacity: 0.35; } } @keyframes bounce-dot { 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; } 30% { transform: translateY(-3px); opacity: 1; } } @keyframes blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } } @keyframes marquee { from { transform: translateX(100%); } to { transform: translateX(-100%); } } @layer base { html, body, #root { height: 100%; } body { margin: 0; color-scheme: light; background-color: var(--color-ink); /* tiled desktop wallpaper: subtle checkerboard over teal */ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.07) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.07) 75%), linear-gradient(45deg, rgba(0, 0, 0, 0.07) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.07) 75%); background-size: 8px 8px; background-position: 0 0, 4px 4px; background-attachment: fixed; color: var(--color-fg); font-family: var(--font-sans); font-size: 13px; line-height: 1.45; -webkit-font-smoothing: none; -moz-osx-font-smoothing: unset; text-rendering: optimizeSpeed; } /* No rounded corners anywhere — straight edges only. */ *, *::before, *::after { border-radius: 0 !important; } ::selection { background: #000080; color: #ffffff; } :focus-visible { outline: 1px dotted #000000; outline-offset: -3px; } button { font: inherit; cursor: pointer; } button:disabled { cursor: default; } input, textarea, select { font: inherit; caret-color: #000000; } a { color: #0000ee; text-decoration: underline; } a:visited { color: #551a8b; } /* ---- Retro scrollbars (WebKit + Firefox) ---- */ * { scrollbar-width: auto; scrollbar-color: #c0c0c0 #dfdfdf; } ::-webkit-scrollbar { width: 16px; height: 16px; } ::-webkit-scrollbar-track { background: #dfdfdf; background-image: linear-gradient(45deg, #ffffff 25%, transparent 25%, transparent 75%, #ffffff 75%); background-size: 2px 2px; } ::-webkit-scrollbar-thumb { background: #c0c0c0; border: 2px solid; border-color: #ffffff #0a0a0a #0a0a0a #ffffff; box-shadow: inset -1px -1px 0 #808080, inset 1px 1px 0 #dfdfdf; } ::-webkit-scrollbar-thumb:active { border-color: #0a0a0a #ffffff #ffffff #0a0a0a; box-shadow: inset 1px 1px 0 #808080, inset -1px -1px 0 #dfdfdf; } ::-webkit-scrollbar-corner { background: #dfdfdf; } ::-webkit-scrollbar-button:single-button { display: block; width: 16px; height: 16px; background-color: #c0c0c0; border: 2px solid; border-color: #ffffff #0a0a0a #0a0a0a #ffffff; box-shadow: inset -1px -1px 0 #808080, inset 1px 1px 0 #dfdfdf; background-repeat: no-repeat; background-position: center; } ::-webkit-scrollbar-button:single-button:vertical:decrement { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 4l4 6H4z' fill='%23000'/%3E%3C/svg%3E"); } ::-webkit-scrollbar-button:single-button:vertical:increment { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 12l-4-6h8z' fill='%23000'/%3E%3C/svg%3E"); } ::-webkit-scrollbar-button:single-button:horizontal:decrement { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4 8l6-4v8z' fill='%23000'/%3E%3C/svg%3E"); } ::-webkit-scrollbar-button:single-button:horizontal:increment { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M12 8l-6 4V4z' fill='%23000'/%3E%3C/svg%3E"); } } @layer utilities { /* ---- Win98 bevels ---- */ .bevel { border: 2px solid; border-color: #dfdfdf #0a0a0a #0a0a0a #dfdfdf; box-shadow: inset 1px 1px 0 #ffffff, inset -1px -1px 0 #808080; } .bevel-in { border: 2px solid; border-color: #0a0a0a #dfdfdf #dfdfdf #0a0a0a; box-shadow: inset 1px 1px 0 #808080, inset -1px -1px 0 #ffffff; } .bevel-thin { border: 1px solid; border-color: #ffffff #808080 #808080 #ffffff; } .bevel-thin-in { border: 1px solid; border-color: #808080 #ffffff #ffffff #808080; } /* Raised button that presses in on :active */ .retro-btn { background: #c0c0c0; border: 2px solid; border-color: #dfdfdf #0a0a0a #0a0a0a #dfdfdf; box-shadow: inset 1px 1px 0 #ffffff, inset -1px -1px 0 #808080; color: #000000; } .retro-btn:active:not(:disabled) { border-color: #0a0a0a #dfdfdf #dfdfdf #0a0a0a; box-shadow: inset 1px 1px 0 #808080, inset -1px -1px 0 #ffffff; transform: translate(1px, 1px); } .retro-btn:disabled { color: #808080; text-shadow: 1px 1px 0 #ffffff; } .retro-btn-primary { background: #000080; color: #ffffff; border: 2px solid; border-color: #4a4aff #000040 #000040 #4a4aff; box-shadow: inset 1px 1px 0 #6a6aff, inset -1px -1px 0 #000040; } .retro-btn-primary:active:not(:disabled) { border-color: #000040 #4a4aff #4a4aff #000040; box-shadow: inset 1px 1px 0 #000040, inset -1px -1px 0 #6a6aff; transform: translate(1px, 1px); } .retro-btn-primary:disabled { background: #808080; color: #c0c0c0; } /* Sunken white input / textarea */ .retro-input { background: #ffffff; border: 2px solid; border-color: #0a0a0a #dfdfdf #dfdfdf #0a0a0a; box-shadow: inset 1px 1px 0 #808080, inset -1px -1px 0 #ffffff; color: #000000; outline: none; } .retro-input::placeholder { color: #808080; } .retro-input:focus { outline: 1px dotted #000000; outline-offset: -4px; } /* Title bar gradient */ .win-title { background: linear-gradient(90deg, #000080 0%, #1084d0 100%); color: #ffffff; } .win-title-inactive { background: linear-gradient(90deg, #808080 0%, #b5b5b5 100%); color: #dfdfdf; } /* Small title-bar control button */ .win-btn { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 16px; background: #c0c0c0; border: 1px solid; border-color: #ffffff #0a0a0a #0a0a0a #ffffff; box-shadow: inset -1px -1px 0 #808080, inset 1px 1px 0 #dfdfdf; color: #000000; font-family: var(--font-mono); font-size: 11px; line-height: 1; } .win-btn:active { border-color: #0a0a0a #ffffff #ffffff #0a0a0a; box-shadow: inset 1px 1px 0 #808080, inset -1px -1px 0 #dfdfdf; } .pixelated { image-rendering: pixelated; } .blink { animation: var(--animate-blink); } .retro-link { color: #0000ee; text-decoration: underline; } .retro-link:visited { color: #551a8b; } /* Marquee-style ticker */ .marquee { overflow: hidden; white-space: nowrap; } .marquee > span { display: inline-block; padding-left: 100%; animation: var(--animate-marquee); } .scrollbar-slim { scrollbar-width: auto; scrollbar-color: #c0c0c0 #dfdfdf; } .no-scrollbar { scrollbar-width: none; } .no-scrollbar::-webkit-scrollbar { display: none; } .text-balance { text-wrap: balance; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } }