UNPKG

@reis/seki

Version:

Seki – A modern javascript based Go board renderer and player, that is simple to use, extensible, compact and intuitive.

324 lines (315 loc) 6.66 kB
@import url('https://fonts.googleapis.com/css2?family=Lexend:wght@300&display=swap'); /* Variables */ :root { --seki-background-url: url('/images/wood-1.jpg'); --seki-background-size: 25% 25%; --seki-background-color: #d6ae60; --seki-color-element: #f3cf89; --seki-color-link: #704600; --seki-color-text: #222; --seki-color-muted: #ad9057; --seki-color-highlight: #fff1d5; --seki-color-black-player: #222; --seki-color-white-player: #fff; --seki-color-kanji: #ad90571a; --seki-font-family: 'Lexend', sans-serif; --seki-font-size: .9rem; --seki-font-size-large: 1rem; --seki-font-size-small: .8125rem; --seki-box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.25); --seki-padding: 8px; } /* Board */ .seki-board-container { outline: none; } .seki-board-wrapper { display: flex; width: auto; max-height: 100%; } .seki-board { position: relative; visibility: hidden; left: 0; top: 0; min-width: 50px; min-height: 50px; box-sizing: content-box; touch-action: manipulation; -webkit-tap-highlight-color: transparent; box-shadow: var(--seki-box-shadow); } .seki-board-canvas-container { position: relative; width: 100%; height: 100%; } .seki-board-canvas-container canvas { position: absolute; max-width: 100%; max-height: 100%; cursor: pointer; touch-action: manipulation; -webkit-tap-highlight-color: transparent; } .seki-board-static canvas { cursor: default; } /* Full player */ .seki-player-container { container-name: seki-player-container; container-type: size; min-width: 300px; } .seki-player-wrapper * { box-sizing: border-box; padding: 0; margin: 0; } .seki-player-wrapper { display: flex; flex-direction: column-reverse; background: var(--seki-background-color); background-image: var(--seki-background-url); background-size: var(--seki-background-size); box-shadow: var(--seki-box-shadow); font-family: var(--seki-font-family); font-size: var(--seki-font-size); color: var(--seki-color-text); } .seki-player-wrapper .seki-board { box-shadow: none; } .seki-player-board-and-controls { display: flex; flex-direction: column; } .seki-player-board { aspect-ratio: 1; } /* Controls */ .seki-controls { display: flex; justify-content: center; width: 100%; height: 52px; padding: var(--seki-padding); gap: var(--seki-padding); } .seki-button { position: relative; display: inline-flex; align-items: center; justify-content: center; height: 2.25rem; margin: 0; border: 0; border-radius: 4px; background: var(--seki-color-element); outline: none; transition: all .2s ease; cursor: pointer; flex: 1; } .seki-button img { width: 20px; height: 20px; } .seki-button:hover { transform: scale(1.05); } .seki-button:hover { background: var(--seki-color-highlight); } /* Info */ .seki-info-container { padding: var(--seki-padding); width: 100%; display: flex; } .seki-info-players { max-width: 100%; flex: 1; display: flex; justify-content: space-between; } .seki-info-game-details, .seki-info-comments { display: none; } .seki-info-comments { flex: 1; } .seki-info-comments .seki-info-block { height: 100%; } .seki-comments { background: none; border: none; height: 100%; outline: none; resize: none; font-family: var(--seki-font-family); font-size: var(--seki-font-size); color: var(--seki-color-text); } .seki-info-block { position: relative; display: flex; flex-direction: column; justify-content: space-between; flex: 0 0 calc(50% - var(--seki-padding) / 2); max-width: calc(50% - var(--seki-padding) / 2); padding: var(--seki-padding); background: var(--seki-color-element); border-radius: 8px; } .seki-info-block:after { position: absolute; left: calc(50% - 24px); top: -12px; display: block; font-size: 4rem; font-family: Arial, sans-serif; color: var(--seki-color-kanji); } .seki-info-block-black:after { content: '黒'; } .seki-info-block-white:after { content: '白'; } .seki-info-group { margin-bottom: 12px; } .seki-info-group:last-child { margin-bottom: 0; } .seki-identity-and-time { display: flex; align-items: flex-start; } .seki-time { font-size: var(--seki-font-size-small); color: var(--seki-color-muted); } .seki-identity { flex: 1; display: flex; align-items: center; margin-top: -4px; margin-bottom: 4px; } .seki-color { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; min-width: 24px; min-height: 24px; border-radius: 50%; margin-right: 8px; box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2); } .seki-color-black { background: var(--seki-color-black-player); } .seki-color-white { background: var(--seki-color-white-player); } .seki-name-and-rank { flex: 1; display: flex; flex-direction: column; justify-content: center; height: 37px; width: 0; min-width: calc(100% - 24px - 2 * var(--seki-padding)); } .seki-name { height: 20px; max-width: min(150px, 100%); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--seki-font-size-large); } .seki-rank { font-size: var(--seki-font-size-small); color: var(--seki-color-muted); margin-top: 2px; } .seki-score { flex: 0 0 50%; display: flex; align-items: center; justify-content: space-between; padding-top: 8px; padding-left: 4px; padding-right: 4px; } /* Horizontal player */ @container seki-player-container (aspect-ratio > 0.8) { .seki-player-wrapper { flex-direction: row; height: 100%; aspect-ratio: 1.4; } .seki-player-board-and-controls { height: 100%; } .seki-player-board { height: calc(100% - 52px); } .seki-controls { padding-right: 0; } .seki-info-container { flex-direction: column; } .seki-info-players { flex: 0; flex-direction: column; } .seki-info-game-details, .seki-info-comments { display: block; } .seki-info-block { flex: 1; max-width: 100%; margin-bottom: var(--seki-padding); } } /* Very small screens */ @container seki-player-container (width < 400px) { .seki-time { display: none; } } /* Common */ .seki-hidden { display: none; } .seki-label { display: block; margin-bottom: 4px; font-size: var(--seki-font-size-small); color: var(--seki-color-muted); } .seki-link { cursor: pointer; color: var(--seki-color-link); text-decoration: none; } .seki-notice { padding-top: 4px; font-family: var(--seki-font-family); font-size: .75rem; color: var(--seki-color-text); opacity: 0.2; } .seki-notice a { color: var(--seki-color-text); text-decoration: underline; }