/* Public reading content only. No font, sizing, spacing or direction changes.
   Keep the last line at the natural start edge in both LTR and RTL languages.
   Important alignment overrides editor-saved inline paragraph alignment. */
body[data-public-prose] p:not(:where(
    nav p, .nav p, .navbar p, .breadcrumb p, .pagination p,
    button p, .btn p, label p, .dropdown-menu p,
    .ebook-card p, .ebook-card-list p:not(:last-child),
    .pricing-plan-top p, .pricing-plan-yearly p,
    .bookory-cart-empty p, .home-empty-library p,
    .blog-empty-state p, .author-biography-empty, .contributor-biography-empty,
    .author-book-count, .contributor-book-count, .storefront-footer__tagline,
    .auth-switch-v2, .order-reference, .order-book-format, .order-paid-date,
    .order-coupon, .subscription-requested-book, .book-report-uploaded
)),
body[data-public-prose] :is(
    #description, .ebook-brief, .quick-preview-description,
    .author-biography-copy, .contributor-biography-copy,
    .blog-article-body, .page-wrapper, .editorial-slide__description
),
body[data-public-prose] :is(
    #description, .author-biography-copy, .contributor-biography-copy,
    .blog-article-body, .page-wrapper
) :is(div, blockquote, li) {
    text-align: justify !important;
    text-align-last: start !important;
    text-justify: inter-word;
}

/* Plain-text rich content needs container alignment. Prevent that inherited
   alignment from reaching headings, controls, tables and code. Low specificity
   preserves any explicit alignment for these non-paragraph elements. */
:where(body[data-public-prose]) :where(
    #description, .author-biography-copy, .contributor-biography-copy,
    .blog-article-body, .page-wrapper
) :where(h1, h2, h3, h4, h5, h6, button, .btn, label, table, pre) {
    text-align: start;
    text-align-last: auto;
}
