/* Live TC ink on the original materials. Keep the pixel artwork and its wells;
   reserve the serif face for titles, and use clear sans text for small data. */
@font-face{font-family:"Asgard Text";src:url('/assets/fonts/asgard-text-400.woff2') format('woff2');font-style:normal;font-weight:400;font-display:swap}
@font-face{font-family:"Asgard Text";src:url('/assets/fonts/asgard-text-600.woff2') format('woff2');font-style:normal;font-weight:600 900;font-display:swap}
@font-face{font-family:"Asgard Title";src:url('/assets/fonts/asgard-title-600.woff2') format('woff2');font-style:normal;font-weight:400 900;font-display:swap}
:root{
 --font:"Asgard Text","Noto Sans TC","Microsoft JhengHei","PingFang TC",sans-serif;
 --font-title:"Asgard Title","Noto Serif TC","PMingLiU",serif;
 --ink-title:#f2deb0;--ink-text:#e9ddbd;--ink-muted:#c9bb98;
}
body{font-family:var(--font);font-weight:400;font-synthesis:none}
body:not(.desktop-client) h1{font-family:var(--font-title);font-weight:600;letter-spacing:.06em}
button,input,select,textarea{font-family:var(--font);font-synthesis:none}
input,select,textarea{letter-spacing:0}
/* Engraved headings have a modest tracking and a single crisp shadow. */
.desktop-client :is(.window-header h2,.dialog-head h2,.native-character-title,.native-skills-title,.native-merchant-title,.merchant-menu-title,.native-sidecar h3,.guild-summary h3,.trade-summary h3){font-family:var(--font-title);font-weight:600;letter-spacing:.055em;color:var(--ink-title);text-shadow:0 1px 1px #080a06}
.desktop-client :is(.native-character-title,.native-skills-title,.native-merchant-title,.merchant-menu-title){font-size:13px;line-height:18px}
.desktop-client .client-window:not(.source-window) .window-header h2{font-size:13px;line-height:19px}
.desktop-client .source-window .native-sidecar h3{font-size:15px;line-height:1.45}
.desktop-client :is(.quest-entry,.codex-card,.title-card) h3{font-family:var(--font-title);font-weight:600;letter-spacing:.035em}
.desktop-client #welcome :is(h1,h2,.login-board-title,.preview-class){font-family:var(--font-title);font-weight:600;letter-spacing:.08em}
.desktop-client #welcome .welcome-art h1{letter-spacing:.16em}
.desktop-client #welcome :is(.login-field label,.register-field label,#create-form>label,.appearance-controls legend){font-weight:600;color:var(--ink-text)}
.desktop-client #welcome :is(#login-character-button,#account-register-button,#create-button){font-family:var(--font-title);font-weight:600;letter-spacing:.1em}
.desktop-client #welcome :is(.welcome-note,#account-caption,.preview-only,.class-description p){color:var(--ink-muted);letter-spacing:.015em}
.desktop-client #welcome .character-slot strong{font-family:var(--font-title);font-weight:600;letter-spacing:.04em}
.desktop-client #welcome :is(.appearance-cycle output,.class-choice,.appearance-controls label){font-weight:400;letter-spacing:0}
/* Flowing panels can gain readability without changing source board geometry. */
.desktop-client .client-window:not(.source-window) .window-body{font-size:13px;line-height:1.65;color:var(--ink-text)}
.desktop-client .source-window .native-sidecar{font-size:13px;line-height:1.6;color:var(--ink-text)}
.desktop-client .source-window .native-sidecar :is(p,.panel-note,.item-detail){font-size:12px;line-height:1.7;color:var(--ink-text)}
.desktop-client .source-window .native-sidecar label{font-size:12px;line-height:1.6}
.desktop-client .source-window .native-sidecar button{font-size:12px;line-height:1.45;font-weight:600;letter-spacing:.015em;text-shadow:0 1px #100c07}
.desktop-client .client-window:not(.source-window) .window-body button{font-size:12px;line-height:1.45;font-weight:600;letter-spacing:.015em}
.desktop-client :is(.guild-note,.trade-note,.party-note,.panel-note){line-height:1.65}
/* Compact item/skill cells keep the fixed heights of the native list. */
.desktop-client .native-skill-list button{font-size:13px;line-height:1.3;letter-spacing:0;text-shadow:0 1px #111}
.desktop-client .native-skill-list button small{font-size:11px;line-height:1.35;color:var(--ink-muted)}
.desktop-client #panel .merchant-item-list button{font-size:13px;line-height:1.25;font-weight:400;letter-spacing:0;text-shadow:0 1px #080b06}
.desktop-client #panel .merchant-item-list button,.desktop-client .native-skill-list button{min-width:0;width:100%;max-width:100%;box-sizing:border-box;overflow:hidden}
.desktop-client #panel .merchant-item-list button>span:last-child,.desktop-client .native-skill-list button>span:not(.native-item-icon){flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.desktop-client .native-skill-list canvas{flex-shrink:0}
.desktop-client .native-list-name{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.desktop-client .merchant-item-list small{font-size:11px;line-height:1.3;color:var(--ink-muted)}
.desktop-client .merchant-meta{font-size:11px;line-height:1.5}
.desktop-client .merchant-gold{font-size:12px}
.desktop-client .merchant-greeting{font-size:11px;line-height:1.65;color:var(--ink-text)}
.desktop-client .merchant-detail :is(h3,[data-selected-name]){font-family:var(--font-title);font-weight:600;letter-spacing:.035em}
.desktop-client #panel .merchant-detail .native-shop-tabs button{font-family:var(--font-title);font-weight:600;letter-spacing:.07em;text-shadow:0 1px #000}
.desktop-client .merchant-detail :is(p,[data-trade-status]){line-height:1.55}
.desktop-client .merchant-product h3{overflow-wrap:anywhere;line-height:1.5}
.desktop-client :is(.native-npc-title,.native-npc-service-title,.merchant-count-title,.native-skill-tabs){font-family:var(--font-title);font-weight:600;letter-spacing:.04em;color:var(--ink-title);text-shadow:0 1px 1px #080a06}
.desktop-client .native-npc-speech{font-weight:400;line-height:1.75;letter-spacing:.015em;color:var(--ink-text)}
.desktop-client .native-character-label{font-weight:400;color:var(--ink-text);letter-spacing:0;line-height:14px;text-shadow:0 1px 1px #151108}
.desktop-client .native-character-value{font-weight:400;font-variant-numeric:tabular-nums;letter-spacing:0;line-height:14px;white-space:nowrap;text-shadow:0 1px 1px #151108}
.desktop-client .native-value-ink{display:inline-block;vertical-align:top;line-height:14px}
.desktop-client #xp-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.desktop-client :is(.native-character-name,.native-character-class){font-family:var(--font-title);font-weight:600;letter-spacing:.025em;text-shadow:0 1px 1px #080a06}
.desktop-client :is(.merchant-gold,.merchant-meta,.merchant-item-list small,.merchant-pages,.native-skill-pages,.guild-treasury,.trade-gold,.party-member small){font-variant-numeric:tabular-nums}
/* HUD text sits inside the original 13px bars, never over their metal edges. */
.desktop-client .player-card .identity b{font-size:11px;font-weight:600;letter-spacing:0;color:#f7ebce;text-shadow:0 1px #000}
.desktop-client .player-card .identity span{font-size:9px;color:#ded0aa;letter-spacing:0}
.desktop-client :is(.player-card,.sp-readout) .meter>b{font-size:10px;font-weight:600;line-height:1;letter-spacing:0;font-variant-numeric:tabular-nums;text-shadow:0 1px 1px #000}
.desktop-client .map-card strong{font-family:var(--font-title);font-size:10px;font-weight:600;letter-spacing:.06em;line-height:15px}
.desktop-client .client-network{font-size:11px;line-height:1.4}
.desktop-client :is(.system-messages,.chat-log,#system-messages){font-size:11px;line-height:1.55}
.desktop-client :is(.scene-label,#toast,.quest-tracker){font-family:var(--font);font-weight:400;letter-spacing:.015em;text-shadow:0 1px 1px #0b1008}
.desktop-client .client-window:not(.source-window) .window-body button,.desktop-client #panel[data-native-panel=npc] button{color:#292319;text-shadow:0 1px #e8d8b655}
/* Engraved numbers remain narrow; reading text uses the full available well. */
body:not(.desktop-client) :is(h2,h3,th){font-family:var(--font-title);font-weight:600;letter-spacing:.025em}
body:not(.desktop-client) :is(td,p,label){line-height:1.6}
.desktop-client .action-group :is(b,small,kbd){font-family:var(--font);font-weight:400;letter-spacing:0;text-shadow:0 1px 2px #000,1px 0 1px #000}
.desktop-client.touch-client .action-group b{font-size:10px;line-height:1.25}
.desktop-client.touch-client .touch-joystick small{font-family:var(--font-title);font-size:12px;letter-spacing:.06em;text-shadow:0 1px 2px #000}
.desktop-client.touch-client .actionbar .experience>div:first-child,.desktop-client.touch-client .actionbar .experience>div:first-child b{font-size:9px;font-variant-numeric:tabular-nums}
/* TC form controls stay at 16px on touch to avoid browser focus zoom. Source
   quantity controls are transformed with their board and retain native size. */
.desktop-client.touch-client .client-window :is(input:not([type=checkbox]):not([type=radio]),select,textarea){font-size:16px}
@media(max-height:500px){
 .desktop-client .map-card strong{font-size:10px}
 .desktop-client #welcome :is(.preview-only,.welcome-note,#account-caption){font-size:11px}
}
/* Finish the same ink hierarchy on controls outside the main panels. Keep
   source wells unchanged: sizes here apply to reading text and live labels. */
.desktop-client :is(.opening-caption strong,.landscape-prompt strong,.dialog-landscape-prompt strong,#death h2){font-family:var(--font-title);font-weight:600;letter-spacing:.045em;color:var(--ink-title);text-shadow:0 1px 1px #080a06}
.desktop-client :is(.opening-buttons button,#welcome .login-actions button,#welcome .selection-actions button,#welcome .registration-actions button,#welcome #back-to-login,#death button){font-family:var(--font-title);font-weight:600;letter-spacing:.035em}
.desktop-client :is(.opening-caption small,#death p,.landscape-prompt p,.dialog-landscape-prompt p){font-family:var(--font);line-height:1.65;color:var(--ink-text)}
.desktop-client #welcome :is(fieldset legend,#class-title,.class-choice,.preview-class){font-family:var(--font-title);font-weight:600;letter-spacing:.035em}
.desktop-client #welcome :is(.appearance-cycle output,#account-caption,.character-slot small){font-variant-numeric:tabular-nums}
.desktop-client :is(.chat-tabs button,.chat-box form button,.function-rail>button span){font-family:var(--font);font-weight:600;letter-spacing:.02em}
.desktop-client .chat-messages{font-size:11px;line-height:1.65;color:var(--ink-text)}
.desktop-client .chat-row time{font-size:10px;font-variant-numeric:tabular-nums;color:#b1ab95}
.desktop-client .system-box header{font-family:var(--font);font-size:10px;font-weight:600;line-height:13px;color:var(--ink-title)}
.desktop-client :is(.actionbar #coordinates,.ui-coordinates){font-family:var(--font);font-size:10px;font-weight:400;font-variant-numeric:tabular-nums;letter-spacing:0}
.desktop-client :is(.gold b,#save-state,.native-gold,.inv-stat,.inventory-cell b,.bank-balances b,.trade-total,.merchant-price,.merchant-owned){font-variant-numeric:tabular-nums;letter-spacing:0}
.desktop-client .client-window .window-body :is(.title-card b,.progression-skill h3,.guild-columns h3,.guild-chat h3,#party-nearby-title){font-family:var(--font-title);font-weight:600;letter-spacing:.025em}
.desktop-client #panel .merchant-detail [data-native-trade]{font-family:var(--font-title);font-weight:600;letter-spacing:.035em;line-height:1.35}
.desktop-client .native-npc-services::before{font-family:var(--font-title);font-weight:600;letter-spacing:.035em}
/* Green party entries carry light ink; metal controls keep their dark ink. */
.desktop-client #window-party .window-body button.party-member{font-weight:400;color:var(--ink-text);text-shadow:0 1px #080a06}
.desktop-client #window-party .party-member b{font-weight:600;letter-spacing:.015em}
.desktop-client #window-party .party-member small{font-weight:400;font-variant-numeric:tabular-nums;line-height:1.5}
.desktop-client :is(#window-guild,#window-trade) .window-body button{color:var(--ink-text);text-shadow:0 1px #080a06;font-weight:600}
.desktop-client :is(#window-guild,#window-trade) h3{font-family:var(--font-title);font-weight:600;letter-spacing:.025em}
.desktop-client #welcome input::placeholder,.desktop-client .chat-box input::placeholder{color:#c0b69c;opacity:1}
/* Short inscriptions follow the old boards' book-like lettering. Keep text
   and numerals separate so a long name cannot stretch a fixed source well. */
.desktop-client :is(.native-sidecar button,.client-window:not(.source-window) .window-body button,.native-npc-services button,.native-shop-tabs button,.merchant-detail [data-native-trade],.chat-tabs button,.chat-box form button,.client-network button){font-family:var(--font-title);font-weight:600;letter-spacing:.025em}
.desktop-client :is(.native-inventory-title,.inv-label,.native-character-label,.native-skill-tabs,.equipment-extension summary,.equipment-grid small,.bag-tools>label,.native-sidecar>label,.native-sidecar fieldset legend){font-family:var(--font-title);font-weight:600;letter-spacing:.025em}
.desktop-client .native-inventory-title{color:var(--ink-title);text-shadow:0 1px 1px #080a06}
.desktop-client :is(.merchant-item-list,.native-skill-list) .native-list-name{font-family:var(--font-title);font-weight:600;letter-spacing:.015em;line-height:1.35}
.desktop-client :is(.native-character-value,.native-value-ink,.inv-stat,.native-gold,.merchant-gold,.merchant-price,.merchant-owned,.merchant-item-list small,.native-skill-list small,.merchant-pages,.native-skill-pages){font-family:var(--font);font-variant-numeric:tabular-nums;letter-spacing:0}
.desktop-client #welcome :is(.login-field label,.register-field label,#create-form>label,.appearance-controls legend,.appearance-controls label,.appearance-cycle output){font-family:var(--font-title);font-weight:600;letter-spacing:.025em}
.desktop-client :is(#target-name,.quest-tracker h3){font-family:var(--font-title);font-weight:600;letter-spacing:.025em;color:var(--ink-title);text-shadow:0 1px 1px #080a06}
.desktop-client .native-sidecar :is(.item-detail,.panel-note,.party-note,.guild-note,.trade-note) {text-wrap:pretty}
/* Gold controls already have bright metal: a restrained dark inscription
   preserves their contrast without making the face look artificially bold. */
.desktop-client :is(.native-sidecar button,.client-window button,.native-npc-services button,.client-network button):focus-visible{outline:1px solid #ead29b;outline-offset:2px}
