@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;500;700&display=swap');
@import "tailwindcss";
@font-face {
font-family: "Hiragino Mincho ProN";
src: url("/hiragino-mincho-pron-w3.otf") format("opentype");
font-weight: 300;
font-display: swap;
}
@theme {
--color-bg-primary: #02040a;
--color-bg-panel: rgba(9, 13, 20, 0.92);
--color-bg-masthead: #08162e;
--color-bg-nav: #0c1729;
--color-bg-input: #0f1c2f;
--color-bg-button: #0d1b2d;
--color-bg-terminal: #0f3c78;
--color-blue-primary: #0f3c78;
--color-blue-accent: #3f6fb3;
--color-blue-glow: #75aafc;
--color-text-primary: #dbe7ff;
--color-text-secondary: #9bc3ff;
--color-text-muted: #e4edff;
--color-border-primary: #2f476d;
--color-border-accent: #3f6fb3;
--font-body: "Yu Mincho", "Hiragino Mincho ProN", "HiraMinProN-W3", "MS PMincho", "MS Mincho", "Noto Serif JP", serif;
--font-mono: "Courier New", "Osaka-mono", Consolas, monospace;
--font-logo: "Hiragino Mincho ProN", "HiraMinProN-W3", "Yu Mincho", "Noto Serif JP", serif;
}
html {
background-color: var(--color-bg-primary);
}
body {
margin: 0;
padding: 0;
color: var(--color-text-primary);
min-height: 100vh;
background-color: var(--color-bg-primary);
background-image: linear-gradient(
rgba(8, 22, 46, 0.65),
rgba(8, 22, 46, 0.65)
),
url("/02cdkj.jpeg");
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-attachment: fixed;
font-family: var(--font-body);
line-height: 1.7;
letter-spacing: 0.03em;
text-rendering: optimizeLegibility;
position: relative;
overflow-x: hidden;
}
::selection {
background: rgba(117, 170, 252, 0.35);
}
/* Grid overlay */
.grid-overlay {
position: fixed;
inset: 0;
pointer-events: none;
z-index: 1;
}
.grid-overlay::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(
90deg,
rgba(117, 170, 252, 0.22) 1px,
rgba(255, 255, 255, 0.08) 1px
),
linear-gradient(
0deg,
rgba(117, 170, 252, 0.22) 1px,
rgba(255, 255, 255, 0.08) 1px
);
background-size: 28px 28px;
mix-blend-mode: screen;
opacity: 0.8;
}
.grid-overlay::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(
180deg,
rgba(3, 17, 40, 0.8) 0%,
rgba(7, 15, 29, 0.5) 45%,
rgba(3, 17, 40, 0.8) 100%
);
}
/* Logo animations */
@keyframes sweep-out {
0% {
opacity: 0.45;
transform: scale(0.55);
}
40% {
opacity: 0.7;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(1.35);
}
}
@keyframes ring-scan {
0% {
stroke: #0f3c78;
opacity: 0.9;
stroke-dasharray: 400 0;
stroke-linecap: butt;
}
25% {
stroke: #6fa0ff;
opacity: 1;
stroke-dasharray: 18 14;
stroke-linecap: round;
}
55% {
stroke: #1e4c94;
opacity: 0.88;
stroke-dasharray: 10 18;
}
70% {
stroke: #0f3c78;
opacity: 0.9;
stroke-dasharray: 6 22;
}
90% {
stroke: #aac6ff;
opacity: 0.82;
stroke-dasharray: 4 26;
}
100% {
stroke: #0f3c78;
opacity: 0.9;
stroke-dasharray: 400 0;
stroke-linecap: butt;
}
}
@keyframes idle-rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes glow-pulse {
0% {
opacity: 0.16;
transform: scale(1.02);
}
50% {
opacity: 0.28;
transform: scale(1.12);
}
100% {
opacity: 0.16;
transform: scale(1.02);
}
}
@keyframes pulse {
0% {
transform: scale(1);
opacity: 0.6;
}
50% {
transform: scale(1.1);
opacity: 1;
}
100% {
transform: scale(1);
opacity: 0.6;
}
}
@keyframes ticker {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-50%);
}
}
/* Logo shell */
.logo-shell {
border-radius: 50%;
border: 1px solid rgba(63, 111, 179, 0.6);
background: #070f1d;
display: grid;
place-items: center;
position: relative;
overflow: hidden;
}
.logo-shell::before {
content: "";
position: absolute;
inset: 10px;
border-radius: 50%;
border: 1px solid rgba(15, 60, 120, 0.35);
box-shadow: 0 0 0 rgba(15, 60, 120, 0.1);
opacity: 0;
transform: scale(0.9);
transition: opacity 0.45s ease, transform 0.6s ease;
}
.logo-shell::after {
content: "";
position: absolute;
inset: -1px;
background: repeating-conic-gradient(
from 0deg,
rgba(15, 60, 120, 0.08) 0deg 6deg,
rgba(117, 170, 252, 0.1) 6deg 12deg
);
mask-image: radial-gradient(circle, rgba(0, 0, 0, 0.25) 40%, transparent 80%);
opacity: 0.7;
}
.logo-shell.listening .ring-outer,
.logo-shell:not(.no-hover-animation):hover .ring-outer {
animation: ring-scan 2.4s cubic-bezier(0.45, 0.05, 0.25, 1) infinite;
animation-delay: 0.7s;
}
.logo-shell.listening .ring-middle,
.logo-shell:not(.no-hover-animation):hover .ring-middle {
animation: ring-scan 2.4s cubic-bezier(0.45, 0.05, 0.25, 1) infinite;
animation-delay: 0.35s;
}
.logo-shell.listening .ring-inner,
.logo-shell:not(.no-hover-animation):hover .ring-inner {
animation: ring-scan 2.4s cubic-bezier(0.45, 0.05, 0.25, 1) infinite;
animation-delay: 0s;
}
.logo-shell.listening::before,
.logo-shell:not(.no-hover-animation):hover::before {
opacity: 1;
transform: scale(1.08);
animation: glow-pulse 1.6s ease-in-out infinite;
}
.logo-shell.listening .scan-sweep,
.logo-shell:not(.no-hover-animation):hover .scan-sweep {
opacity: 0.7;
animation: sweep-out 2.4s ease-out infinite;
}
.logo-shell.listening .logo-svg,
.logo-shell:not(.no-hover-animation):hover .logo-svg {
filter: drop-shadow(0 0 10px rgba(15, 60, 120, 0.35));
}
.scan-sweep {
position: absolute;
inset: 10%;
border-radius: 50%;
background: radial-gradient(
circle,
rgba(117, 170, 252, 0.25) 0%,
rgba(117, 170, 252, 0.12) 38%,
rgba(15, 60, 120, 0.06) 64%,
transparent 85%
);
opacity: 0;
mix-blend-mode: screen;
filter: blur(0.8px);
z-index: 1;
transform: scale(0.65);
}
.scan-sweep.sweep-2 {
animation-delay: 1.2s;
}
.logo-svg {
z-index: 2;
transition: filter 0.4s ease;
}
.logo-svg .ring {
fill: none;
stroke: #0f3c78;
stroke-dasharray: 400 0;
stroke-linecap: butt;
transition: stroke 0.35s ease, opacity 0.35s ease;
}
.logo-svg .core {
fill: #0f3c78;
}
.halo {
position: absolute;
border-radius: 50%;
border: 1px dashed rgba(15, 60, 120, 0.5);
animation: idle-rotate 28s linear infinite;
}
.logo-shell.listening + .halo,
.logo-shell:not(.no-hover-animation):hover + .halo {
animation: pulse 1.5s ease-in-out infinite;
}
/* Ticker */
.ticker-content {
display: inline-block;
padding-left: 2px;
animation: ticker 22s linear infinite;
white-space: nowrap;
}
/* Rewrite link scramble effect */
.rewrite-link {
position: relative;
display: inline-block;
padding: 4px 8px;
border: 1px dashed rgba(117, 170, 252, 0.5);
background: #0f1c2f;
text-decoration: none;
color: #eef5ff;
font-family: var(--font-mono);
overflow: hidden;
transition: border-color 0.2s;
}
.rewrite-link:hover {
border-color: rgba(117, 170, 252, 0.8);
}
.rewrite-link[aria-disabled="true"] {
color: #9aa9c6;
border-color: rgba(117, 170, 252, 0.25);
cursor: not-allowed;
pointer-events: none;
background: #0b1423;
}
/* Panel styles */
.panel {
background: var(--color-bg-panel);
border: 1px solid var(--color-border-primary);
position: relative;
}
.panel::after {
content: "";
position: absolute;
inset: 0;
border: 1px dashed rgba(89, 122, 170, 0.25);
pointer-events: none;
}
/* Double border top decoration */
.border-top-double {
border-top: 4px double #050d1f;
}
/* Stripe decoration for frame top */
.stripe-top::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 6px;
background: repeating-linear-gradient(
90deg,
#0f3c78 0px,
#0f3c78 40px,
#3f6fb3 40px,
#3f6fb3 44px
);
opacity: 0.7;
}