/* P3 standalone Words: Martenitsa tokens, logical layout, no production shell rules. */
.w-root,.w-dialog{box-sizing:border-box;color:var(--textPrimary);font-family:var(--font-body);font-size:var(--body);line-height:1.45;font-feature-settings:'locl';font-variant-numeric:tabular-nums}
.w-root *,.w-dialog *{box-sizing:border-box}.w-root{max-inline-size:1240px;margin-inline:auto;padding:var(--s6) var(--s5);min-inline-size:0}.w-root h1,.w-root h2,.w-root h3,.w-dialog h2,.w-dialog h3{font-family:var(--font-display);font-weight:900;line-height:1.15;text-wrap:balance;margin:0;overflow-wrap:anywhere}.w-root h1{font-size:var(--h1)}.w-root h2,.w-dialog h2{font-size:var(--h2)}.w-root h3,.w-dialog h3{font-size:var(--h3)}.w-root p,.w-dialog p{margin:0;text-wrap:pretty}.w-root a:not(.primary),.w-dialog a{color:inherit;text-underline-offset:.18em}.w-root a:hover,.w-dialog a:hover{text-decoration-color:var(--action)}.w-root [hidden],.w-dialog [hidden]{display:none!important}.w-root svg,.w-dialog svg{inline-size:24px;block-size:24px;flex-shrink:0;transition:transform var(--t-hover) var(--ease-out)}
.w-nav,.w-actions,.w-recents,.w-filters{display:flex;flex-wrap:wrap;gap:var(--s2);align-items:center}.w-nav{margin-block-end:var(--s6);padding-block-end:var(--s4);border-block-end:1px solid var(--border)}.w-nav .w-button{min-block-size:44px}.w-nav [aria-current=page],.w-filters [aria-pressed=true]{background:var(--action);color:var(--onAction);border-color:var(--action)}
.w-button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);min-block-size:52px;max-inline-size:100%;padding:var(--s2) var(--s4);border:1.5px solid color-mix(in srgb,var(--textPrimary) 70%,transparent);border-radius:var(--r-button);background:transparent;color:var(--textPrimary);font:inherit;font-weight:600;line-height:1.2;text-align:center;overflow-wrap:anywhere;text-decoration:none;cursor:pointer;transition:transform var(--t-hover) var(--ease-out),background var(--t-hover),border-color var(--t-hover),box-shadow var(--t-hover)}.w-compact{min-block-size:44px;font-size:var(--secondary);padding:var(--s2) var(--s3)}.w-icon{inline-size:44px;block-size:44px;min-inline-size:44px;padding:var(--s2);border-color:transparent;border-radius:50%}.w-primary{background:var(--action);color:var(--onAction);border-color:var(--action);box-shadow:var(--lift-1);overflow:hidden}.w-primary:after{content:'';pointer-events:none;position:absolute;inset-block:0;inset-inline-start:-60%;inline-size:40%;background:linear-gradient(110deg,transparent,rgb(255 255 255/.18),transparent);transform:skewX(-18deg)}.w-button:active:not(:disabled){transform:scale(.97);background:color-mix(in srgb,var(--action) 14%,var(--surface))}.w-primary:active:not(:disabled){background:var(--actionPressed)}.w-button:focus-visible,.w-hit:focus-visible,.w-row-open:focus-visible,.w-deck-card:focus-visible,.w-topic:focus-visible,.w-flashcard:focus-visible,.w-search input:focus-visible{outline:2px solid var(--action);outline-offset:2px}.w-button:disabled{opacity:.4;cursor:default}.w-button[aria-pressed=true]:not(.w-flashcard){background:var(--action);color:var(--onAction)}.w-button[aria-expanded=true]>svg{transform:rotate(90deg)}
.w-stack,.w-entry{display:flex;flex-direction:column;gap:var(--s6);min-inline-size:0}.w-heading{display:grid;gap:var(--s2);margin-block-end:var(--s4)}.w-eyebrow{font-size:var(--eyebrow);font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--brand)}.w-secondary{font-size:var(--secondary);color:var(--textSecondary)}.w-caption,.w-attribution{font-size:var(--caption);line-height:1.5;color:var(--textSecondary)}.w-attribution{overflow-wrap:anywhere}.w-card,.w-word-hero,.w-empty{background:var(--surface);padding:var(--s4);border:1px solid var(--border);border-radius:var(--r-tile);min-inline-size:0}.w-card h3{margin-block-end:var(--s3)}.w-empty{display:flex;flex-direction:column;align-items:flex-start;gap:var(--s3)}.w-empty-icon{color:var(--textSecondary)}.w-word-hero{display:flex;flex-direction:column;gap:var(--s3);border-radius:var(--r-card);padding:var(--s6)}.w-headword{font-size:var(--h1)!important}.w-meaning{font-size:var(--bg-text)}.w-translit{color:var(--textSecondary);font-size:var(--secondary);overflow-wrap:anywhere}.w-draft{border-inline-start:2px solid var(--textSecondary);padding-inline-start:var(--s2)}
.w-search-wrap{min-inline-size:0;display:grid;gap:var(--s2)}.w-search{display:flex;align-items:center;gap:var(--s2);min-block-size:56px;border:1.5px solid var(--border);border-radius:var(--r-option);background:var(--surface);padding-inline:var(--s3);transition:border-color var(--t-hover),box-shadow var(--t-hover)}.w-search:focus-within{border-color:var(--action);box-shadow:0 0 0 3px color-mix(in srgb,var(--action) 12%,transparent)}.w-search input{inline-size:100%;min-inline-size:0;min-block-size:52px;border:0;background:none;color:var(--textPrimary);font:inherit;outline:none!important}.w-search input::-webkit-search-cancel-button{display:none}.w-search input::placeholder{color:var(--textSecondary);opacity:1}.w-search input:focus-visible{box-shadow:none}.w-search .w-icon{animation:w-clear 160ms var(--ease-out)}.w-search-wrap .w-caption{padding-inline:var(--s1)}
.w-dictionary{display:grid;grid-template-columns:400px minmax(0,1fr);gap:var(--s6);align-items:start}.w-dict-results{min-inline-size:0;display:flex;flex-direction:column;gap:var(--s3);position:sticky;inset-block-start:var(--s4)}.w-dict-entry{min-inline-size:0;display:grid;gap:var(--s4)}.w-results{--w-row-height:64px;max-block-size:60dvh;min-block-size:160px;overflow:auto;overscroll-behavior:contain;border:1px solid var(--border);border-radius:var(--r-tile);background:var(--surface)}.w-hit{inline-size:100%;border:0;border-block-end:1px solid var(--border);background:transparent;padding:var(--s2) var(--s3);text-align:start;font:inherit;color:inherit;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto;column-gap:var(--s2);cursor:pointer;transition:background var(--t-hover),box-shadow var(--t-hover)}.w-hit-word{font-weight:700;overflow-x:clip;overflow-y:visible;text-overflow:ellipsis;white-space:nowrap;line-height:1.35;padding-block:2px}.w-hit-details{font-size:var(--eyebrow);color:var(--textSecondary);align-self:center;max-inline-size:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.w-hit-meaning{grid-column:1/-1;font-size:var(--secondary);color:var(--textSecondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.w-hit[aria-selected=true]{background:var(--surfaceSunken);box-shadow:inset 3px 0 var(--action)}.w-hit:active{background:var(--surfaceSunken)}
.w-row{display:flex;align-items:center;gap:var(--s2);min-block-size:80px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-tile);padding-inline:var(--s3);min-inline-size:0}.w-row-open{border:0;background:none;color:inherit;font:inherit;cursor:pointer;text-align:start;flex:1;min-inline-size:0;padding:var(--s3) var(--s1);border-radius:var(--r-chip);transition:background var(--t-hover),transform var(--t-press)}.w-row-open:active{transform:scale(.985);background:var(--surfaceSunken)}.w-row-text{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:var(--s2);min-inline-size:0}.w-row-word{grid-column:2;font-size:var(--bg-text);font-weight:600}.w-row-meaning,.w-row-meta{grid-column:2;font-size:var(--secondary);color:var(--textSecondary);overflow-wrap:anywhere}.w-row-meta{font-size:var(--caption)}.w-status-dot{inline-size:8px;block-size:8px;border-radius:50%;grid-column:1;grid-row:1;align-self:center;background:var(--textSecondary)}.w-status-dot[data-state=learning]{background:var(--info)}.w-status-dot[data-state=familiar]{background:var(--familiar)}.w-status-dot[data-state=known]{background:var(--correct)}.w-word-list{display:grid;gap:var(--s2)}.w-tools{display:flex;align-items:center;gap:var(--s3);flex-wrap:wrap}.w-tools .w-search-wrap{flex:1;min-inline-size:180px}.w-filters{padding-block:var(--s1)}
.w-forms{border-collapse:collapse;inline-size:100%;font-size:var(--secondary);table-layout:fixed}.w-forms th,.w-forms td{padding:var(--s2);border-block-end:1px solid var(--border);text-align:start;overflow-wrap:anywhere}.w-forms th{inline-size:36%;font-weight:500;color:var(--textSecondary)}.w-forms td>.living-word{font-size:var(--bg-text)}.w-forms .w-button{margin-inline-start:var(--s2)}.w-example{padding-block:var(--s3);display:grid;gap:var(--s2);border-block-end:1px solid var(--border)}.w-line{display:flex;align-items:center;gap:var(--s3);justify-content:space-between;min-inline-size:0}.w-line>.living-word{font-size:var(--bg-text);overflow-wrap:anywhere}.w-language-list{display:grid;gap:var(--s3);padding-block-start:var(--s4)}.w-picture{margin:0;padding:var(--s4);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-tile)}.w-picture img{display:block;inline-size:160px;max-inline-size:100%;block-size:auto;object-fit:contain;margin-inline:auto}
.w-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s4)}.w-deck-card,.w-topic{display:flex;flex-direction:column;gap:var(--s3);text-decoration:none;transition:transform var(--t-hover) var(--ease-out),box-shadow var(--t-hover),border-color var(--t-hover)}.w-deck-card h3{margin:0}.w-deck-progress{display:grid;gap:var(--s2);margin-block-start:auto}.w-progress{block-size:8px;border-radius:var(--r-chip);overflow:hidden;background:var(--surfaceSunken)}.w-progress>span{display:block;block-size:100%;inline-size:100%;background:var(--action);transform-origin:left;transition:transform 320ms var(--spring)}[dir=rtl] .w-progress>span{transform-origin:right}.w-phrase{display:flex;flex-direction:column;gap:var(--s3)}
.w-dialog{padding:0;border:1px solid var(--border);border-radius:var(--r-sheet);background:var(--surfaceElevated);inline-size:min(760px,calc(100vw - 32px));max-block-size:calc(100dvh - 32px);overflow:hidden;box-shadow:var(--lift-2);animation:w-dialog-in var(--t-enter) var(--ease-out)}.w-dialog::backdrop{background:rgb(0 0 0/.4)}.w-dialog-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);padding:var(--s3) var(--s4);border-block-end:1px solid var(--border);background:var(--surfaceElevated)}.w-dialog-body{padding:var(--s4);max-block-size:calc(100dvh - 144px);overflow:auto;overscroll-behavior:contain}.w-dialog-head h2{font-size:var(--h3);min-inline-size:0}.w-leaving{animation:w-dialog-out 120ms var(--ease-out) forwards}.w-popover{position:fixed;margin:0;inline-size:max-content;max-inline-size:min(420px,calc(100vw - 32px));border-radius:var(--r-button);animation:w-menu-in 160ms var(--ease-out)}.w-menu-dialog .w-dialog-body{padding:var(--s1);max-block-size:min(60dvh,420px)}.w-menu{position:relative;display:grid;min-inline-size:200px;gap:var(--s1)}.w-menu>.w-button{border:0;justify-content:space-between;background:transparent;z-index:1;text-align:start}.w-menu-highlight{position:absolute;inset-block-start:0;inset-inline:0;background:var(--surfaceSunken);border-radius:var(--r-chip);transition:transform 120ms var(--ease-out);pointer-events:none}
.w-flash-stage{display:grid;gap:var(--s4);justify-items:center}.w-flashcard{position:relative;display:block;inline-size:100%;min-block-size:280px;border:1px solid var(--border);border-radius:var(--r-card);background:var(--surface);color:inherit;font:inherit;cursor:pointer;transform-style:preserve-3d;transition:transform 320ms var(--ease-out)}.w-flashcard.is-flipped{transform:rotateY(180deg)}.w-flash-front,.w-flash-back{backface-visibility:hidden;display:flex;flex-direction:column;gap:var(--s4);align-items:center;justify-content:center;padding:var(--s6);overflow-wrap:anywhere}.w-flash-front{position:relative;min-block-size:280px}.w-flash-back{position:absolute;inset:0;transform:rotateY(180deg);overflow:auto}.w-flash-word{font-family:var(--font-display);font-size:var(--hero-word);font-weight:900}.w-flash-meaning{font-size:var(--h2)}.w-flashcard .living-word{pointer-events:none}.w-full{position:fixed;inset:0;margin:0;inline-size:100vw;max-inline-size:100vw;block-size:100dvh;max-block-size:100dvh;border:0;border-radius:0}.w-show{background:#fff;color:#1B1C1F}.w-show .w-dialog-head{background:inherit;border:0;justify-content:flex-end}.w-show .w-dialog-head h2{display:none}.w-show .w-dialog-head .w-button{color:inherit}.w-show .w-dialog-body{block-size:calc(100dvh - 72px);max-block-size:none;padding:var(--s6)}.w-show-card{display:flex;min-block-size:100%;flex-direction:column;justify-content:center;align-items:center;gap:var(--s6);text-align:center}.w-show-phrase{font-size:clamp(var(--hero-word),9vw,var(--letter));font-family:var(--font-display);font-weight:900;line-height:1.18;overflow-wrap:anywhere;max-inline-size:100%}.w-show .w-button{color:inherit}.w-show .w-button:focus-visible{outline-color:currentColor}:root[data-theme=dark] .w-show{background:#000;color:#F2F1EE}.w-toast{position:fixed;inset-block-end:var(--s6);inset-inline:var(--s5);inline-size:fit-content;max-inline-size:calc(100vw - 40px);margin-inline:auto;padding:var(--s3) var(--s4);border:1px solid var(--border);border-radius:var(--r-button);background:var(--surfaceElevated);box-shadow:var(--lift-2);z-index:100;font-size:var(--secondary)}
.w-root .sv,.w-dialog .sv{position:relative;display:inline-block}.w-root .sv:after,.w-dialog .sv:after{content:'';position:absolute;inline-size:2px;block-size:.32em;inset-inline-start:50%;inset-block-start:-.12em;background:var(--brand);transform:rotate(18deg);border-radius:2px}.living-word.can-play{cursor:pointer}.living-word [data-w]{position:relative}.living-word .is-active{color:var(--textPrimary);text-decoration:underline;text-decoration-color:var(--action);text-underline-offset:.2em}.living-word .is-spoken{color:var(--textSecondary)}.living-word .is-active .sv:after{animation:w-stress 120ms var(--ease-out)}[dir=rtl] .w-button>svg:has(path[d^='M20 12']){transform:scaleX(-1)}
@media(hover:hover) and (pointer:fine){.w-button:not(:disabled):hover{background:color-mix(in srgb,var(--action) 8%,var(--surface));border-color:var(--action);transform:translateY(-1px);box-shadow:var(--lift-1)}.w-primary:not(:disabled):hover{background:var(--actionPressed);box-shadow:var(--lift-2)}.w-primary:hover:after{animation:w-sheen 600ms var(--ease-out)}.w-icon:hover>svg{transform:scale(1.08)}.w-hit:hover,.w-row-open:hover{background:var(--surfaceSunken)}.w-deck-card:hover,.w-topic:hover{transform:translateY(-3px);box-shadow:var(--lift-2);border-color:color-mix(in srgb,var(--action) 35%,var(--border))}.w-flashcard:hover{border-color:var(--action);box-shadow:var(--lift-1)}}
@media(max-width:1099px){.w-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.w-dictionary{grid-template-columns:320px minmax(0,1fr)}}
@media(max-width:759px),(max-height:500px) and (pointer:coarse){.w-root{padding-block:var(--s4)}.w-stack,.w-entry{gap:var(--s6)}.w-dictionary{grid-template-columns:minmax(0,1fr)}.w-dict-results{position:static}.w-dict-entry:has(.w-empty){display:none}.w-grid{grid-template-columns:1fr}.w-word-hero{padding:var(--s4)}.w-dialog:not(.w-full){margin:0;position:fixed;inset:auto 0 0;inline-size:100%;max-inline-size:100%;border-end-start-radius:0;border-end-end-radius:0;max-block-size:calc(100dvh - 16px);animation:w-sheet-in 260ms var(--ease-out)}.w-menu>.w-button{min-block-size:52px}.w-dialog-head:before{content:'';position:absolute;inset-block-start:var(--s2);inset-inline-start:calc(50% - 16px);inline-size:32px;block-size:4px;background:var(--border);border-radius:var(--r-chip)}.w-dialog-head{padding-block-start:var(--s4)}.w-full .w-dialog-head:before{display:none}.w-card{padding:var(--s3)}.w-search input{font-size:var(--secondary)}.w-hit-details{max-inline-size:100px}.w-show .w-dialog-body{padding:var(--s4)}.w-show .w-dialog-head{padding-block-start:var(--s2)}}

@media(prefers-reduced-motion:reduce){.w-root *,.w-dialog *{animation:none!important;transition:none!important}.w-button:hover,.w-button:active,.w-row-open:active,.w-deck-card:hover,.w-topic:hover{transform:none!important}.w-flashcard,.w-flashcard.is-flipped{transform:none}.w-flash-back{transform:none;opacity:0}.w-flashcard.is-flipped .w-flash-back{opacity:1}.w-flashcard.is-flipped .w-flash-front{opacity:0}.w-dialog,.w-leaving{animation:none!important}}
@keyframes w-dialog-in{from{opacity:0;transform:scale(.98)}to{opacity:1;transform:scale(1)}}@keyframes w-dialog-out{to{opacity:0;transform:scale(.98)}}@keyframes w-menu-in{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes w-sheet-in{from{opacity:0;transform:translateY(32px)}to{opacity:1;transform:translateY(0)}}@keyframes w-clear{from{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes w-stress{from{transform:translateY(-4px) rotate(18deg)}to{transform:translateY(0) rotate(18deg)}}@keyframes w-sheen{to{transform:translateX(500%) skewX(-18deg)}}
.w-match{background:color-mix(in srgb,var(--action) 12%,transparent);border-radius:var(--s1)}

.w-reveal{opacity:0;transform:translateY(12px);transition:opacity 260ms var(--ease-out),transform 260ms var(--ease-out)}.w-reveal.is-visible{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){.w-reveal{opacity:1;transform:none}}
.w-actions,.w-nav{align-items:stretch}.w-phrase .w-actions .w-icon{inline-size:52px;block-size:52px}
.w-flip-hint{display:flex;align-items:center;gap:var(--s2);font-size:var(--caption);color:var(--textSecondary)}
.w-tools [aria-haspopup=menu]>svg:last-child{transform:rotate(90deg)}.w-tools [aria-haspopup=menu][aria-expanded=true]>svg:last-child{transform:rotate(270deg)}
.w-initial{max-inline-size:1240px;margin-inline:auto;padding:var(--s6) var(--s5);display:grid;gap:var(--s4);opacity:0;animation:w-loading 800ms 300ms alternate infinite}.w-initial span{display:block;block-size:56px;max-inline-size:400px;border-radius:var(--r-option);background:var(--surfaceSunken)}.w-initial span:first-child{max-inline-size:200px;block-size:40px}@keyframes w-loading{from{opacity:.4}to{opacity:1}}@media(prefers-reduced-motion:reduce){.w-initial{animation:none;opacity:0;animation:w-static-loading 1ms 300ms forwards}}@keyframes w-static-loading{to{opacity:1}}
.w-show-card{padding-block-end:72px}.w-show-card>.w-button{position:fixed;inset-block-end:var(--s6);inset-inline-start:calc(50% - 22px);background:#fff;border-color:currentColor}:root[data-theme=dark] .w-show-card>.w-button{background:#000}
.w-draft{display:flex;align-items:center;gap:var(--s2)}
.w-related{display:flex;flex-wrap:wrap;gap:var(--s2)}.w-related h3{flex-basis:100%;margin:0}
.w-dialog{isolation:isolate}.w-flashcard{perspective:1200px;transform:none!important;transform-style:flat;overflow:hidden}.w-flash-inner{display:block;position:relative;transform-style:preserve-3d;transition:transform 320ms var(--ease-out)}.w-flashcard.is-flipped .w-flash-inner{transform:rotateY(180deg)}.w-flash-front,.w-flash-back{background:var(--surface);border-radius:inherit}.w-flash-back{min-block-size:280px}@media(prefers-reduced-motion:reduce){.w-flash-inner,.w-flashcard.is-flipped .w-flash-inner{transform:none}.w-flash-back{transform:none;opacity:0}.w-flashcard.is-flipped .w-flash-back{opacity:1}.w-flashcard.is-flipped .w-flash-front{opacity:0}}
@media(max-width:759px),(max-height:500px) and (pointer:coarse){.w-forms tr{display:grid;grid-template-columns:minmax(0,1fr)}.w-forms th{inline-size:auto;border-block-end:0;padding-block-end:0}.w-forms td{display:flex;align-items:center;justify-content:space-between;gap:var(--s2)}.w-forms td>.living-word{min-inline-size:0;overflow-wrap:anywhere}.w-forms td>.w-button{flex-shrink:0}}
.w-deck-card:active,.w-topic:active{transform:scale(.985);border-color:var(--action)}.w-hit:active{background:color-mix(in srgb,var(--action) 12%,var(--surface))}.w-flashcard:active{border-color:var(--action);box-shadow:inset 0 0 0 1px var(--action)}.w-button[aria-pressed=true]:not(.w-flashcard):is(:hover,:active),.w-nav [aria-current=page]:is(:hover,:active){background:var(--actionPressed);color:var(--onAction)}@media(prefers-reduced-motion:reduce){.w-deck-card:active,.w-topic:active{transform:none}}
.w-headword [lang=bg],.w-flash-word[lang=bg],.w-flash-word [lang=bg],.w-show-phrase[lang=bg],.w-show-phrase [lang=bg]{font-family:var(--font-display)}
.w-no-stress .sv:after{display:none}
.w-root h1,.w-root h2,.w-root h3,.w-button span{hyphens:auto}.w-hit-details{padding-inline:var(--s1);border-radius:var(--r-chip);background:var(--surfaceSunken)}mark.w-match{color:inherit;padding:0}.w-hit-enter{animation:w-hit-in 260ms var(--ease-out) both}@keyframes w-hit-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.w-hit-enter{animation:none}}
.w-detail[open]{display:flex;flex-direction:column}.w-detail .w-dialog-head{flex-shrink:0}.w-detail .w-dialog-body{flex:1;min-block-size:0;max-block-size:none}.w-word-popover{position:fixed;margin:0;inline-size:min(760px,calc(100vw - 32px));max-block-size:calc(100dvh - 32px)}@media(max-width:759px),(max-height:500px) and (pointer:coarse){.w-detail{block-size:72dvh}}
/* A stressed vowel stays inline: an inline-block creates false breaks inside words. */
.w-root .sv,.w-dialog .sv{display:inline}
.w-filters{position:relative;isolation:isolate}.w-filter-indicator{z-index:0;pointer-events:none;background:var(--action);border-radius:var(--r-button)}.w-filters>.w-button{z-index:1;transition:color var(--t-hover),background var(--t-hover),border-color var(--t-hover),transform var(--t-hover)}.w-filters>.w-button[aria-pressed=true]{background:transparent;color:var(--onAction)}
.w-meaning,.w-secondary,.w-example .living-word,.w-language-list{overflow-wrap:anywhere}
.w-results{overflow-anchor:none}
/* Reserve results at the input gesture, so a cold shard cannot move the credits. */
.w-results{block-size:60dvh}.w-result-count{min-block-size:1.5em}
.w-word-progress{display:grid;gap:var(--s3)}.w-word-progress h3{margin:0}.w-word-progress .w-caption{display:flex;align-items:center;gap:var(--s2)}
/* Both faces reserve their full text; rating actions stay outside the scroll body. */
.w-flash-dialog[open]{display:flex;flex-direction:column}.w-flash-dialog .w-dialog-head{flex-shrink:0}.w-flash-dialog .w-dialog-body{flex:1;min-block-size:0;max-block-size:none}.w-flash-ratings{flex-shrink:0;justify-content:center;padding:var(--s3) var(--s4);border-block-start:1px solid var(--border);background:var(--surfaceElevated)}.w-flash-inner{min-block-size:280px}.w-flash-front{position:absolute;inset:0}.w-flash-back{justify-content:flex-start;justify-content:safe center}.w-flash-back>*{flex-shrink:0}

/* Custom pressed feedback replaces the browser tap overlay. */
.w-root a,.w-root button,.w-dialog button{-webkit-tap-highlight-color:transparent}

/* R1-P dictionary composition and a consistent Bulgarian-first row hierarchy. */
.w-filters{flex-wrap:nowrap;overflow-x:auto;min-block-size:44px;max-inline-size:100%;scrollbar-width:thin;mask-image:linear-gradient(to right,transparent,#000 8px,#000 calc(100% - 8px),transparent)}.w-filters>.w-button{flex-shrink:0;white-space:nowrap}
.w-row-word{font-weight:500}.w-row-meaning,.w-phrase>.w-secondary{font-weight:300}.w-translit{font-size:var(--caption);color:var(--textTertiary);font-weight:400}.w-row-text>.w-translit{grid-column:2}
.w-hit-word{font-size:var(--compact-title);font-weight:500}.w-hit-details{font-size:var(--caption)}.w-hit-meaning{font-size:var(--secondary);font-weight:300}
.w-frequent-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s2)}
.w-frequent-tile{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:0;min-block-size:64px;padding:var(--s2) var(--s3);border:1px solid var(--border);text-align:start}
.w-frequent-word{font-size:var(--bg-text);font-weight:500}.w-frequent-tile>.w-caption{font-weight:300;max-inline-size:100%;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.w-frequent h2{font-size:var(--h3)}.w-frequent{gap:var(--s3)}
.w-search{min-block-size:52px}.w-search input{min-block-size:48px}.w-dict-entry{position:sticky;inset-block-start:100px}
@media(max-width:759px),(max-height:500px) and (pointer:coarse){.w-dict-entry{position:static}}
@media(min-width:1100px){.w-dict-results>.w-search-wrap{position:sticky;inset-block-start:100px;z-index:2;background:var(--bg)}.w-dict-entry .w-headword{font-size:var(--h1)!important}}

.w-frequent-word{display:flex;align-items:center;gap:var(--s2);max-inline-size:100%}.w-frequent-word>.w-caption{font-weight:400;background:var(--surfaceSunken);border-radius:var(--r-chip);padding-inline:var(--s1);white-space:nowrap}
/* R1-P2 local lists and deck samples. */
.w-list-name{box-sizing:border-box;min-inline-size:0;inline-size:100%;min-block-size:52px;padding:var(--s3);border:1.5px solid var(--border);border-radius:var(--r-button);background:var(--surface);color:var(--textPrimary);font:inherit}.w-list-name:focus-visible{outline:2px solid var(--action);outline-offset:2px}.w-deck-sample{display:flex;flex-wrap:wrap;gap:var(--s2)}.w-deck-sample>.living-word{padding:var(--s2) var(--s3);background:var(--surfaceSunken);border-radius:var(--r-chip)}.w-lists .w-card{display:grid;gap:var(--s3)}.w-flash-dialog .f-keyboard{margin-inline-start:auto}.w-flash-dialog .w-dialog-head>h2{min-inline-size:0;overflow-wrap:anywhere}.w-flash-dialog .w-dialog-head .w-icon{flex-shrink:0}
/* At 200% text size the frequent grid becomes one column before a homograph
   chip can squeeze its Bulgarian headword into a column of single letters. */
.w-frequent-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,10rem),1fr))}.w-frequent-word{flex-wrap:wrap}.w-frequent-word>.w-caption{white-space:normal;max-inline-size:100%;overflow-wrap:anywhere}

/* SCAN-1: meaning labels are content, not one-line button captions. */
.w-frequent-tile>.w-caption{display:block;white-space:normal;overflow:visible;-webkit-line-clamp:unset}
.w-example>a.w-caption{display:inline-flex;align-items:center;min-block-size:44px;min-inline-size:44px;border-radius:var(--r-chip)}
.w-dict-results{position:static}
@media(min-width:1100px){.w-dict-results>.w-search-wrap,.w-dict-entry{inset-block-start:calc(var(--topbar-height,76px) + 24px)}}
@media(hover:hover) and (pointer:fine){.w-search input:hover{background:color-mix(in srgb,var(--action) 6%,transparent);border-radius:var(--r-chip)}.w-example>a.w-caption:hover{background:var(--surfaceSunken);color:var(--textPrimary)}}
.w-example>a.w-caption:active{background:var(--surfaceSunken);color:var(--textPrimary)}

/* HOT-3: list sheets stay above both the keyboard and home indicator. */
.w-dialog-body{padding-block-end:max(var(--s4),env(safe-area-inset-bottom))}
.w-dialog-head{padding-left:max(var(--s4),env(safe-area-inset-left));padding-right:max(var(--s4),env(safe-area-inset-right))}
.w-list-picker[open]{display:flex;flex-direction:column}
.w-list-picker .w-dialog-head,.w-list-actions{flex-shrink:0}
.w-list-picker .w-dialog-body{min-block-size:0;padding-block-end:var(--s4)}
.w-list-actions{padding:var(--s3) var(--s4) max(var(--s4),env(safe-area-inset-bottom));border-block-start:1px solid var(--border);background:var(--surfaceElevated)}
@media(max-width:759px),(max-height:500px) and (pointer:coarse){
 .w-dialog[open]:not(.w-full,.rd8-show){inset-block-end:var(--vv-bottom,0px);max-block-size:calc(100dvh - var(--vv-bottom,0px) - env(safe-area-inset-top) - 16px);display:flex;flex-direction:column}
 .w-dialog:not(.w-full) .w-dialog-body{flex:1;min-block-size:0;max-block-size:none;padding-left:max(var(--s4),env(safe-area-inset-left));padding-right:max(var(--s4),env(safe-area-inset-right))}
}
@media(max-height:500px) and (pointer:coarse){
 .w-list-picker .w-dialog-head{padding-block:var(--s1)}
 .w-list-picker .w-dialog-body{padding-block:var(--s1)}
 .w-list-picker .w-list-form{display:grid;grid-template-columns:max-content minmax(0,1fr);align-items:center;gap:var(--s3)}
 .w-list-actions{padding-block-start:var(--s1);padding-block-end:max(var(--s2),env(safe-area-inset-bottom));padding-left:max(var(--s4),env(safe-area-inset-left));padding-right:max(var(--s4),env(safe-area-inset-right))}
}

mark.w-match{box-decoration-break:clone;-webkit-box-decoration-break:clone}

/* Full-screen native phrases use the same physical sensor insets as the shell. */
.w-dialog.w-show[open]>.w-dialog-head{padding-block-start:max(var(--s2),env(safe-area-inset-top))}
.w-dialog.w-show[open]>.w-dialog-head,.w-dialog.w-show[open]>.w-dialog-body{padding-left:max(var(--s4),env(safe-area-inset-left));padding-right:max(var(--s4),env(safe-area-inset-right))}

/* Keep the document as the scrolling element while a native dialog owns focus. */
html:has(dialog[open]){overflow:hidden}

/* Deck action and active-level links keep their explicit foreground. */
.w-root a[data-initial-learn],.w-root a.rd7-jump[aria-current=location]{color:var(--onAction)}

/* W-DQA4 P2-45: one audio column, including long labels and phone rows. */
.w-forms tr{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1fr) 44px;gap:var(--s3);align-items:center;padding-block:var(--s2);border-block-end:1px solid var(--border)}
.w-forms tr>:is(th,td){display:block;inline-size:auto;padding:0;border:0;min-inline-size:0}
.w-forms .w-form-audio{justify-self:end}
.w-forms .w-form-audio>:is(.w-button,.audio-control,.audio-controls){margin:0}

/* Word-entry breadcrumbs remain fully readable at 200% text. */
.large-text main.w-root>.breadcrumbs{flex-wrap:wrap}
.w-example>.w-line{display:grid;grid-template-columns:minmax(0,1fr) 44px;gap:var(--s3)}
.w-example>.w-line>:is(.w-button,.audio-control){justify-self:end}

/* W-DQA4 P3-22: compact, consistently outlined actions in the live phrase list. */
.w-phrase .w-actions>.w-button{inline-size:auto;block-size:44px;min-block-size:44px;padding-block:var(--s2);border:1.5px solid color-mix(in srgb,var(--textPrimary) 70%,transparent);font-size:var(--secondary)}
.w-phrase .w-actions>.w-icon{inline-size:44px;padding-inline:var(--s2)}

/* W-R9-11: phone dictionary results belong to the page's scroll flow. */
@media(max-width:759px),(max-height:500px) and (pointer:coarse){
 main[data-kind=dictionary] .w-results{block-size:auto;max-block-size:none;overflow:visible;overscroll-behavior:auto}
}

/* W4 shell adaptation; standalone P3 remains scoped and independently testable. */
.words-host.w-root{padding:0;max-inline-size:none;margin:0}
.words-host .w-dict-results{inset-block-start:calc(var(--topbar-height,80px) + var(--s4))}
.words-host .w-dict-entry{position:static}
/* SSR search keeps its original heading throughout hydration. */
[data-phrase-search]{margin-block-end:var(--s4)}
.phrase-row[hidden]{display:none}
.words-host .w-picture{display:grid;gap:var(--s2);margin:0}
.words-host .w-picture img{max-inline-size:100%;object-fit:contain}
.words-host .w-related a{min-block-size:44px}
.w-show .w-dialog-head>h2{position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip-path:inset(50%)}
.w-show .w-dialog-head{justify-content:flex-end;background:transparent;border:0}

main.w-root{padding:var(--s6) var(--s5);max-inline-size:1280px;margin-inline:auto}
.w-root .words-host{max-inline-size:100%}
/* The parsed query shell reserves the same result geometry before enhancement. */
[data-ssr-query]{display:none}
.words-query [data-ssr-query]{display:block}
.words-query [data-ssr-frequent]{display:none}
.words-query .w-result-count:empty:before{content:'\00a0'}
.w-results[data-ssr-query]{block-size:60dvh}
@media(max-width:759px),(max-height:500px) and (pointer:coarse){[data-words-dictionary]>.w-dict-entry{display:none}}

/* Base button:disabled resets backgrounds; retain readable primary contrast. */
.w-button.w-primary:disabled{background:var(--action);color:var(--onAction)}

/* These long client details reserve a page before data arrives. */
main:is([data-kind=word-client],[data-kind=dictionary-entry],[data-kind=deck-client])>.words-host{min-block-size:calc(100dvh - var(--topbar-height,80px))}
.w-show-phrase{font-size:var(--show-to-phrase)}

/* HOT-3: lazy word styles retain the shell notch gutter. */
main.w-root{padding-left:max(var(--s5),env(safe-area-inset-left));padding-right:max(var(--s5),env(safe-area-inset-right))}

/* SSR filled links preserve the paired action foreground in every state. */
.w-root a.button.primary,.w-root a.button.primary:visited,.w-root a.button.primary:hover{color:var(--onAction)}

/* Secondary actions keep a content-sized target when they stand alone. */
.w-entry>.w-button,.w-stack>.w-button,.w-lists>.w-button{justify-self:start;inline-size:max-content;max-inline-size:100%}
.w-tools>.w-button{min-block-size:44px;block-size:44px}
.w-entry .w-word-hero>.w-actions:has([data-action=add]){display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}
.w-entry .w-word-hero>.w-actions>[data-action=add]{grid-column:1/-1}
.w-entry [data-action=add]:disabled{opacity:1;background:var(--surface);color:var(--textPrimary);border-color:var(--action)}
.w-entry .w-button[aria-pressed=true]:not([data-action=add]){background:var(--surface);color:var(--textPrimary);border-color:var(--action)}

/* A saved word is a readable completed action, with its check icon intact. */
.w-entry.rd6-entry [data-action=add]:disabled{opacity:1;background:var(--surface);color:var(--textPrimary);border:1.5px solid var(--action)}
.w-entry .rd6-word-actions .w-button[aria-pressed=true]{background:var(--surface);color:var(--textPrimary);border-color:var(--action)}
.w-entry button[aria-pressed=true] svg{fill:currentColor}

/* SEO-1 scan: the level jump links remain tappable at the hub/footer boundary. */
main[data-kind=decks] .rd7-jumps{position:relative;inset-block-start:auto}

/* Keep detail headings at their final position while their explicit slot loads. */
.words-host.rd7-detail{align-content:start}
.words-host>[data-mount=deck]{min-block-size:calc(100dvh - var(--topbar-height,80px))}
@media(max-width:759px){.rd7-heading>.lead{min-block-size:2lh}}

/* R3-P3-21: equal outlined audio controls and a single metadata line. */
.w-entry-meta{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--s2)}
.w-entry .w-voice{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s2)}
.w-entry .w-voice>.w-button{inline-size:100%;min-block-size:44px;border:1.5px solid var(--textSecondary);border-radius:var(--r-button);padding:var(--s2)}
.w-entry .w-word-hero>.w-actions:not(.w-voice)>.w-button{font-size:var(--secondary);padding-inline:var(--s2);hyphens:manual}
.large-text .w-entry .w-word-hero>.w-actions:not(.w-voice){grid-template-columns:minmax(0,1fr)}

/* Entry actions keep their content width on desktop. Equal voice plates
   size themselves to the slow label rather than stretching across the page. */
.w-entry .w-voice{inline-size:max-content;max-inline-size:100%}
@media(min-width:760px){.w-entry .w-word-hero>.w-actions:not(.w-voice){inline-size:max-content;max-inline-size:100%}}

/* W-R5: filters start with clear edges; the scrolled edge alone gains a fade. */
.words-host .w-filters{scrollbar-width:none;mask-image:linear-gradient(to right,var(--strip-left,#000),#000 32px,#000 calc(100% - 32px),var(--strip-right,#000))}
.words-host .w-filters::-webkit-scrollbar{display:none}
[dir=rtl] .words-host .w-filters{mask-image:linear-gradient(to left,var(--strip-right,#000),#000 32px,#000 calc(100% - 32px),var(--strip-left,#000))}
.words-host .words-intro-detail{margin-block-start:var(--s4);max-inline-size:72ch;color:var(--textSecondary);font-size:var(--secondary)}
.words-host .r4e-words-links>[data-words-review]{white-space:nowrap}

/* W-R5b: a returning list never paints the new-learner invitation.
   The small first-paint count reserves the actual number of local row slots.
   Old profiles without the count use one viewport until the store is ready. */
.words-local-skeleton{display:none;gap:var(--s6)}
html[data-returning]:not([data-words-known]) main[data-kind=words] .rd6-invitation{display:none}
html[data-returning]:not([data-words-known]) .words-host:not(:has(.r4e-my-words>*,.rd6-invitation[hidden])) .words-local-skeleton{display:grid;gap:var(--s6);min-block-size:60dvh}
html[data-local-words] .words-host:not(:has(.r4e-my-words>*)) .words-local-skeleton{display:grid;gap:var(--s6)}
html[data-local-words] main[data-kind=words] .rd6-invitation{display:none}
html[data-local-words] .words-host:not(:has(.r4e-my-words>*))>.w-stack>.w-stack{display:none}
.words-skeleton-tools{block-size:52px;border-radius:var(--r-tile);background:var(--surfaceSunken)}
.words-skeleton-filters{block-size:52px;border-radius:var(--r-button);background:var(--surfaceSunken)}
.words-skeleton-rows{block-size:calc(var(--local-word-count,5)*64px - 8px);background:repeating-linear-gradient(to bottom,var(--surfaceSunken) 0 56px,transparent 56px 64px);border-radius:var(--r-tile)}
@media(max-width:759px){.words-local-skeleton,html[data-local-words] .words-host:not(:has(.r4e-my-words>*)) .words-local-skeleton{gap:var(--s6)}}
html[data-returning] main[data-kind=words] [data-learning-numbers]{min-block-size:1.5em}
.w-root :is(h1,h2,h3),.w-button span{hyphens:manual}

/* Dictionary previews are linked content cards, with readable sense metadata. */
.w-frequent-tile{border-radius:var(--r-tile);background:var(--surface);color:var(--textPrimary);text-decoration:none;transition:background var(--t-hover),border-color var(--t-hover)}
@media(hover:hover) and (pointer:fine){.w-frequent-tile:hover{background:var(--surfaceSunken);border-color:var(--action)}}
.w-frequent-tile:active{background:var(--surfaceSunken)}

.words-host .w-button.rd6-create-list{block-size:52px;min-block-size:52px;padding-block:0}
.w-root .w-search>.w-button.w-icon{inline-size:44px;block-size:44px;min-block-size:44px;padding:0}
.w-entry.rd6-entry .rd6-word-copy>.w-voice>.r5b-word-voice{block-size:52px;min-block-size:52px;padding-block:0}
.w-entry .w-related a.w-button{block-size:52px;min-block-size:52px;padding-block:var(--s1);line-height:1.25}

/* Empty local lists have no phantom grid row after hydration. */
.rd6-lists>div:empty{display:none}

/* Reserve the due-review CTA before the local store opens, just as Today does. */
.words-host [data-words-review]{display:none}
html[data-has-due] .words-host [data-words-review]{display:inline-flex}
.large-text .words-host .w-button,.large-text .w-entry.rd6-entry .rd6-word-copy>.w-voice>.r5b-word-voice,.large-text .w-entry .w-related a.w-button{block-size:auto;min-block-size:52px;padding-block:var(--s2)}
.large-text .words-host :is(.w-icon,.w-compact){min-block-size:44px}

/* R8: saved meanings may wrap without clipping at the row edge. */
.words-host .r4e-my-words .w-row-open{block-size:auto;min-block-size:56px;padding-block:var(--s3)}
.large-text .words-host .r4e-my-words .w-row-open{block-size:auto;min-block-size:52px}

@media(min-width:1100px){.words-skeleton-rows{block-size:calc(var(--local-word-grid-rows,2)*64px - 8px)}}

/* W-R6 N6/P2-14: word actions use whole labels; saved words lead the page. */
.w-entry .r5-word-action{align-self:start}
.w-entry .r5-word-action-label{word-break:normal;overflow-wrap:normal;hyphens:manual}
.large-text .w-entry .rd6-word-actions{grid-template-columns:repeat(2,minmax(0,1fr))}
main[data-kind=words] .words-host:has(.r4e-my-words)>.w-stack>.w-heading .seo-intro{display:none}
main[data-kind=words] .words-host:has(.r4e-my-words)>.w-stack>[data-learning-numbers]{order:1}
main[data-kind=words] .words-host:has(.r4e-my-words)>.w-stack>.w-stack:has(.r4e-my-words){order:2}
main[data-kind=words] .words-host:has(.r4e-my-words)>.w-stack>[data-words-links]{order:3}
main[data-kind=words] .words-host:has(.r4e-my-words)>.w-stack>.rd6-welcome{order:4}
main[data-kind=words] .words-host:has(.r4e-my-words)>.w-stack>.words-intro-detail{order:5}
/* W-R6 P2-4: word details use the same paired audio controls as the player. */
.w-entry.rd6-entry .rd6-word-copy>.w-voice{display:flex;inline-size:max-content;max-inline-size:100%;gap:var(--s2)}
/* W-R6 P2-5: the deck's study action fills its text column. */
.rd7-deck-copy{flex:1}
.rd7-deck-copy>:is([data-deck-study],[data-initial-learn]){inline-size:100%;min-block-size:52px}

/* W-R6b: whole word-action labels wrap inside their enlarged grid lane. */
.w-entry .r5-word-action{min-inline-size:0;inline-size:100%;max-inline-size:100%}
.w-entry .r5-word-action-label{min-inline-size:0;max-inline-size:100%}

/* W-R7-7: standalone Words UI must inherit the Russian UI font family too. */
html:is([lang=ru],[lang=uk]) :is(.w-root,.w-dialog){font-family:var(--font-ui)}
html:is([lang=ru],[lang=uk]) :is(.w-root,.w-dialog) :is(h1,h2,h3){font-family:var(--font-ui-display)}
html:is([lang=ru],[lang=uk]) :is(.w-root,.w-dialog) [lang=bg]{font-family:var(--font-body)}
html:is([lang=ru],[lang=uk]) :is(.w-root,.w-dialog) :is(h1,h2,h3) [lang=bg]{font-family:var(--font-display)}

/* W-R6-P2-14: reserve the hydrated local-list order and legend before paint. */
html[data-local-words] main[data-kind=words] .words-host>.w-stack>.w-heading .seo-intro{display:none}
html[data-local-words] main[data-kind=words] .words-host>.w-stack>[data-learning-numbers]{order:1}
html[data-local-words] main[data-kind=words] .words-host>.w-stack>.words-local-skeleton{order:2}
html[data-local-words] main[data-kind=words] .words-host>.w-stack>[data-words-links]{order:3}
html[data-local-words] main[data-kind=words] .words-host>.w-stack>.rd6-welcome{order:4}
html[data-local-words] main[data-kind=words] .words-host>.w-stack>.words-intro-detail{order:5}

/* W-R8c R7-11 / R5 P2-14: every saved-word filter is a whole target.
   Wrapping avoids both a half-label and an undiscoverable horizontal strip. */
.words-host .w-filters{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;gap:var(--s2);padding-block:var(--s1)}
.words-host .w-filters>.w-button{flex:0 0 auto;white-space:nowrap;block-size:auto;min-block-size:44px}
.words-host .w-tools>.w-button{block-size:52px;min-block-size:52px}

/* W-R8c R8-15: shape, as well as colour, separates New from Familiar. */
.words-host .w-status-dot[data-state=new]{background:transparent;border:1.5px solid var(--textSecondary)}

/* W-R15-5: level links travel with their catalogue, like Reading/Exams. */
.words-host .rd7-jumps{box-shadow:none}
.words-host .rd7-level{scroll-margin-block-start:calc(var(--topbar-height,80px) + var(--s4))}

/* W-R8c R8-22: row controls grow with enlarged text and get a separate row. */
.words-host .r4e-my-words .w-row>:is(.w-icon,.audio-control){min-inline-size:44px;min-block-size:44px}
.large-text .words-host .r4e-my-words .w-row{flex-wrap:wrap;padding-block-end:var(--s3)}
.large-text .words-host .r4e-my-words .w-row-open{flex-basis:100%}
.large-text .words-host .r4e-my-words .w-row>:is(.w-icon,.audio-control){inline-size:2.75rem;block-size:2.75rem;min-inline-size:2.75rem;min-block-size:2.75rem}
.large-text .words-host .r4e-my-words .w-row>:is(.w-icon,.audio-control)>svg{inline-size:1.5rem;block-size:1.5rem}

/* W-R8c R8-24: use the same desktop gutter as the persistent page shell. */
@media(min-width:1100px){body>main.w-root{padding-inline:max(var(--s7),env(safe-area-inset-left)) max(var(--s7),env(safe-area-inset-right))}}

/* W-R9c: compact study totals are a contained row rather than loose prose. */
main[data-kind=words] .learning-numbers{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,9rem),1fr));gap:var(--s3);padding:var(--s4);border:1px solid var(--border);border-radius:var(--r-tile);background:var(--surface)}

/* W-R10b: standalone fields retain their authored search/clear icons. */
.w-search input::-webkit-search-decoration,.w-search input::-webkit-search-cancel-button{-webkit-appearance:none}
.w-search input{appearance:textfield}

/* R10-27: stress ticks overlay normal phrase leading. */
.w-phrase .w-line>.living-word{line-height:1.35}

/* R11-15: keep the word sheet's accessible name without a second display word. */
.w-detail .w-dialog-head:has(>h2.sr-only){justify-content:flex-end}

/* W-R15-4: labels have a full phone row; word forms keep their audio column. */
.w-forms :is(th,td){overflow-wrap:normal;word-break:normal;hyphens:manual}
@media(max-width:759px){
 .w-forms tr{grid-template-columns:minmax(0,1fr) 44px;gap:var(--s2) var(--s3)}
 .w-forms th{grid-column:1/-1}
 .w-forms .w-form-value{grid-column:1}
 .w-forms .w-form-audio{grid-column:2}
}

/* W-R15-9: short German words stay whole in phrasebook glosses. */
:lang(de) :is(.phrase-row .tr,.w-phrase>.w-secondary){hyphens:auto;hyphenate-limit-chars:8 4 3;overflow-wrap:normal;word-break:normal}

/* W-R15-16: one normal primary action, with a compact row below it. */
.w-entry .rd6-word-actions{inline-size:min(100%,320px);grid-template-columns:repeat(4,minmax(0,1fr))}
.w-entry .rd6-word-actions>.w-primary{inline-size:100%}
.large-text .w-entry .rd6-word-actions{grid-template-columns:repeat(2,minmax(0,1fr))}

/* P6 W integration: append to words.css (see P6_W_INTEGRATION.patch). */
html:has(.w-flash-dialog[open],.w-show[open]){overflow:hidden;scrollbar-gutter:auto}
.w-dialog.w-flash-dialog[open],.w-dialog.w-show[open]{display:grid;grid-template-rows:auto minmax(0,1fr) auto;block-size:100dvh;max-block-size:100dvh;min-block-size:0;inset:0;margin:auto;border-radius:0;overflow:hidden}
.w-dialog.w-flash-dialog{inline-size:min(100%,680px)}
.w-dialog.w-flash-dialog>.w-dialog-head,.w-dialog.w-show>.w-dialog-head{min-block-size:0;flex-shrink:0}
.w-dialog.w-flash-dialog>.w-dialog-body,.w-dialog.w-show>.w-dialog-body{min-block-size:0;max-block-size:none;block-size:auto;overflow:hidden;padding:var(--s4)}
.w-flash-dialog .w-flash-stage{block-size:100%;min-block-size:0;grid-template-rows:auto minmax(0,1fr) auto;gap:var(--s3)}
.w-flash-dialog .w-flashcard{block-size:100%;min-block-size:0;overflow:hidden}
/* The old inline minimum is a content measurement, not a viewport constraint. */
.w-flash-dialog .w-flash-inner{block-size:100%;min-block-size:0!important}
.w-flash-dialog :is(.w-flash-front,.w-flash-back){min-block-size:0;max-block-size:100%;overflow:auto;justify-content:safe center;padding:var(--s4)}
.w-flash-dialog .w-flash-ratings{padding:var(--s4);padding-block-end:max(16px,env(safe-area-inset-bottom));margin:0;display:flex;flex-wrap:nowrap;gap:var(--s2)}
.w-flash-dialog .w-flash-ratings>.w-button{flex:1;min-inline-size:0}
.w-show .w-show-card{display:grid;grid-template-rows:minmax(0,1fr) auto;gap:var(--s4);block-size:100%;min-block-size:0}
.w-show .w-show-phrase{max-block-size:100%;min-block-size:0;overflow:auto;align-content:safe center}
.w-show .w-show-card>.w-button{justify-self:center;margin-block-end:max(16px,env(safe-area-inset-bottom))}
@media(max-height:480px){.w-flash-dialog .w-flash-word{font-size:var(--h2)}.w-flash-dialog .w-flash-meaning{font-size:var(--bg-text)}.w-show .w-show-phrase{font-size:var(--h1)}}
html:has(.w-flash-dialog[open],.w-show[open]) body{block-size:100dvh;min-block-size:0;overflow:hidden}

/* MOTION-P: revealing the grade buttons cannot shrink the card mid-flip.
   The hidden action row keeps its final footprint and stays inert/AX-hidden. */
.w-dialog.w-flash-dialog .w-flash-ratings[hidden]{display:flex!important;visibility:hidden;pointer-events:none}

/* RD-6, scoped to the Words invitation and shared word detail. Type uses tokens. */
.rd6-welcome{display:grid;gap:var(--s7)}
.rd6-invitation{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr);gap:var(--s7);padding:var(--s7);border:1px solid var(--border);border-radius:var(--r-card);background:var(--surface)}
.rd6-invitation-copy{display:flex;flex-direction:column;align-items:start;justify-content:start;gap:var(--s6);min-inline-size:0}
.w-root .rd6-invitation h2{font-size:var(--home-h2);line-height:1.2;hyphens:manual;overflow-wrap:normal}
.rd6-start{gap:var(--s3);align-items:stretch}.rd6-start>.w-button{flex:1 1 auto}
.rd6-samples{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s3);min-inline-size:0}
.rd6-sample{display:grid;grid-template-rows:auto auto 1fr auto;justify-items:start;gap:var(--s3);padding:var(--s4);border:1px solid var(--border);border-radius:var(--r-option);background:var(--bg);min-inline-size:0}
.rd6-sample h3{font-size:var(--bg-text);hyphens:manual!important;overflow-wrap:normal!important;word-break:normal;line-height:1.35}
.rd6-sample-picture{margin:0;inline-size:80px;block-size:80px;justify-self:center}
.rd6-sample-picture img{inline-size:100%;block-size:100%;object-fit:contain}.rd6-sample>.w-secondary{font-weight:400;overflow-wrap:normal;line-height:1.45}
.rd6-sample-audio{justify-self:end;background:var(--surface);border-color:var(--border)}
.rd6-lists{gap:var(--s4)}.rd6-create-list{min-block-size:96px;inline-size:100%;border:1.5px dashed color-mix(in srgb,var(--textPrimary) 55%,transparent);border-radius:var(--r-option);justify-content:flex-start;background:var(--surface);padding:var(--s6)}
.rd6-thumb{flex:none;inline-size:48px;block-size:48px;object-fit:contain;border-radius:var(--r-chip);background:var(--surfaceSunken)}
.w-row-open:has(.rd6-thumb){display:flex;align-items:center;gap:var(--s4)}
.w-tools:has([data-export-words])>.w-button{min-block-size:44px}
.rd6-entry{gap:var(--s6)}.rd6-entry .w-word-hero{display:grid;gap:var(--s6);padding:var(--s7)}
.rd6-word-copy{display:flex;flex-direction:column;align-items:start;gap:var(--s3);min-inline-size:0}
.rd6-entry .w-headword{font-size:var(--hero-word)!important;line-height:1.2;overflow-wrap:anywhere;hyphens:manual;word-break:normal;max-inline-size:100%}
.rd6-entry .w-headword .living-word [data-w]{display:inline;overflow-wrap:anywhere}
.rd6-entry .w-meaning{font-size:var(--h2);line-height:1.4;overflow-wrap:anywhere;font-weight:400}
.rd6-entry .w-translit{font-size:var(--secondary);color:var(--textSecondary)}
.rd6-illustrated{grid-template-columns:minmax(0,1fr) 160px;align-items:start}
.rd6-word-picture{inline-size:160px;gap:var(--s3);align-self:start}.rd6-word-picture img{inline-size:160px;block-size:160px;object-fit:contain}
.rd6-word-copy>.w-actions:not(.rd6-word-actions)>.w-button{min-block-size:52px;block-size:auto;min-inline-size:52px}
.rd6-word-actions{display:grid;grid-template-columns:minmax(0,max-content) repeat(4,44px);justify-content:start;gap:var(--s3);align-items:center;margin-block-start:var(--s3);max-inline-size:100%}
.rd6-word-actions>.w-primary{grid-column:1;min-inline-size:0;overflow-wrap:normal;hyphens:manual}
.rd6-icon-action{border:1px solid var(--border);background:var(--surfaceSunken)}
.rd6-icon-action>span{position:absolute;inline-size:1px;block-size:1px;clip-path:inset(50%);overflow:hidden;white-space:nowrap}
.rd6-word-details{display:grid;gap:var(--s6);align-items:start;min-inline-size:0}.rd6-paired{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.rd6-word-details>.w-card{padding:var(--s6);min-inline-size:0}.rd6-word-details .w-example .living-word{font-size:var(--bg-text)}
.rd6-word-details .w-line{align-items:flex-start}.rd6-word-details .w-line>.living-word{flex:1;min-inline-size:0}
.rd6-word-details .w-line>.w-button{flex:none}.rd6-entry .w-forms td{overflow-wrap:normal}.rd6-entry .w-forms td>.living-word{overflow-wrap:normal}
.rd6-entry .w-related{display:flex;flex-wrap:wrap;gap:var(--s3);align-items:center}.rd6-entry .w-related>h3{margin:0;flex-basis:100%}
.rd6-entry .w-button:disabled{opacity:1;background:var(--surfaceSunken);color:var(--textSecondary);border-color:var(--border);box-shadow:none}
@media(hover:hover) and (pointer:fine){
 .rd6-icon-action:hover:not(:disabled),.rd6-sample-audio:hover:not(:disabled){background:color-mix(in srgb,var(--action) 10%,var(--surface));color:var(--textPrimary);border-color:var(--action)}
 .rd6-create-list:hover{background:color-mix(in srgb,var(--action) 8%,var(--surface));color:var(--textPrimary);border-color:var(--action)}
}
@media(max-width:1099px){.rd6-invitation{grid-template-columns:1fr;gap:var(--s6)}.rd6-invitation-copy{justify-content:start}.rd6-start{width:100%}.rd6-start>.w-button{flex:0 1 auto}}
@media(max-width:759px),(max-height:500px) and (pointer:coarse){
 .rd6-invitation{padding:var(--s4);gap:var(--s5)}.rd6-samples{grid-template-columns:1fr;gap:var(--s2)}
 .rd6-sample{grid-template-columns:48px minmax(0,1fr) 44px;grid-template-rows:auto auto;column-gap:var(--s3);row-gap:var(--s1);padding:var(--s3);align-items:center}
 .rd6-sample-picture{inline-size:48px;block-size:48px;grid-column:1;grid-row:1/3}.rd6-sample h3{grid-column:2;grid-row:1}.rd6-sample>.w-secondary{grid-column:2;grid-row:2}.rd6-sample-audio{grid-column:3;grid-row:1/3}
 .rd6-start{display:grid;grid-template-columns:1fr}.rd6-entry .w-word-hero{padding:var(--s4)}
 .rd6-illustrated{grid-template-columns:1fr}.rd6-word-picture{justify-self:center}
 .rd6-word-actions{grid-template-columns:repeat(4,44px);justify-content:space-between;inline-size:100%;gap:var(--s3)}
 .rd6-word-actions>.w-primary{grid-column:1/-1;inline-size:100%}.rd6-word-copy{align-items:stretch}.rd6-word-copy>.w-actions:not(.rd6-word-actions){justify-content:start}
 .rd6-paired{grid-template-columns:1fr}.rd6-word-details>.w-card{padding:var(--s4)}
}
@media(prefers-reduced-motion:reduce){.rd6-welcome .w-button:active,.rd6-entry .w-button:active{transform:none}}

.rd6-sample-credits{grid-column:1/-1}.rd6-lists .w-button:disabled{opacity:1;background:var(--surfaceSunken);color:var(--textSecondary);border-color:var(--border);box-shadow:none}
/* The shared entry also lives in a dictionary pane or a word popover. */
.rd6-entry{container-type:inline-size}
@container(max-width:680px){
 .rd6-entry .rd6-illustrated{grid-template-columns:1fr}.rd6-entry .rd6-word-picture{justify-self:center}
 .rd6-word-actions{grid-template-columns:repeat(4,44px);justify-content:space-between;inline-size:100%}.rd6-word-actions>.w-primary{grid-column:1/-1;inline-size:100%}
 .rd6-paired{grid-template-columns:1fr}
}
.rd6-ssr-voice{display:flex;align-items:center;gap:var(--s2);min-block-size:52px}.rd6-sample>.rd6-ssr-voice{justify-self:end;align-self:center}.rd6-ssr-voice>.audio-controls{margin:0}
@media(max-width:759px),(max-height:500px) and (pointer:coarse){.rd6-sample>.rd6-ssr-voice{grid-column:3;grid-row:1/3}}

.w-stack:has(>.rd6-welcome)>.w-heading{margin-block-end:0}
/* Anchor actions need an explicit foreground: w-root's link rule inherits ink. */
.rd6-start>a.w-primary,.rd6-start>a.w-primary:is(:hover,:active){background:var(--action);color:var(--onAction)}
.rd6-start>a.w-primary:hover,.rd6-start>a.w-primary:active{background:var(--actionPressed);color:var(--onAction)}
.rd6-word-picture{padding:0;border:0;background:transparent;border-radius:0}

.rd6-sample>.rd6-ssr-voice{min-block-size:44px;block-size:44px}
/* Related word navigation and source references remain comfortable tap targets. */
.w-root:has(.rd6-entry)>.breadcrumbs>a{min-inline-size:44px;justify-content:center}
.rd6-entry .w-example>a.w-caption{display:inline-flex;align-items:center;min-block-size:44px;max-inline-size:100%}

/* Long real headwords keep the whole word on a phone at the normal H1 token. */
@media(max-width:759px),(max-height:500px) and (pointer:coarse){.rd6-entry .w-headword.rd6-long-headword{font-size:var(--h1)!important}}
@media(hover:hover) and (pointer:fine){
 .w-tools:has([data-export-words]) .w-search:hover,.w-dialog:has([data-list-create]) .w-list-name:hover{border-color:var(--action);background:color-mix(in srgb,var(--action) 6%,var(--surface));color:var(--textPrimary)}
}
.w-dialog:has([data-list-create]) .w-list-name:active{border-color:var(--action);background:var(--surfaceSunken);color:var(--textPrimary)}
/* Shell audio enhances by appending its transport to the target's parent.
   Place it in the reserved slot so hydration cannot add an implicit grid row. */
.rd6-sample>.rd6-ssr-voice,.rd6-sample>.audio-controls{grid-column:1;grid-row:4;justify-self:end;align-self:center}
.rd6-sample>.audio-controls{margin:0;min-block-size:44px;block-size:44px}
.rd6-sample>.audio-controls>.audio-button{min-inline-size:44px;min-block-size:44px;block-size:44px}
.rd6-word-copy:has(>.rd6-ssr-voice){display:grid;grid-template-columns:minmax(0,1fr)}
.rd6-word-copy>.rd6-ssr-voice,.rd6-word-copy>.audio-controls{grid-column:1;grid-row:3}
.rd6-word-copy>.audio-controls{margin:0;min-block-size:52px;block-size:52px}
.rd6-word-copy>.audio-controls>.audio-button{min-inline-size:52px;min-block-size:52px;block-size:52px}
@media(max-width:759px),(max-height:500px) and (pointer:coarse){.rd6-sample>.rd6-ssr-voice,.rd6-sample>.audio-controls{grid-column:3;grid-row:1/3}}

/* DQA-R2-P: the desktop dictionary keeps enough width for its search field. */
@media(min-width:1000px){.w-root .w-dictionary{grid-template-columns:400px minmax(0,1fr)}}

/* MOTION-P: held press must win over the later desktop hover rule. Keep
   foreground/background pairs, including filled and selected controls. */
@media(hover:hover) and (pointer:fine){
 .w-button:not(:disabled):hover:active{transform:scale(.97);box-shadow:none;background:color-mix(in srgb,var(--action) 14%,var(--surface));color:var(--textPrimary);transition-duration:var(--t-press)}
 .w-button.w-primary:not(:disabled):hover:active,.w-button[aria-pressed=true]:not(:disabled):hover:active{background:var(--actionPressed);color:var(--onAction)}
}
@media(prefers-reduced-motion:reduce){.w-button:not(:disabled):hover:active{transform:none}}

/* L10N-P: a sticky search inside the finite frequent-words column is pushed
   behind the topbar when that column ends. Font/catalog timing changes the
   collision point. Keep the field in its own flow; the two-pane layout stays. */
@media(min-width:1100px){.w-root .w-dict-results>.w-search-wrap{position:relative;inset-block-start:auto}}

/* R4-31: compact personal vocabulary, aligned with or without illustrations. */
.r4e-words-links{display:flex;flex-wrap:wrap;gap:var(--s2);align-items:stretch}
.r4e-words-links>.w-button{min-block-size:52px;hyphens:manual}
.r4e-words-links>[data-words-review]{flex-basis:100%;justify-content:flex-start}
.w-root .r4e-words-links>a.w-primary{background:var(--action);color:var(--onAction)}
.w-root .r4e-words-links>a.w-primary:is(:hover,:active){background:var(--actionPressed);color:var(--onAction)}
.r4e-my-words .w-row{min-block-size:56px;padding-inline:var(--s2);gap:var(--s1)}
.r4e-my-words .w-row-open{padding-block:var(--s1);padding-inline:var(--s1);min-block-size:56px}
.r4e-my-words .w-row-word{font-size:var(--bg-text);line-height:1.25;font-weight:500}
.r4e-my-words .w-row-meaning{font-size:var(--secondary);line-height:1.25;font-weight:400}
.r4e-my-words .w-row-text{grid-template-columns:8px minmax(0,1fr);align-items:baseline}
.r4e-my-words .w-status-dot{align-self:center}
.r4e-my-words .w-button.w-icon{flex:none;background:var(--surfaceSunken);border-color:var(--border)}
.r4e-my-words>p{grid-column:1/-1}
@media(min-width:1100px){.r4e-my-words{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* R4-33: one visual search icon and stacked, unclipped dictionary meanings. */
.w-search:has(button .i-search)>.i-search{display:none}
.r4e-dictionary-row{display:grid;grid-template-columns:minmax(0,1fr) 44px;gap:var(--s2);align-items:center;padding-inline:var(--s3);border-block-end:1px solid var(--border)}
.r4e-dictionary-main{min-inline-size:0}
.r4e-dictionary-row .w-hit{display:block;block-size:auto;min-block-size:64px;padding:var(--s2) var(--s1);border:0;border-radius:var(--r-chip);text-align:start}
.r4e-dictionary-row .w-hit-word{display:block;font-size:var(--bg-text);white-space:normal;overflow:visible;text-align:start;overflow-wrap:anywhere}
.r4e-dictionary-row .w-hit-meaning{display:block;white-space:normal;overflow:visible;text-align:start;overflow-wrap:anywhere;line-height:1.4;font-weight:400}
.r4e-dictionary-row[aria-selected=true]{background:var(--surfaceSunken);box-shadow:inset 3px 0 var(--action)}
.r4e-dictionary-voice>.w-button{background:var(--surfaceSunken);border-color:var(--border)}
/* Short result lists use the page flow, without a second scrollbar. */
.r4e-dictionary-grid.r4e-dictionary-short{block-size:auto;max-block-size:none}
.w-dict-entry{scroll-margin-block-start:calc(var(--topbar-height,76px) + var(--s4))}
/* PLAYER-R5 P2-15: typing immediately makes room for the dictionary results. */
html.words-query main[data-kind=dictionary] .w-heading :is(.seo-intro,.w-eyebrow){display:none}
html.words-query main[data-kind=dictionary] .w-heading{margin-block-end:var(--s3)}
html.words-query main[data-kind=dictionary] .w-heading h1{font-size:var(--h2)}
main[data-kind=dictionary] .w-search-wrap{position:sticky;inset-block-start:calc(var(--topbar-height,76px) + var(--s2));z-index:3;background:var(--bg);padding-block:var(--s2)}
main[data-kind=dictionary] .w-search-wrap>.w-caption{display:none}
.r5-result-group{grid-column:1/-1;margin:0;padding-block:var(--s2);font-size:var(--secondary);font-weight:700}
.r5-search-skeleton{min-block-size:64px;margin-block:var(--s2);border-radius:var(--r-tile);background:var(--surfaceSunken)}
/* P2-16: one action layout in word pages, panes and sheets. Labels sit under
   the four real 44px icon targets, with natural wrapping for long locales. */
.rd6-word-actions{inline-size:100%;grid-template-columns:repeat(4,minmax(0,1fr));justify-content:stretch}
.rd6-word-actions>.w-primary{grid-column:1/-1;inline-size:100%}
.r5-word-action{display:flex;flex-direction:column;align-items:center;gap:var(--s1);min-inline-size:0}
.r5-word-action-label{font-size:var(--caption);line-height:1.25;text-align:center;overflow-wrap:normal;word-break:normal;hyphens:manual;color:var(--textSecondary)}
main[data-kind=word-client] .client-stage,main[data-kind=dictionary-entry] .client-stage{padding:0;border:0;background:transparent;box-shadow:none}
.rd6-entry .w-related>a{min-block-size:44px;display:inline-flex;align-items:center;overflow-wrap:anywhere}

/* PLAYER-R5b P2-40: both speeds use the shared transport with equal plates. */
.rd6-word-copy>.w-voice{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2);inline-size:100%}
.rd6-word-copy>.w-voice>.r5b-word-voice{inline-size:100%;min-inline-size:0;block-size:auto;min-block-size:56px;border-radius:var(--r-button);padding:var(--s2);gap:var(--s2);font-size:var(--secondary);line-height:1.25;white-space:normal}
.rd6-word-copy>.w-voice>.r5b-word-voice>bdi{display:none}

/* PLAYER-R5b P2-32: first-paint frequent words occupy the desktop detail pane. */
@media(min-width:1000px){
 .w-dictionary:has(.w-dict-entry>[data-dictionary-welcome]) [data-ssr-frequent]{display:none}
 .w-dict-entry>[data-dictionary-welcome]{padding:var(--s6);border:1px solid var(--border);border-radius:var(--r-card);background:var(--surface)}
}
@media(max-width:999px){
 .w-dict-entry:has(>[data-dictionary-welcome]){display:none}
 .w-dictionary:has(.w-dict-entry>[data-dictionary-welcome]){grid-template-columns:minmax(0,1fr)}
}

/* P-R6: readable actions keep whole labels and aligned icon rows. */
.rd6-word-actions{grid-template-columns:repeat(4,minmax(max-content,1fr));align-items:start;gap:var(--s3) var(--s2)}
.r5-word-action{min-inline-size:max-content;align-self:start}.r5-word-action-label{white-space:normal;hyphens:manual;word-break:normal;overflow-wrap:normal}
@container(max-width:360px){.rd6-word-actions{grid-template-columns:repeat(2,minmax(max-content,1fr))}}
.rd6-word-copy>.w-voice>.audio-control{inline-size:56px;block-size:56px;min-inline-size:56px;min-block-size:56px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:50%}
.rd6-word-copy>.w-voice>.audio-control.slow{inline-size:auto;padding-inline:var(--s3);border-radius:var(--r-button);white-space:nowrap}
