/* Keep TC font metrics inside the existing native source wells. */
.desktop-client .player-card .identity :is(b,span){min-width:0;line-height:1.5;max-height:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.desktop-client :is(.player-card,.sp-readout) .meter>b{font-size:clamp(7px,calc(var(--native-meter-height) * .62),9px);line-height:1.5;padding:0 2px;box-sizing:border-box;overflow:hidden}
.desktop-client.touch-client .actionbar button.action b{line-height:1.5;padding:0;bottom:9px}
.desktop-client.touch-client .actionbar button.action[data-slot="0"] b{font-size:11px;line-height:1.5;bottom:10px;left:10px;right:10px}
.desktop-client.touch-client .actionbar button.action:is([data-slot="2"],[data-slot="3"],[data-slot="4"],[data-slot="5"]) b{font-size:8px;line-height:1.5;bottom:5px}
.desktop-client .rail-toggle{font-size:16px;line-height:1.5;overflow:hidden}
.desktop-client :is(.native-npc-title,.native-npc-service-title){height:20px;line-height:20px;box-sizing:border-box;padding:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.desktop-client .native-npc-speech{box-sizing:border-box;padding:0;overflow-wrap:anywhere}
.desktop-client .native-npc-services :is(p,h3){max-width:100%;overflow-wrap:anywhere}
.desktop-client .client-window:not(.source-window) .window-header h2{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* CharacterFrame has 14px rows. The TC faces need 13px of ink at 9px;
   the former 10/11px faces drew 15/16px of ink across adjacent rows. */
.desktop-client .native-character-board :is(.native-character-label,.native-character-value,.native-value-ink){box-sizing:border-box;height:14px;line-height:14px;font-size:9px;letter-spacing:0}
.desktop-client .native-character-value{overflow:hidden;white-space:nowrap}
.desktop-client .native-value-ink{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.desktop-client .native-character-title{top:20px;height:18px;font-size:12px;line-height:18px;white-space:nowrap}
.desktop-client .native-character-name{height:20px;line-height:20px}
.desktop-client .native-character-class{top:98px;height:17px;line-height:17px;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* MerchantFrame's five rows are 36.6px. Both lines, including the font's
   ascent/descent, must fit inside each row beside its original item socket. */
.desktop-client #panel .merchant-item-list .native-list-name{font-size:12px;line-height:18px}
.desktop-client #panel .merchant-item-list small{font-size:11px;line-height:16.5px;margin-top:0}
.desktop-client .native-merchant-title{height:18px;font-size:12px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.desktop-client .merchant-menu-title{height:17px;font-size:11px;line-height:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.desktop-client .merchant-count-title{height:17px;font-size:11px;line-height:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.desktop-client :is(.merchant-greeting,.merchant-product,.merchant-meta){box-sizing:border-box;overflow-wrap:anywhere;overscroll-behavior:contain}
.desktop-client .merchant-greeting{padding:2px 4px 3px 0}
.desktop-client .merchant-product{padding:2px 3px 3px 0}
.desktop-client #panel .merchant-detail .native-item-count input{box-sizing:border-box;line-height:21px}
/* QuestFrame speech bubble: (116,49)-(338,180), inset 12/8/8/8.
   Long dialogue scrolls inside this well instead of crossing its curved rim. */
.desktop-client .native-npc-speech{left:128px;top:57px;width:202px;height:115px;margin:0;padding:0 3px 3px 0;line-height:1.75;overscroll-behavior:contain;scrollbar-gutter:stable}
.desktop-client :is(.native-sidecar,.native-npc-services){min-width:0;overflow-wrap:anywhere;overscroll-behavior:contain}
.desktop-client .native-npc-services :is(h3,p,button){line-height:1.6}
/* Captions are localized in derived frames before layout. This also keeps the
   source grain continuous when the service pane's border image stretches. */
.desktop-client :is(.native-npc-title,.native-npc-service-title,.native-merchant-title,.merchant-menu-title,.merchant-count-title){background-color:transparent;background-image:none;isolation:isolate}
.desktop-client :is(.native-npc-title,.native-npc-service-title,.native-merchant-title,.merchant-menu-title,.merchant-count-title)::before{content:none}
.desktop-client :is(.native-npc-title,.native-npc-service-title,.native-merchant-title,.merchant-menu-title,.merchant-count-title){color:#e9d4ae;letter-spacing:.025em;text-shadow:0 1px 0 #382619,0 -1px 0 #b69b6b40}
.desktop-client .native-npc-board{background-image:url('/assets/ui/native-title-npc-frame.png'),linear-gradient(#111710,#111710)}
.desktop-client .native-npc-service-pane{border-image-source:url('/assets/ui/native-title-services-frame.png')}
.desktop-client .native-merchant-board{background-image:url('/assets/ui/native-title-merchant-frame.png'),linear-gradient(#101410,#101410)}
.desktop-client .native-merchant-menu{background-image:url('/assets/ui/native-title-trade-frame.png'),linear-gradient(#101410,#101410)}
.desktop-client .native-item-count{background-image:url('/assets/ui/native-title-quantity-frame.png'),linear-gradient(#101410,#101410)}
