:root{--app-content:1200px;--app-reading:720px;--app-sidebar:360px;--app-card-min:210px;--app-hero:420px;--app-line:1px;--app-focus:3px;--app-letter:.12em;--app-display:clamp(2.4rem,5vw,4.5rem);--app-title:clamp(1.8rem,3vw,3rem);--app-cup-width:44%;--app-cup-height:42%;--app-mobile:768px}
*{box-sizing:border-box}body{margin:0;background:var(--ula-bg);color:var(--ula-text);font:var(--ula-type-base-size)/var(--ula-type-base-line) var(--ula-font-sans)}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font:inherit;color:inherit}button,a,input,select,textarea{touch-action:manipulation}button,.button{cursor:pointer}button:disabled{cursor:not-allowed;background:var(--ula-disabled-bg);color:var(--ula-disabled-text)}:focus-visible{outline:var(--app-focus) solid var(--ula-focus);outline-offset:var(--ula-space-4)}header{max-width:var(--app-content);margin:auto;padding:var(--ula-space-24);display:flex;align-items:center;justify-content:space-between;gap:var(--ula-space-24)}.brand{font-size:var(--ula-type-title-size);font-weight:650;letter-spacing:-.06em;line-height:1}.brand span{display:block;font-size:var(--ula-type-xs-size);letter-spacing:var(--app-letter);font-weight:500;margin-top:var(--ula-space-8)}nav,.row,.actions,.filters,.chips{display:flex;flex-wrap:wrap;align-items:center;gap:var(--ula-space-12)}nav{gap:var(--ula-space-24);font-size:var(--ula-type-sm-size)}.button,button{display:inline-flex;justify-content:center;align-items:center;gap:var(--ula-space-8);padding:var(--ula-space-12) var(--ula-space-20);border:var(--app-line) solid var(--ula-accent);border-radius:var(--ula-radius-pill);background:var(--ula-accent);color:var(--ula-on-accent);text-decoration:none}.button:hover,button:hover{background:var(--ula-accent-hover);text-decoration:none}.secondary{background:transparent;color:var(--ula-text);border-color:var(--ula-border-input)}.secondary:hover{background:var(--ula-surface-raised)}.small{padding:var(--ula-space-8) var(--ula-space-16);font-size:var(--ula-type-sm-size)}.skip{position:absolute;top:-100%;background:var(--ula-surface);padding:var(--ula-space-16);z-index:var(--ula-z-modal)}.skip:focus{top:0}main{max-width:var(--app-content);margin:auto;padding:var(--ula-space-24);min-height:60vh}.eyebrow{text-transform:uppercase;letter-spacing:var(--app-letter);font-size:var(--ula-type-xs-size);font-weight:600;color:var(--ula-text-muted)}h1{font-size:var(--app-title);line-height:1.15;letter-spacing:-.04em;margin:var(--ula-space-16) 0 var(--ula-space-24)}h2{font-size:var(--ula-type-xl-size);line-height:var(--ula-type-xl-line);letter-spacing:-.03em}h3{font-size:var(--ula-type-lg-size);margin:var(--ula-space-12) 0}p{margin:0 0 var(--ula-space-20)}.muted,small{color:var(--ula-text-muted)}.hero{display:grid;grid-template-columns:1.15fr 1fr;gap:var(--ula-space-48);align-items:center;padding:var(--ula-space-48) 0 var(--ula-space-64)}.hero h1{font-size:var(--app-display)}.hero p{max-width:var(--app-reading);color:var(--ula-text-muted)}.art{position:relative;min-height:var(--app-hero);border-radius:var(--ula-radius-xl);background:var(--ula-surface-raised);overflow:hidden;display:grid;place-items:center}.art:before{content:'ula';display:grid;place-items:center;width:var(--app-cup-width);height:var(--app-cup-height);background:var(--ula-accent);color:var(--ula-on-accent);border-radius:var(--ula-radius-sm) var(--ula-radius-sm) var(--ula-radius-xl) var(--ula-radius-xl);font-size:var(--ula-type-display-size);transform:rotate(-8deg);box-shadow:var(--ula-shadow-pop)}.art:after{content:'CÀ PHÊ · KẾT NỐI · CỘNG ĐỒNG';position:absolute;bottom:var(--ula-space-32);font-size:var(--ula-type-xs-size);letter-spacing:var(--app-letter);color:var(--ula-text-muted)}section{margin:var(--ula-space-48) 0}.section-head{display:flex;justify-content:space-between;gap:var(--ula-space-16);align-items:center;margin-bottom:var(--ula-space-24)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--app-card-min)),1fr));gap:var(--ula-space-20)}.panel,.card,.empty{background:var(--ula-surface);border:var(--app-line) solid var(--ula-border);border-radius:var(--ula-radius-lg);padding:var(--ula-space-24)}.card{display:flex;flex-direction:column;gap:var(--ula-space-8);min-width:0}.card p{font-size:var(--ula-type-sm-size)}.card .actions{margin-top:auto}.notice{padding:var(--ula-space-16) var(--ula-space-20);border-radius:var(--ula-radius-md);background:var(--ula-warning-bg);color:var(--ula-warning);font-size:var(--ula-type-sm-size);margin:var(--ula-space-24) 0}.empty{text-align:center;padding:var(--ula-space-48) var(--ula-space-24)}.empty p{max-width:var(--app-reading);margin:0 auto var(--ula-space-24)}.tag{display:inline-flex;align-self:flex-start;border:var(--app-line) solid var(--ula-border-input);border-radius:var(--ula-radius-pill);padding:var(--ula-space-4) var(--ula-space-12);font-size:var(--ula-type-xs-size);line-height:var(--ula-type-xs-line)}.code{font-family:var(--ula-font-mono);color:var(--ula-accent);font-size:var(--ula-type-sm-size)}input,select,textarea{width:100%;background:var(--ula-surface);border:var(--app-line) solid var(--ula-border-input);border-radius:var(--ula-radius-md);padding:var(--ula-space-12)}label{display:block;font-size:var(--ula-type-sm-size)}.filters{align-items:end}.filters label{flex:1;min-width:var(--app-card-min)}.filters label:first-child{flex:2}.filters input,.filters select{margin-top:var(--ula-space-8)}.layout{display:grid;grid-template-columns:minmax(0,1fr) var(--app-sidebar);gap:var(--ula-space-24);align-items:start}.sidebar{position:sticky;top:var(--ula-space-24)}.deck-line{display:flex;gap:var(--ula-space-8);align-items:center;border-bottom:var(--app-line) solid var(--ula-border);padding:var(--ula-space-12) 0}.deck-line .name{flex:1;min-width:0;overflow-wrap:anywhere}.deck-line button{padding:var(--ula-space-4) var(--ula-space-12)}.deck-line .name button{display:block;text-align:left;border:0;border-radius:0;background:transparent;color:var(--ula-text);padding:0}.effect{white-space:pre-line;overflow-wrap:anywhere}.pagination{display:flex;justify-content:center;align-items:center;gap:var(--ula-space-16);margin:var(--ula-space-32) 0}.tcg-hero{padding:var(--ula-space-48);background:var(--ula-surface);border-radius:var(--ula-radius-xl)}.tcg-hero h1{max-width:var(--app-reading)}#subnav{background:var(--ula-surface);border-top:var(--app-line) solid var(--ula-border);border-bottom:var(--app-line) solid var(--ula-border)}#subnav nav{max-width:var(--app-content);margin:auto;padding:var(--ula-space-16) var(--ula-space-24);gap:var(--ula-space-24)}[aria-current=page]{color:var(--ula-accent);font-weight:650;text-decoration:underline;text-underline-offset:var(--ula-space-8)}footer{max-width:var(--app-content);margin:var(--ula-space-64) auto 0;padding:var(--ula-space-40) var(--ula-space-24);border-top:var(--app-line) solid var(--ula-border);display:flex;justify-content:space-between;gap:var(--ula-space-32);font-size:var(--ula-type-sm-size)}footer div a{display:inline-block;margin:0 var(--ula-space-16) var(--ula-space-16) 0}footer p{color:var(--ula-text-muted)}dialog{background:var(--ula-surface);color:var(--ula-text);border:var(--app-line) solid var(--ula-border);border-radius:var(--ula-radius-lg);max-width:var(--app-reading);width:90%;max-height:90vh;padding:var(--ula-space-32)}dialog::backdrop{background:var(--ula-backdrop)}.close{float:right;padding:var(--ula-space-4) var(--ula-space-12)}#status:not(:empty){position:fixed;bottom:var(--ula-space-24);left:50%;transform:translateX(-50%);padding:var(--ula-space-16) var(--ula-space-24);background:var(--ula-accent);color:var(--ula-on-accent);border-radius:var(--ula-radius-md);z-index:var(--ula-z-toast);max-width:90%}.reading{max-width:var(--app-reading)}.error{color:var(--ula-danger)}.loading{padding:var(--ula-space-48);background:var(--ula-surface-raised);border-radius:var(--ula-radius-lg)}.stats{display:flex;flex-wrap:wrap;gap:var(--ula-space-32);margin:var(--ula-space-32) 0}.stats strong{font-size:var(--ula-type-xl-size);display:block}.btn-link{border:0;padding:0;background:transparent;color:var(--ula-accent);text-align:left;border-radius:0}.btn-link:hover{background:transparent;text-decoration:underline}.danger{background:var(--ula-danger-bg);color:var(--ula-danger);border-color:var(--ula-danger)}.steps{counter-reset:steps;display:grid;gap:var(--ula-space-20)}.steps article{counter-increment:steps}.steps article:before{content:'0' counter(steps);color:var(--ula-accent);font-family:var(--ula-font-mono)}
@media(max-width:768px){header{align-items:flex-start;flex-direction:column;gap:var(--ula-space-20)}nav{gap:var(--ula-space-16)}.hero{grid-template-columns:1fr;padding:var(--ula-space-24) 0;gap:var(--ula-space-24)}.art{min-height:var(--app-sidebar)}.layout{grid-template-columns:1fr}.sidebar{position:static;grid-row:1}.tcg-hero{padding:var(--ula-space-24)}footer{flex-direction:column}h1{overflow-wrap:anywhere}.section-head{align-items:flex-start;flex-direction:column}.filters label{min-width:100%}}

/* User-supplied logo and Vietnamese card images. */
:root{--app-logo-height:340px;--app-detail-image:420px;--app-card-ratio:63/88}
.hero-logo{min-height:var(--app-hero);border-radius:var(--ula-radius-xl);background:var(--ula-surface-raised);padding:var(--ula-space-24);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--ula-space-16)}
.hero-logo img{display:block;width:100%;height:var(--app-logo-height);object-fit:contain}
.hero-logo p{font-size:var(--ula-type-xs-size);letter-spacing:var(--app-letter);margin:0;text-align:center}
.card-image-link{display:block;width:100%;border-radius:var(--ula-radius-sm);overflow:hidden}
.card-image{display:block;width:100%;height:auto;aspect-ratio:var(--app-card-ratio);object-fit:contain;background:var(--ula-surface-raised)}
.detail-image-link{display:block;max-width:var(--app-detail-image);margin:var(--ula-space-24) auto var(--ula-space-16)}
.detail-card-image{display:block;width:100%;height:auto;border-radius:var(--ula-radius-sm)}

.menu-figure{margin:var(--ula-space-24) 0}.menu-image{display:block;width:100%;height:auto;border-radius:var(--ula-radius-md)}

:root{--app-menu-page-height:70svh}
.menu-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ula-space-24);margin-top:var(--ula-space-24)}
.menu-grid .menu-figure{margin:0;min-width:0}
.menu-grid figcaption h2{font-size:var(--ula-type-lg-size);line-height:var(--ula-type-lg-line);min-height:var(--ula-space-64);margin:0 0 var(--ula-space-12)}
.menu-grid .menu-image{height:var(--app-menu-page-height);object-fit:contain}
.panel a[href^="mailto:"]{overflow-wrap:anywhere}
@media(max-width:768px){.menu-grid{grid-template-columns:minmax(0,1fr)}.menu-grid figcaption h2{min-height:0}}

:root{--app-cms-thumb:180px;--app-gallery-height:420px}
.cms-form{margin:var(--ula-space-32) 0}.cms-form label{margin:var(--ula-space-16) 0}.cms-form .actions{margin-top:var(--ula-space-24)}
.cms-row{padding:var(--ula-space-20);border:var(--app-line) solid var(--ula-border);border-radius:var(--ula-radius-md);margin:var(--ula-space-24) 0}
.cms-thumb{display:block;max-width:100%;height:var(--app-cms-thumb);object-fit:contain}.gallery-image{display:block;width:100%;max-height:var(--app-gallery-height);object-fit:contain}

.check-line{display:flex;align-items:center;gap:var(--ula-space-12);margin:var(--ula-space-12) 0}.check-line input{width:auto;flex:none}.game-form{margin:var(--ula-space-24) 0}.game-form label{margin:var(--ula-space-12) 0}.game-form button{margin-top:var(--ula-space-16)}.match-board{display:grid;gap:var(--ula-space-24);margin:var(--ula-space-24) 0}.match-board details{margin:var(--ula-space-16) 0}.grid figure{margin:0}

.ula-profile-avatar{margin:1rem 0}.ula-profile-avatar img,.ula-avatar-placeholder{width:112px;height:112px;border-radius:50%;object-fit:cover}.ula-avatar-placeholder{display:grid;place-items:center;background:var(--ula-surface-raised);font-weight:700}
.ula-balance-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;margin:1.5rem 0}.ula-balance-grid .panel{padding:1rem}
@media(max-width:420px){.ula-balance-grid{grid-template-columns:1fr}}
/* ULA TCG board: presentation only, state and rules remain server-authoritative. */
.duel-board{--duel-bg:#131d1a;--duel-surface:#1c2a25;--duel-line:#819584;--duel-text:#f2f0e5;--duel-muted:#beccbb;--duel-accent:#dcc28a;--duel-radius:16px;--duel-space:16px;--duel-image-w:76px;--duel-image-h:106px;--duel-small:12px;color:var(--duel-text);background:radial-gradient(ellipse at center,#31483b,#17241e);border:1px solid var(--duel-line);border-radius:var(--duel-radius);overflow:hidden;margin:var(--duel-space) 0}
.duel-player{display:grid;grid-template-columns:minmax(140px,1fr) minmax(240px,2fr) minmax(150px,1fr);align-items:center;gap:var(--duel-space);padding:var(--duel-space)}
.duel-identity{display:flex;align-items:center;gap:12px}.duel-identity strong,.duel-hp{display:block}.duel-hp{font-size:24px;font-weight:700}.duel-hp small{font-size:var(--duel-small);font-weight:400;color:var(--duel-muted)}.duel-avatar{display:grid;place-items:center;width:42px;height:42px;border-radius:50%;background:#50685a;color:#fff;font-weight:700}
.duel-characters{display:flex;align-items:center;justify-content:center;gap:16px}.duel-character{text-align:center;width:90px;min-width:0}.duel-character strong,.duel-character small{display:block;overflow-wrap:anywhere}.duel-character small{color:var(--duel-muted);font-size:var(--duel-small)}.duel-character details{font-size:var(--duel-small)}.duel-character details a,.duel-character details button{color:var(--duel-text)}
.duel-card-button{display:inline-block;border:0;padding:0;background:transparent;color:inherit;min-width:44px;min-height:44px;cursor:pointer}.duel-card-button img{display:block;width:var(--duel-image-w);height:var(--duel-image-h);object-fit:cover;border:1px solid var(--duel-line);border-radius:6px;box-shadow:0 5px 12px #0006}.duel-character.is-leader .duel-card-button img{outline:2px solid var(--duel-accent);outline-offset:3px}.duel-card-button:focus-visible,.duel-hand-card:focus-visible{outline:3px solid var(--duel-accent);outline-offset:4px}
.duel-resources{display:flex;justify-content:flex-end;gap:8px}.duel-resources div{min-width:55px;text-align:center;border:1px solid var(--duel-line);border-radius:8px;padding:8px 4px;background:var(--duel-surface)}.duel-resources b,.duel-resources span{display:block}.duel-resources span{font-size:var(--duel-small);color:var(--duel-muted)}
.duel-center{display:grid;grid-template-columns:minmax(130px,1fr) minmax(100px,1fr) auto minmax(100px,1fr);align-items:center;gap:16px;padding:16px;border-block:1px solid var(--duel-line);background:#111d17}.duel-phase small,.duel-phase strong,.duel-phase span{display:block}.duel-phase small,.duel-phase span{color:var(--duel-muted)}.duel-phase strong,.duel-vs{color:var(--duel-accent);font-size:18px}.duel-action-area{text-align:center}.duel-action-area>strong{display:block;font-size:12px}.duel-action-cards{display:flex;justify-content:center;gap:8px;overflow-x:auto;padding:8px}.duel-action-card img{width:55px;height:76px}.duel-action-card small{display:block;font-size:10px;color:var(--duel-text)}.duel-card-back{display:grid;place-items:center;width:55px;height:76px;border:1px solid var(--duel-line);border-radius:6px;background:repeating-linear-gradient(135deg,#354b3c 0 5px,#23362a 5px 10px);font-size:11px;color:var(--duel-text);margin:auto}.duel-empty{color:var(--duel-muted);font-size:12px}
.duel-public-zones{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.duel-public-zones summary{cursor:pointer}.duel-hand{margin-top:16px}.duel-hand-cards{display:flex;gap:12px;overflow-x:auto;padding:12px 4px}.duel-hand-card{flex:0 0 100px;max-width:100px;padding:0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}.duel-hand-card img{width:100px;height:138px;object-fit:cover;border-radius:6px}.duel-hand-card span{display:block;font-size:12px;overflow-wrap:anywhere}.duel-hand .section-head span{font-size:12px}
@media(max-width:760px){.duel-player{grid-template-columns:minmax(0,1fr) auto;gap:12px}.duel-characters{grid-column:1/-1;grid-row:2;gap:8px}.duel-resources{grid-column:2;grid-row:1;gap:4px}.duel-resources div{min-width:44px}.duel-character{width:76px}.duel-card-button img{width:64px;height:88px}.duel-center{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto minmax(0,1fr);gap:5px}.duel-phase strong{font-size:15px}.duel-public-zones{grid-template-columns:minmax(0,1fr)}.duel-hand{min-width:0}.duel-hand-card{flex-basis:86px}.duel-hand-card img{width:86px;height:119px}}
@media(prefers-reduced-motion:reduce){.duel-board *,.duel-hand *{animation:none!important;transition:none!important}}
/* Match controls override shared flex button styling. */
.duel-hand-card{display:block;min-height:0;line-height:1.3}.duel-hand-card span{white-space:nowrap;overflow-wrap:normal}.duel-character{width:104px}.duel-character small{white-space:normal;line-height:1.25}.duel-character details{line-height:1.25}
.duel-motion-setting{display:flex;align-items:center;gap:10px;max-width:300px;margin:12px 0}.duel-motion-setting select{width:auto}.duel-board[data-motion="full"] .duel-action-card{animation:duel-appear 280ms ease-out}.duel-board[data-motion="reduced"] .duel-action-card{animation:duel-appear 90ms ease-out}@keyframes duel-appear{from{opacity:.3;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.duel-log ol{list-style:none;margin:0;padding:0}.duel-log li{padding:10px 0;border-top:1px solid var(--border)}.duel-log li small{color:var(--text-muted)}
