.app-shell{grid-template-columns:var(--sidebar-width) minmax(0, 1fr);height:100%;transition:grid-template-columns .2s;display:grid}.app-sidebar{border-right:1px solid var(--line-hairline);background:var(--surface-page);flex-direction:column;gap:20px;min-height:0;padding:18px 12px 14px;display:flex}.app-sidebar-header{justify-content:space-between;align-items:center;gap:4px;display:flex}.app-sidebar-collapse-toggle{width:32px;height:32px}.app-brand{align-items:center;padding:0 8px;text-decoration:none;display:inline-flex}.app-brand-wordmark{aspect-ratio:947/593;background:var(--ink);height:34px;display:block;-webkit-mask:url(/brand/french-dojo-wordmark.png) 50%/contain no-repeat;mask:url(/brand/french-dojo-wordmark.png) 50%/contain no-repeat}.app-sidebar-new-article{justify-content:flex-start;margin:0 2px}.app-sidebar-nav{flex-direction:column;gap:2px;display:flex}.app-nav-item{border-radius:var(--radius-control);min-height:36px;color:var(--ink-secondary);align-items:center;gap:10px;padding:0 8px;font-size:14px;text-decoration:none;display:flex}.app-nav-item:hover{background:var(--surface-sunken);color:var(--ink)}.app-nav-item[aria-current=page]{background:var(--surface-sunken);color:var(--accent);box-shadow:inset 2px 0 0 var(--accent);font-weight:500}.app-nav-count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;margin-left:auto;font-size:12px}.app-sidebar-recent{flex-direction:column;min-height:0;padding:0 8px;display:flex;overflow-y:auto}.app-sidebar-recent h2{color:var(--ink-secondary);margin:0 0 4px;font-size:12px;font-weight:500}.app-sidebar-article{color:var(--ink-secondary);flex-direction:column;gap:1px;padding:5px 0;font-size:13px;text-decoration:none;display:flex}.app-sidebar-article-title,.app-sidebar-article-book{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.app-sidebar-article-book{font-size:12px}.app-sidebar-article:hover,.app-sidebar-article[aria-current=page]{color:var(--ink)}.app-sidebar-footer{flex-direction:column;gap:10px;margin-top:auto;display:flex}.app-sidebar-contact{color:var(--ink-secondary);white-space:nowrap;gap:6px;margin:0;padding:0 8px;font-size:12px;display:flex}.app-sidebar-contact a{color:inherit;text-underline-offset:2px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--line-hairline);text-decoration-color:var(--line-hairline)}.app-sidebar-contact a:hover{color:var(--ink);text-decoration-color:currentColor}.theme-toggle{display:flex}.theme-toggle button{white-space:nowrap;flex:1;padding:4px 2px;font-size:12px}.app-page{min-width:0;min-height:0;overflow:auto}.app-mobile-top-bar,.app-mobile-sidebar-scrim{display:none}@media (width>=900px){.app-shell--sidebar-collapsed{grid-template-columns:var(--sidebar-collapsed-width) minmax(0, 1fr)}.app-shell--sidebar-collapsed .app-sidebar{align-items:center;padding:18px 10px 14px}.app-shell--sidebar-collapsed .app-sidebar-header{flex-direction:column;gap:10px}.app-shell--sidebar-collapsed .app-brand{padding:0}.app-shell--sidebar-collapsed .app-brand-wordmark{height:25px}.app-shell--sidebar-collapsed .app-sidebar-label,.app-shell--sidebar-collapsed .app-nav-count,.app-shell--sidebar-collapsed .app-sidebar-recent,.app-shell--sidebar-collapsed .app-sidebar-footer{display:none}.app-shell--sidebar-collapsed .app-sidebar-new-article{justify-content:center;width:36px;margin:0;padding:0}.app-shell--sidebar-collapsed .app-sidebar-nav{align-items:center}.app-shell--sidebar-collapsed .app-nav-item{justify-content:center;width:36px;padding:0}}@media (width<=899px){.app-sidebar-collapse-toggle{display:none}.app-shell{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}.app-nav-item{min-height:44px}.app-sidebar-article{justify-content:center;min-height:44px;padding:6px 0}.theme-toggle button{min-height:36px}.app-shell{padding-inline:env(safe-area-inset-left) env(safe-area-inset-right)}.app-mobile-top-bar{height:calc(52px + env(safe-area-inset-top));padding:env(safe-area-inset-top) 8px 0;border-bottom:1px solid var(--line-hairline);background:var(--surface-page);align-items:center;gap:6px;transition:height .24s cubic-bezier(.16,1,.3,1),border-color .24s;display:flex;overflow:hidden}.app-mobile-top-bar>*{transition:opacity .16s}.app-mobile-top-bar .app-brand{padding:0}.app-mobile-top-bar .app-brand-wordmark{height:30px}.app-shell--mobile-top-bar-hidden .app-mobile-top-bar{height:env(safe-area-inset-top);border-bottom-color:#0000}.app-shell--mobile-top-bar-hidden .app-mobile-top-bar>*{opacity:0}.app-sidebar{z-index:40;width:min(280px,85vw);padding-top:calc(18px + env(safe-area-inset-top));padding-bottom:calc(14px + env(safe-area-inset-bottom));box-shadow:var(--shadow-float);transition:transform .26s cubic-bezier(.16,1,.3,1);position:fixed;inset:0 auto 0 0;transform:translate(-100%)}.app-shell--mobile-sidebar-open .app-sidebar{transform:none}.app-mobile-sidebar-scrim{z-index:39;background:var(--overlay-scrim);display:block;position:fixed;inset:0}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--surface-page:#fbf9f5;--surface-panel:#fffefb;--surface-sunken:#f3f0ea;--surface-hover:#ebe6de;--line-hairline:#e7e1d7;--line-strong:#d2cabd;--ink:#1d1812;--ink-secondary:#5f574d;--ink-placeholder:#8a8178;--ink-on-ink:#fbf9f5;--accent:#2b5376;--accent-tint:#d4e1ec;--brand-solid:#2b5376;--brand-solid-hover:#234664;--ink-on-brand:#fbf9f5;--speaking-tint:#dde7f0;--current-sentence-tint:#eef3f7;--saved-word-underline:#6c90b0;--success:#3d7a55;--danger-text:#a8322b;--pending-text:#8a5a14;--pending-tint:#f6ead2;--focus-ring:#2b53764d;--overlay-scrim:#1d18124d;--inverse-surface:#1d1812;--inverse-surface-sunken:#2c261f;--inverse-surface-hover:#362f27;--inverse-line:#3a332a;--inverse-ink:#ece6db;--inverse-ink-secondary:#a99f92;--inverse-speaking-tint:#2f4a63;--radius-control:6px;--radius-card:10px;--radius-drawer:14px;--shadow-control:0 1px 2px #281e1414;--shadow-float:0 1px 2px #281e140d, 0 8px 24px #281e1414;--shadow-drawer:0 -8px 28px #281e141f;--font-display:"Fraunces", "Literata", Georgia, "Songti SC", serif;--font-reading:"Literata", Georgia, "Songti SC", serif;--font-ui:"Instrument Sans", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--sidebar-width:220px;--sidebar-collapsed-width:60px;--dictionary-panel-width:350px;--reading-column-max-width:760px;--recitation-column-max-width:1120px}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--surface-page:#1c1813;--surface-panel:#231e18;--surface-sunken:#2b251e;--surface-hover:#352e26;--line-hairline:#3a322a;--line-strong:#4e453a;--ink:#f2ede5;--ink-secondary:#b5aa9c;--ink-placeholder:#8a8073;--ink-on-ink:#1c1813;--accent:#7fb0d8;--accent-tint:#2f4a63;--brand-solid:#7fb0d8;--brand-solid-hover:#96bfe0;--ink-on-brand:#1c1813;--speaking-tint:#2a3f53;--current-sentence-tint:#212a32;--saved-word-underline:#6f9cc2;--success:#7cc29a;--danger-text:#e8857a;--pending-text:#e0b468;--pending-tint:#3d3020;--focus-ring:#7fb0d866;--overlay-scrim:#00000080;--inverse-surface:#ece6db;--inverse-surface-sunken:#ddd5c8;--inverse-surface-hover:#d3cabc;--inverse-line:#cbc1b2;--inverse-ink:#2a241d;--inverse-ink-secondary:#5f574d;--inverse-speaking-tint:#bcd2e5;--shadow-control:0 1px 2px #0000004d;--shadow-float:0 1px 2px #0000004d, 0 8px 24px #00000059;--shadow-drawer:0 -8px 28px #0006}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{background:var(--surface-page);color:var(--ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;margin:0;font-size:15px;line-height:1.5}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer}a{color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}::selection{background:var(--accent-tint)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.icon{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:18px;height:18px}.icon--filled{fill:currentColor;stroke:none}.button-primary,.button-secondary,.button-quiet{border-radius:var(--radius-control);white-space:nowrap;justify-content:center;align-items:center;gap:7px;min-height:36px;padding:0 14px;font-size:14px;font-weight:500;text-decoration:none;transition:background-color .2s,border-color .2s,transform .2s;display:inline-flex}.button-primary{background:var(--ink);color:var(--ink-on-ink);border:0}.button-primary:hover:not(:disabled){transform:translateY(-1px)}.button-secondary{border:1px solid var(--line-strong);background:var(--surface-panel)}.button-secondary:hover:not(:disabled){background:var(--surface-sunken)}.button-quiet{color:var(--ink-secondary);background:0 0;border:0;padding:0 8px}.button-quiet:hover:not(:disabled){color:var(--ink);background:var(--surface-sunken)}.button-danger-text{color:var(--danger-text)}:is(.button-primary,.button-secondary,.button-quiet):disabled{opacity:.45;cursor:not-allowed}.icon-button{border-radius:var(--radius-control);width:36px;height:36px;color:var(--ink-secondary);background:0 0;border:1px solid #0000;flex:none;place-items:center;transition:background-color .2s,color .2s;display:inline-grid}.icon-button:hover:not(:disabled){background:var(--surface-sunken);color:var(--ink)}.icon-button--outlined{border-color:var(--line-hairline);background:var(--surface-panel);color:var(--ink)}.icon-button:disabled{opacity:.4;cursor:not-allowed}.text-input,.text-area,.select-input{border:1px solid var(--line-strong);border-radius:var(--radius-control);background:var(--surface-panel);width:100%;min-height:38px;color:var(--ink);padding:8px 12px;transition:border-color .2s,box-shadow .2s}:is(.text-input,.text-area,.select-input):focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--focus-ring);outline:none}.text-input::placeholder,.text-area::placeholder{color:var(--ink-placeholder)}.search-pill{border-radius:99px;padding-left:36px}.library-page,.page-container{max-width:1040px;padding:0 40px 64px}.page-header{border-bottom:1px solid var(--line-hairline);justify-content:space-between;align-items:center;gap:16px;min-height:64px;display:flex}.page-header h1{font-family:var(--font-display);letter-spacing:-.005em;margin:0;font-size:22px;font-weight:700;line-height:1.2}.search-field{width:min(360px,100%);display:block;position:relative}.search-field .icon{width:16px;height:16px;color:var(--ink-placeholder);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.field-label{color:var(--ink-secondary);margin-bottom:6px;font-size:13px;font-weight:500;display:block}.field-hint{color:var(--ink-secondary);margin-top:6px;font-size:13px}.segmented-control{border-radius:var(--radius-control);background:var(--surface-sunken);padding:2px;display:inline-flex}.segmented-control button{color:var(--ink-secondary);background:0 0;border:0;border-radius:4px;min-height:28px;padding:4px 10px;font-size:13px}.segmented-control button[aria-checked=true],.segmented-control button[aria-pressed=true]{background:var(--surface-panel);color:var(--ink);box-shadow:var(--shadow-control)}.toggle-chip{border:1px solid var(--line-hairline);min-height:32px;color:var(--ink-secondary);background:0 0;border-radius:99px;align-items:center;gap:6px;padding:0 11px;font-size:13px;display:inline-flex}.toggle-chip[aria-pressed=true]{border-color:var(--ink);color:var(--ink)}.toggle-chip .icon{width:15px;height:15px}.status-dot-label{color:var(--ink-secondary);align-items:center;gap:6px;font-size:13px;display:inline-flex}.status-dot-label:before{content:"";background:var(--line-strong);border-radius:50%;width:6px;height:6px}.status-dot-label[data-status=ready]:before{background:var(--success)}.status-dot-label[data-status=pending]{color:var(--pending-text)}.status-dot-label[data-status=pending]:before{background:var(--pending-text)}.status-dot-label[data-status=failed]{color:var(--danger-text)}.status-dot-label[data-status=failed]:before{background:var(--danger-text)}.empty-state{color:var(--ink-secondary);flex-direction:column;align-items:flex-start;gap:10px;max-width:420px;padding:48px 0;display:flex}.empty-state .icon{width:28px;height:28px;color:var(--ink-placeholder)}.empty-state strong{color:var(--ink);font-size:16px;font-weight:600}.skeleton-line{background:var(--surface-sunken);border-radius:4px;height:14px;animation:1.6s ease-in-out infinite skeleton-breathing}@keyframes skeleton-breathing{50%{opacity:.5}}@media (width<=899px){.library-page,.page-container{padding:0 16px 48px}.text-input,.text-area,.select-input{font-size:16px}.page-header{min-height:56px}.search-field{width:100%}}@media (pointer:coarse){html{-webkit-tap-highlight-color:transparent}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
