// +spec:line-breaking:16e64c - soft wrap opportunity controls (word-break, overflow-wrap, line-break) threaded via UnifiedConstraints
// +spec:line-breaking:f12241 - shaping across intra-word breaks: shaped clusters preserve joining forms
// +spec:line-breaking:2d3674 - U+002D/U+2010 are soft wrap opportunities, not hyphenation opportunities (no extra glyph inserted)
// +spec:line-breaking:28a40b - Hyphenation is a rendering-only effect (no change to underlying content)
// +spec:line-breaking:f23fe8 - UA may use language-tailored heuristics (delegated to hyphenation crate)
// +spec:display-property:508895 - cross-direction hyphenation suppression (LTR in RTL / RTL in LTR) not yet implemented
fn find_optimal_breakpoints(nodes: &[LayoutNode], constraints: &UnifiedConstraints) -> Vec<usize> {
// +spec:display-contents:858337 - text-align justification: last line start-aligned, justify-all forces last line justify
// +spec:display-property:50e074 - justify stretches spaces/words in inline boxes, not inline-table/inline-block
// +spec:display-property:ce8d54 - text-justify selects justification method, inherited from block containers to root inline box
// +spec:display-contents:21b27a - text-indent applies to initial letter's originating line as usual
// +spec:box-model:96f5a7 - line box height uses line-height only; inline margins/borders/padding do not enter calculation