documentation updates (clarified cross-module dependencies, added contributors, improved CSS)
diff --git a/docs/advanced.rst b/docs/advanced.rst
index f23ac53..f24d3b5 100644
--- a/docs/advanced.rst
+++ b/docs/advanced.rst
@@ -1019,8 +1019,8 @@
Partitioning code over multiple extension modules
=================================================
-It's straightforward to split binding code over multiple extension modules and
-reference types declared elsewhere. Everything "just" works without any special
+It's straightforward to split binding code over multiple extension modules, while
+referencing types that are declared elsewhere. Everything "just" works without any special
precautions. One exception to this rule occurs when wanting to extend a type declared
in another extension module. Recall the basic example from Section
:ref:`inheritance`.
@@ -1049,3 +1049,17 @@
.def(py::init<const std::string &>())
.def("bark", &Dog::bark);
+Alternatively, we can rely on the ``base`` tag, which performs an automated
+lookup of the corresponding Python type. However, this also requires invoking
+the ``import`` function once to ensure that the pybind11 binding code of the
+module ``basic`` has been executed.
+
+Naturally, both methods will fail when there are cyclic dependencies.
+
+.. code-block:: cpp
+
+ py::module::import("basic");
+
+ py::class_<Dog>(m, "Dog", py::base<Pet>())
+ .def(py::init<const std::string &>())
+ .def("bark", &Dog::bark);