Cefrium Browser Pool
A bounded LRU pool of CefriumViewState for screens that show many different pages over time -- e.g. a list of lessons/articles, each rendered in a CefriumView.
Why this exists: a Cefrium browser is HEAVY (a full Chromium renderer process, tens-to-hundreds of MB -- far more than a WebView). Keeping one alive per item you ever opened grows memory without bound. This pool keeps at most maxAlive browsers alive and CLOSES the least-recently-used one when you open another, so memory stays bounded while the most recent N keep their state (scroll, video position) for instant return.
For the simplest case -- showing one page at a time -- you do NOT need a pool: reuse a single CefriumView and swap content with navigator.loadUrl(...) / loadHtmlWithBaseUrl(...). Use a pool only when you want the last few pages to stay warm.
val pool = rememberCefriumBrowserPool(maxAlive = 2)
val state = pool.stateFor(lesson.id, lesson.url) // reuses or creates
CefriumView(state = state, navigator = navigator)
// Opening a 3rd lesson closes the least-recently-used browser automatically.The pool owns its states: when it leaves composition every pooled browser is closed. Do NOT also wrap a pooled state in rememberCefriumViewState (that would double-own it).