- * { box-sizing: border-box; margin: 0; padding: 0; }
- :root {
- --bg: #06050c;
- --purple: #a55cff;
- --purple-soft: #b56cff;
- --cyan: #24f6d2;
- --yellow: #ffd719;
- --green: #22c55e;
- --red: #ff4d6a;
- --text: #ffffff;
- --muted: rgba(255, 255, 255, 0.64);
- }
- html, body { width: 100%; min-height: 100%; overflow-x: hidden; }
- body {
- min-width: 320px;
- color: var(--text);
- background-color: var(--bg);
- background-position: center;
- background-size: cover;
- background-attachment: fixed;
- font-family: "Segoe UI", system-ui, -apple-system, Arial, sans-serif;
- }
- button, a { font: inherit; -webkit-tap-highlight-color: transparent; }
- button { cursor: pointer; }
- /* ===== Página / shell ===== */
- .ttt-page {
- width: min(1400px, 94vw);
- margin: 0 auto;
- padding-bottom: 26px;
- }
- .game-toolbar {
- display: flex;
- align-items: center;
- justify-content: space-between;
- min-height: 56px;
- padding: 0 4px;
- }
- .toolbar-link {
- color: var(--purple);
- text-decoration: none;
- font-size: 13px;
- font-weight: 850;
- letter-spacing: 0.06em;
- background: none;
- border: 0;
- }
- .toolbar-link:hover { color: #d3a7ff; }
- .arcade-shell {
- display: grid;
- grid-template-columns: minmax(0, 1.55fr) minmax(330px, 0.95fr);
- min-height: calc(100svh - 160px);
- overflow: hidden;
- border: 1px solid rgba(181, 108, 255, 0.48);
- border-radius: 28px;
- background: linear-gradient(135deg, rgba(11, 8, 25, 0.94), rgba(5, 4, 14, 0.92));
- box-shadow: 0 35px 100px rgba(0, 0, 0, 0.62);
- backdrop-filter: blur(9px);
- }
- .board-column {
- display: flex;
- min-width: 0;
- flex-direction: column;
- align-items: center;
- padding: 18px 26px 24px;
- border-right: 1px solid rgba(255, 255, 255, 0.08);
- }
- .ttt-logo {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 12px;
- min-height: 66px;
- margin: 0 auto 6px;
- color: var(--purple-soft);
- font-size: clamp(28px, 3.4vw, 46px);
- font-weight: 1000;
- letter-spacing: 0.08em;
- text-transform: uppercase;
- text-shadow: 0 0 18px rgba(165, 92, 255, 0.5);
- }
- .ttt-logo .lg-dot { color: var(--cyan); }
- .ttt-turn {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 10px;
- min-height: 30px;
- margin-bottom: 16px;
- font-size: 13px;
- font-weight: 800;
- letter-spacing: 0.08em;
- text-transform: uppercase;
- color: var(--muted);
- }
- .ttt-turn b { color: var(--cyan); font-size: 18px; }
- .ttt-turn.o-turn b { color: var(--purple-soft); }
- /* ===== Tablero ===== */
- .ttt-wrap {
- position: relative;
- display: grid;
- place-items: center;
- flex: 1;
- width: 100%;
- }
- .ttt-board {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- grid-template-rows: repeat(3, 1fr);
- gap: 12px;
- width: min(440px, 78vw);
- aspect-ratio: 1 / 1;
- padding: 14px;
- border: 2px solid rgba(181, 108, 255, 0.5);
- border-radius: 20px;
- background:
- radial-gradient(120% 120% at 50% 0%, rgba(123, 92, 255, 0.12), transparent 60%),
- #03060c;
- box-shadow: 0 0 30px rgba(123, 92, 255, 0.18), inset 0 0 40px rgba(0, 0, 0, 0.7);
- }
- .cell {
- position: relative;
- display: grid;
- place-items: center;
- border: 1px solid rgba(255, 255, 255, 0.1);
- border-radius: 14px;
- background: rgba(255, 255, 255, 0.03);
- transition: background 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
- }
- .cell:not(.filled):hover {
- background: rgba(123, 92, 255, 0.12);
- border-color: rgba(181, 108, 255, 0.6);
- box-shadow: inset 0 0 20px rgba(123, 92, 255, 0.15);
- }
- .cell.disabled { pointer-events: none; }
- .cell svg { width: 62%; height: 62%; overflow: visible; }
- .mark-line {
- fill: none;
- stroke-width: 9;
- stroke-linecap: round;
- stroke-dasharray: 100;
- stroke-dashoffset: 100;
- animation: draw 0.28s ease forwards;
- }
- .mark-line.d2 { animation-delay: 0.18s; }
- @keyframes draw { to { stroke-dashoffset: 0; } }
- .cell.x .mark-line { stroke: var(--cyan); filter: drop-shadow(0 0 8px rgba(36, 246, 210, 0.6)); }
- .cell.o .mark-line { stroke: var(--purple-soft); filter: drop-shadow(0 0 8px rgba(181, 108, 255, 0.6)); }
- .cell.win {
- border-color: var(--green);
- box-shadow: 0 0 0 2px var(--green), 0 0 30px rgba(34, 197, 94, 0.45);
- animation: winpulse 0.9s ease infinite alternate;
- }
- @keyframes winpulse { to { box-shadow: 0 0 0 2px var(--green), 0 0 45px rgba(34, 197, 94, 0.7); } }
- /* Overlay resultado */
- .ttt-overlay {
- position: absolute;
- inset: 0;
- z-index: 5;
- display: none;
- place-items: center;
- border-radius: 20px;
- background: rgba(3, 6, 12, 0.72);
- backdrop-filter: blur(3px);
- text-align: center;
- }
- .ttt-overlay.show { display: grid; }
- .ov-title {
- font-size: clamp(30px, 5vw, 46px);
- font-weight: 1000;
- letter-spacing: 0.03em;
- }
- .ov-title.x { color: var(--cyan); }
- .ov-title.o { color: var(--purple-soft); }
- .ov-title.draw { color: var(--muted); }
- .ov-sub { margin-top: 8px; color: rgba(255, 255, 255, 0.85); font-size: 15px; }
- .ov-btn {
- margin-top: 16px;
- padding: 11px 22px;
- border: 2px solid var(--purple-soft);
- border-radius: 12px;
- color: var(--purple-soft);
- background: rgba(24, 14, 46, 0.9);
- font-weight: 900;
- letter-spacing: 0.05em;
- text-transform: uppercase;
- }
- .ov-btn:hover { color: #fff; box-shadow: 0 0 22px rgba(165, 92, 255, 0.4); }
- /* ===== Columna control ===== */
- .control-column {
- display: flex;
- min-width: 0;
- flex-direction: column;
- padding: 24px 28px 22px;
- }
- .mode-switch {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 8px;
- padding: 6px;
- margin-bottom: 20px;
- border: 1px solid rgba(255, 255, 255, 0.12);
- border-radius: 14px;
- background: rgba(255, 255, 255, 0.03);
- }
- .mode-btn {
- min-height: 42px;
- border: 0;
- border-radius: 10px;
- color: var(--muted);
- background: transparent;
- font-size: 12px;
- font-weight: 800;
- letter-spacing: 0.05em;
- text-transform: uppercase;
- transition: 0.15s ease;
- }
- .mode-btn.active {
- color: #fff;
- background: rgba(123, 92, 255, 0.25);
- box-shadow: 0 0 16px rgba(165, 92, 255, 0.3);
- }
- .desktop-stats {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 12px;
- }
- .stat-card {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 4px;
- padding: 14px 8px;
- border: 1px solid rgba(255, 255, 255, 0.14);
- border-radius: 16px;
- background: rgba(255, 255, 255, 0.035);
- font-size: 10px;
- font-weight: 800;
- letter-spacing: 0.06em;
- text-transform: uppercase;
- color: var(--muted);
- }
- .stat-card b { font-size: 24px; line-height: 1; color: var(--yellow); }
- .stat-card.x b { color: var(--cyan); }
- .stat-card.o b { color: var(--purple-soft); }
- .rules-block { margin: 22px 0; }
- .rules-block h2 {
- margin-bottom: 16px;
- color: var(--purple);
- font-size: 18px;
- font-weight: 900;
- letter-spacing: 0.045em;
- }
- .rules-block p { margin: 12px 0; font-size: 15px; line-height: 1.6; color: rgba(255, 255, 255, 0.82); }
- .rules-block strong { color: var(--cyan); }
- .action-row {
- display: grid;
- grid-template-columns: 1fr;
- gap: 12px;
- margin-top: auto;
- }
- .arcade-action {
- min-height: 46px;
- border: 1px solid rgba(181, 108, 255, 0.45);
- border-radius: 13px;
- color: var(--purple);
- background: rgba(123, 92, 255, 0.08);
- font-size: 12px;
- font-weight: 900;
- letter-spacing: 0.04em;
- }
- .arcade-action:hover { color: #fff; background: rgba(123, 92, 255, 0.19); }
- .btn-start-ttt {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 12px;
- width: 100%;
- min-height: 58px;
- border: 2px solid var(--purple-soft);
- border-radius: 12px;
- color: var(--purple-soft);
- background: rgba(24, 14, 46, 0.9);
- font-size: 18px;
- font-weight: 900;
- letter-spacing: 0.06em;
- text-transform: uppercase;
- box-shadow: 0 0 18px rgba(165, 92, 255, 0.25);
- }
- .btn-start-ttt:hover { color: #fff; box-shadow: 0 0 28px rgba(165, 92, 255, 0.45); }
- /* ===== Responsive ===== */
- @media (max-width: 1050px) {
- .arcade-shell { grid-template-columns: minmax(0, 1.4fr) minmax(300px, 0.85fr); }
- }
- @media (max-width: 820px) {
- .ttt-page { width: calc(100% - 24px); }
- .arcade-shell { display: block; min-height: 0; border-radius: 22px; }
- .board-column { padding: 18px 16px 18px; border-right: 0; }
- .control-column { padding: 4px 16px 20px; border-top: 1px solid rgba(255, 255, 255, 0.08); }
- .action-row { margin-top: 18px; }
- }
- @media (max-width: 480px) {
- .ttt-page { width: calc(100% - 16px); }
- .desktop-stats { gap: 8px; }
- .stat-card b { font-size: 20px; }
- }