Skip to content

Instantly share code, notes, and snippets.

@foeken
Created March 2, 2025 10:43
Show Gist options
  • Save foeken/6b53410a43190c521057b1cb33053590 to your computer and use it in GitHub Desktop.
Save foeken/6b53410a43190c521057b1cb33053590 to your computer and use it in GitHub Desktop.
/* Retro Gaming Console CSS for Tana System */
/* Import pixel fonts */
@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap');
/* Base styles and color palette */
:root {
--primary: #ff0066;
--secondary: #00ccff;
--accent: #ffcc00;
--dark: #222034;
--light: #f2f2f2;
--console-border: #444444;
--console-body: #303030;
--screen-glow: 0 0 10px rgba(0, 204, 255, 0.7);
--button-glow: 0 0 8px rgba(255, 204, 0, 0.7);
}
/* Global reset and base styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
transition: all 0.2s ease;
}
body {
font-family: 'Press Start 2P', cursive;
background-color: var(--dark);
color: var(--light);
line-height: 1.6;
font-size: 14px;
overflow-x: hidden;
padding: 20px;
background-image:
linear-gradient(rgba(34, 32, 52, 0.95), rgba(34, 32, 52, 0.95)),
repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(255, 255, 255, 0.05) 2px, rgba(255, 255, 255, 0.05) 4px);
}
/* Console container */
.container, main, #main, .tana-container {
max-width: 1000px;
margin: 0 auto;
background-color: var(--console-body);
border: 15px solid var(--console-border);
border-radius: 20px;
padding: 25px;
position: relative;
box-shadow:
0 0 0 5px rgba(0, 0, 0, 0.3),
inset 0 0 20px rgba(0, 0, 0, 0.5);
animation: power-on 1.5s ease-in-out 0.5s backwards;
}
/* Header styling */
header, .header, .tana-header {
margin-bottom: 30px;
padding-bottom: 15px;
border-bottom: 4px solid var(--primary);
position: relative;
text-align: center;
}
h1, .title, .tana-title {
color: var(--accent);
font-size: 28px;
text-shadow: 4px 4px 0 var(--dark);
letter-spacing: 2px;
margin-bottom: 15px;
animation: title-flicker 3s infinite;
}
/* Screen effect */
.content, .tana-content {
background-color: rgba(0, 0, 0, 0.7);
border-radius: 10px;
padding: 20px;
margin-bottom: 20px;
border: 4px solid var(--secondary);
position: relative;
overflow: hidden;
box-shadow: var(--screen-glow), inset 0 0 50px rgba(0, 204, 255, 0.2);
}
.content::before, .tana-content::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: linear-gradient(90deg, transparent, var(--secondary), transparent);
animation: scan-line 8s linear infinite;
opacity: 0.3;
}
/* Links with button effect */
a, .link, .tana-link {
color: var(--accent);
text-decoration: none;
display: inline-block;
padding: 5px 10px;
border: 2px solid var(--accent);
border-radius: 4px;
margin: 5px;
background-color: var(--dark);
transition: all 0.2s;
position: relative;
overflow: hidden;
}
a:hover, .link:hover, .tana-link:hover {
transform: scale(1.05);
box-shadow: var(--button-glow);
cursor: pointer;
}
a:active, .link:active, .tana-link:active {
transform: scale(0.95);
background-color: var(--accent);
color: var(--dark);
}
/* List items as menu options */
ul, ol, .list, .tana-list {
list-style-type: none;
padding: 10px;
}
li, .list-item, .tana-list-item {
margin-bottom: 10px;
padding: 8px;
border-left: 4px solid var(--primary);
background-color: rgba(255, 0, 102, 0.1);
}
li:hover, .list-item:hover, .tana-list-item:hover {
background-color: rgba(255, 0, 102, 0.2);
transform: translateX(5px);
}
/* Buttons */
button, .button, .tana-button {
font-family: 'Press Start 2P', cursive;
background-color: var(--secondary);
color: var(--dark);
border: none;
padding: 10px 20px;
margin: 10px 5px;
border-radius: 4px;
cursor: pointer;
box-shadow: 0 4px 0 rgba(0, 0, 0, 0.3);
position: relative;
overflow: hidden;
}
button:hover, .button:hover, .tana-button:hover {
background-color: var(--primary);
transform: translateY(-2px);
box-shadow: 0 6px 0 rgba(0, 0, 0, 0.3);
}
button:active, .button:active, .tana-button:active {
transform: translateY(2px);
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.3);
}
/* Form elements */
input, textarea, select {
font-family: 'Press Start 2P', cursive;
background-color: var(--dark);
border: 2px solid var(--secondary);
color: var(--light);
padding: 10px;
margin: 5px 0;
border-radius: 4px;
width: 100%;
}
input:focus, textarea:focus, select:focus {
outline: none;
border-color: var(--accent);
box-shadow: var(--button-glow);
}
/* D-pad control styling */
.controls, .tana-controls {
display: flex;
justify-content: center;
margin: 20px 0;
}
.d-pad {
position: relative;
width: 100px;
height: 100px;
}
.d-pad-button {
position: absolute;
width: 30px;
height: 30px;
background-color: var(--primary);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.d-pad-up { top: 0; left: 35px; border-radius: 5px 5px 0 0; }
.d-pad-right { right: 0; top: 35px; border-radius: 0 5px 5px 0; }
.d-pad-down { bottom: 0; left: 35px; border-radius: 0 0 5px 5px; }
.d-pad-left { left: 0; top: 35px; border-radius: 5px 0 0 5px; }
.d-pad-center {
left: 35px;
top: 35px;
width: 30px;
height: 30px;
background-color: var(--accent);
border-radius: 50%;
}
/* Footer */
footer, .footer, .tana-footer {
margin-top: 30px;
padding-top: 15px;
border-top: 4px solid var(--primary);
text-align: center;
font-size: 12px;
color: var(--secondary);
}
/* Specific Tana elements */
.tana-node {
margin: 15px 0;
padding: 10px;
border-left: 3px solid var(--secondary);
animation: pulse 4s infinite alternate;
}
.tana-tag {
display: inline-block;
background-color: var(--primary);
color: var(--light);
padding: 3px 6px;
border-radius: 4px;
margin: 2px;
font-size: 10px;
}
.tana-supertag {
background-color: var(--accent);
color: var(--dark);
}
/* Pixel art decorations */
.pixel-art {
position: absolute;
width: 40px;
height: 40px;
background-color: transparent;
}
.pixel-art.character {
top: 20px;
right: 20px;
background-image: linear-gradient(
to bottom,
transparent 0%, transparent 20%,
var(--primary) 20%, var(--primary) 40%,
var(--light) 40%, var(--light) 60%,
var(--secondary) 60%, var(--secondary) 80%,
var(--accent) 80%, var(--accent) 100%
);
animation: bounce 2s infinite alternate;
}
.pixel-art.item {
bottom: 20px;
left: 20px;
background-color: var(--accent);
border-radius: 5px;
box-shadow: 0 0 10px rgba(255, 204, 0, 0.8);
animation: rotate 4s linear infinite;
}
/* Animations */
@keyframes scan-line {
0% {
transform: translateY(-100px);
}
100% {
transform: translateY(1000px);
}
}
@keyframes title-flicker {
0%, 19.999%, 22%, 62.999%, 64%, 64.999%, 70%, 100% {
opacity: 1;
text-shadow: 4px 4px 0 var(--dark),
-2px -2px 0 var(--secondary),
2px 2px 0 var(--primary);
}
20%, 21.999%, 63%, 63.999%, 65%, 69.999% {
opacity: 0.8;
text-shadow: none;
}
}
@keyframes bounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-10px);
}
}
@keyframes rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes pulse {
0% {
box-shadow: 0 0 5px rgba(0, 204, 255, 0.1);
}
100% {
box-shadow: 0 0 15px rgba(0, 204, 255, 0.4);
}
}
@keyframes power-on {
0% {
opacity: 0;
transform: scale(0.8);
}
20% {
opacity: 0.2;
}
40% {
opacity: 0.4;
transform: scale(0.9);
}
60% {
opacity: 0.1;
}
80% {
opacity: 0.9;
transform: scale(1.01);
}
90% {
opacity: 0.7;
}
100% {
opacity: 1;
transform: scale(1);
}
}
/* Add console buttons on top */
.container::before, main::before, #main::before, .tana-container::before {
content: "";
position: absolute;
top: -30px;
left: 50px;
width: 20px;
height: 20px;
background-color: var(--primary);
border-radius: 50%;
box-shadow: 0 0 10px rgba(255, 0, 102, 0.7);
animation: blink 2s infinite alternate;
}
.container::after, main::after, #main::after, .tana-container::after {
content: "";
position: absolute;
top: -30px;
left: 80px;
width: 20px;
height: 20px;
background-color: var(--accent);
border-radius: 50%;
box-shadow: 0 0 10px rgba(255, 204, 0, 0.7);
animation: blink 3s infinite alternate;
}
@keyframes blink {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
/* Media Queries */
@media (max-width: 768px) {
body {
font-size: 12px;
padding: 10px;
}
h1, .title, .tana-title {
font-size: 20px;
}
.container, main, #main, .tana-container {
border-width: 10px;
padding: 15px;
}
}
/* Add CRT effect */
.crt-effect {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 9999;
background: linear-gradient(
rgba(18, 16, 16, 0) 50%,
rgba(0, 0, 0, 0.1) 50%
),
linear-gradient(
90deg,
rgba(255, 0, 0, 0.03),
rgba(0, 255, 0, 0.02),
rgba(0, 0, 255, 0.03)
);
background-size: 100% 2px, 3px 100%;
animation: flicker 0.3s infinite;
}
@keyframes flicker {
0% {
opacity: 0.97;
}
5% {
opacity: 0.95;
}
10% {
opacity: 0.97;
}
15% {
opacity: 0.94;
}
20% {
opacity: 0.98;
}
50% {
opacity: 0.94;
}
80% {
opacity: 0.98;
}
85% {
opacity: 0.96;
}
90% {
opacity: 0.97;
}
100% {
opacity: 0.94;
}
}
/* For Tana specific elements */
.supertag, .tag, [data-type="supertag"], [data-type="tag"] {
color: var(--accent);
font-weight: bold;
padding: 0 3px;
}
.field, [data-type="field"] {
color: var(--secondary);
font-weight: bold;
}
/* Add this at the end of your CSS */
body::after {
content: "";
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: repeating-linear-gradient(
0deg,
rgba(0, 0, 0, 0.15),
rgba(0, 0, 0, 0.15) 1px,
transparent 1px,
transparent 2px
);
pointer-events: none;
z-index: 1000;
opacity: 0.3;
}
/* Add a startup sequence animation */
body {
animation: startup 4s linear;
}
@keyframes startup {
0% {
opacity: 0;
}
10% {
opacity: 0.1;
}
15% {
opacity: 0.3;
}
20% {
opacity: 0;
}
30% {
opacity: 0.5;
}
40% {
opacity: 0.1;
}
50% {
opacity: 0.7;
}
60% {
opacity: 0.2;
}
70% {
opacity: 1;
}
80% {
opacity: 0.4;
}
100% {
opacity: 1;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment