diff --git a/README.md b/README.md
index 9dc3366..51d1b73 100644
--- a/README.md
+++ b/README.md
@@ -62,6 +62,28 @@ Install it with the same procedure above, copying `eternity-wasteland-v2` and co
$config['skin'] = 'eternity-wasteland-v2';
```
+## Eternity Larry And Classic
+
+`eternity-larry` and `eternity-classic` apply the Eternity paper, ink, acid-green, and orange visual system to Roundcube's legacy Larry and Classic interfaces. They retain the original legacy layouts and require their corresponding base skins to be installed.
+
+Install the required base package from the Roundcube application directory before copying the child skin:
+
+```sh
+composer require "roundcube/larry:~1.6.0"
+# or
+composer require "roundcube/classic:~1.6.0"
+```
+
+Then copy the selected Eternity child directory into `skins` and configure one of the following:
+
+```php
+$config['skin'] = 'eternity-larry';
+// or
+$config['skin'] = 'eternity-classic';
+```
+
+Both variants use their own Eternity Project logo and browser icon. They are intended for Roundcube 1.6 installations where the matching legacy base skin is available.
+
## Docker Install
### Docker Compose (persistent)
@@ -168,6 +190,18 @@ eternity-wasteland-v2/
styles/styles.css Source-theme Daylight and Wasteland visual overrides
templates/login.html Login form with the Daylight/Wasteland control
watermark.html Login background that follows ep-theme
+eternity-larry/
+ images/ Eternity Project logo and browser icon
+ meta.json Larry child-skin registration
+ styles.css Larry import and Eternity legacy UI overrides
+eternity-classic/
+ images/ Eternity Project logo and browser icon
+ common.css Classic common UI import and Eternity overrides
+ includes/links.html Classic shared asset links and browser icon
+ mail.css Classic mail stylesheet import
+ meta.json Classic child-skin registration
+ templates/login.html Classic login template with the child stylesheet
+ styles.css Compatibility entry point for manual stylesheet loading
```
`styles/styles.css` imports Elastic before applying Eternity's overrides. Do not remove the import: the base skin provides the complete component layout and image assets.
diff --git a/eternity-classic/common.css b/eternity-classic/common.css
new file mode 100644
index 0000000..991151c
--- /dev/null
+++ b/eternity-classic/common.css
@@ -0,0 +1,126 @@
+@import "../classic/common.css";
+
+:root {
+ --ink: #11212b;
+ --paper: #f1f1e9;
+ --acid: #c7ef4b;
+ --orange: #ff6b35;
+ --line: #b9c5bc;
+ --muted: #59706b;
+ --field: #fbfbf6;
+}
+
+html,
+body,
+#mainscreen,
+#layout,
+#main-menu,
+#taskbar,
+#mailboxlist,
+#messagelist,
+#messageframe {
+ background: var(--paper);
+ color: var(--ink);
+}
+
+body {
+ font-family: "Space Grotesk", "Helvetica Neue", sans-serif;
+ background-image: linear-gradient(90deg, transparent 49.5%, rgb(17 33 43 / 5%) 50%, transparent 50.5%), linear-gradient(rgb(17 33 43 / 4%) 1px, transparent 1px);
+ background-size: 70px 70px, 7px 7px;
+}
+
+a,
+#taskbar a,
+#mailboxlist li a,
+#messagelist tr td {
+ color: var(--ink);
+}
+
+a:hover,
+#taskbar a:hover,
+#mailboxlist li a:hover {
+ color: var(--orange);
+}
+
+#taskbar,
+#mailboxlist,
+#messagelist,
+#messagelist-header,
+#mailboxlist-header,
+.box,
+.boxcontent,
+.popupmenu,
+.menu,
+.toolbar {
+ border-color: var(--ink);
+ box-shadow: none;
+}
+
+#taskbar a.selected,
+#taskbar a:hover,
+#mailboxlist li.selected > a,
+#mailboxlist li a:hover,
+#messagelist tr:hover td {
+ background: var(--acid);
+ color: var(--ink);
+}
+
+#messagelist tr.selected td {
+ background: var(--ink);
+ color: var(--paper);
+}
+
+input[type="text"],
+input[type="password"],
+textarea,
+select {
+ border: 1px solid var(--ink);
+ border-radius: 0;
+ box-shadow: none;
+ background: var(--field);
+ color: var(--ink);
+}
+
+input:focus,
+textarea:focus,
+select:focus {
+ outline: 3px solid var(--acid);
+ outline-offset: 1px;
+}
+
+input[type="submit"],
+input[type="button"],
+button,
+.button,
+.toolbar .button {
+ border: 1px solid var(--ink);
+ border-radius: 0;
+ box-shadow: none;
+ background: var(--ink);
+ color: var(--paper);
+ font-family: "DM Mono", "Courier New", monospace;
+}
+
+input[type="submit"]:hover,
+input[type="button"]:hover,
+button:hover,
+.button:hover,
+.toolbar .button:hover {
+ background: var(--acid);
+ color: var(--ink);
+}
+
+#login-form,
+#login-form .boxcontent,
+#login-form .boxtitle {
+ border-color: var(--ink);
+ border-radius: 0;
+ box-shadow: none;
+ background: var(--paper);
+ color: var(--ink);
+}
+
+#login-form #logo {
+ max-width: 260px;
+ height: auto;
+}
\ No newline at end of file
diff --git a/eternity-classic/images/favicon.svg b/eternity-classic/images/favicon.svg
new file mode 100644
index 0000000..34fedf8
--- /dev/null
+++ b/eternity-classic/images/favicon.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/eternity-classic/images/logo.svg b/eternity-classic/images/logo.svg
new file mode 100644
index 0000000..bbb7338
--- /dev/null
+++ b/eternity-classic/images/logo.svg
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/eternity-classic/includes/links.html b/eternity-classic/includes/links.html
new file mode 100644
index 0000000..645adbe
--- /dev/null
+++ b/eternity-classic/includes/links.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+.css" />
+
+
+
+
\ No newline at end of file
diff --git a/eternity-classic/mail.css b/eternity-classic/mail.css
new file mode 100644
index 0000000..e1da149
--- /dev/null
+++ b/eternity-classic/mail.css
@@ -0,0 +1 @@
+@import "../classic/mail.css";
\ No newline at end of file
diff --git a/eternity-classic/meta.json b/eternity-classic/meta.json
new file mode 100644
index 0000000..ca24a71
--- /dev/null
+++ b/eternity-classic/meta.json
@@ -0,0 +1,13 @@
+{
+ "name": "Eternity Classic",
+ "author": "Eternity Project",
+ "license": "GNU Affero General Public License",
+ "version": "1.0.0",
+ "extends": "classic",
+ "localization": false,
+ "config": {
+ "product_name": "eternityproject.fi",
+ "skin_logo": "skins/eternity-classic/images/logo.svg",
+ "skin_favicon": "skins/eternity-classic/images/favicon.svg"
+ }
+}
\ No newline at end of file
diff --git a/eternity-classic/styles.css b/eternity-classic/styles.css
new file mode 100644
index 0000000..d2810a2
--- /dev/null
+++ b/eternity-classic/styles.css
@@ -0,0 +1,126 @@
+@import "common.css";
+
+:root {
+ --ink: #11212b;
+ --paper: #f1f1e9;
+ --acid: #c7ef4b;
+ --orange: #ff6b35;
+ --line: #b9c5bc;
+ --muted: #59706b;
+ --field: #fbfbf6;
+}
+
+html,
+body,
+#mainscreen,
+#layout,
+#main-menu,
+#taskbar,
+#mailboxlist,
+#messagelist,
+#messageframe {
+ background: var(--paper);
+ color: var(--ink);
+}
+
+body {
+ font-family: "Space Grotesk", "Helvetica Neue", sans-serif;
+ background-image: linear-gradient(90deg, transparent 49.5%, rgb(17 33 43 / 5%) 50%, transparent 50.5%), linear-gradient(rgb(17 33 43 / 4%) 1px, transparent 1px);
+ background-size: 70px 70px, 7px 7px;
+}
+
+a,
+#taskbar a,
+#mailboxlist li a,
+#messagelist tr td {
+ color: var(--ink);
+}
+
+a:hover,
+#taskbar a:hover,
+#mailboxlist li a:hover {
+ color: var(--orange);
+}
+
+#taskbar,
+#mailboxlist,
+#messagelist,
+#messagelist-header,
+#mailboxlist-header,
+.box,
+.boxcontent,
+.popupmenu,
+.menu,
+.toolbar {
+ border-color: var(--ink);
+ box-shadow: none;
+}
+
+#taskbar a.selected,
+#taskbar a:hover,
+#mailboxlist li.selected > a,
+#mailboxlist li a:hover,
+#messagelist tr:hover td {
+ background: var(--acid);
+ color: var(--ink);
+}
+
+#messagelist tr.selected td {
+ background: var(--ink);
+ color: var(--paper);
+}
+
+input[type="text"],
+input[type="password"],
+textarea,
+select {
+ border: 1px solid var(--ink);
+ border-radius: 0;
+ box-shadow: none;
+ background: var(--field);
+ color: var(--ink);
+}
+
+input:focus,
+textarea:focus,
+select:focus {
+ outline: 3px solid var(--acid);
+ outline-offset: 1px;
+}
+
+input[type="submit"],
+input[type="button"],
+button,
+.button,
+.toolbar .button {
+ border: 1px solid var(--ink);
+ border-radius: 0;
+ box-shadow: none;
+ background: var(--ink);
+ color: var(--paper);
+ font-family: "DM Mono", "Courier New", monospace;
+}
+
+input[type="submit"]:hover,
+input[type="button"]:hover,
+button:hover,
+.button:hover,
+.toolbar .button:hover {
+ background: var(--acid);
+ color: var(--ink);
+}
+
+#login-form,
+#login-form .boxcontent,
+#login-form .boxtitle {
+ border-color: var(--ink);
+ border-radius: 0;
+ box-shadow: none;
+ background: var(--paper);
+ color: var(--ink);
+}
+
+#login-form #logo {
+ max-width: 260px;
+ height: auto;
+}
\ No newline at end of file
diff --git a/eternity-classic/templates/login.html b/eternity-classic/templates/login.html
new file mode 100644
index 0000000..2f4292d
--- /dev/null
+++ b/eternity-classic/templates/login.html
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/eternity-larry/images/favicon.svg b/eternity-larry/images/favicon.svg
new file mode 100644
index 0000000..34fedf8
--- /dev/null
+++ b/eternity-larry/images/favicon.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/eternity-larry/images/logo.svg b/eternity-larry/images/logo.svg
new file mode 100644
index 0000000..bbb7338
--- /dev/null
+++ b/eternity-larry/images/logo.svg
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/eternity-larry/meta.json b/eternity-larry/meta.json
new file mode 100644
index 0000000..1481920
--- /dev/null
+++ b/eternity-larry/meta.json
@@ -0,0 +1,13 @@
+{
+ "name": "Eternity Larry",
+ "author": "Eternity Project",
+ "license": "GNU Affero General Public License",
+ "version": "1.0.0",
+ "extends": "larry",
+ "localization": false,
+ "config": {
+ "product_name": "eternityproject.fi",
+ "skin_logo": "skins/eternity-larry/images/logo.svg",
+ "skin_favicon": "skins/eternity-larry/images/favicon.svg"
+ }
+}
\ No newline at end of file
diff --git a/eternity-larry/styles.css b/eternity-larry/styles.css
new file mode 100644
index 0000000..d98434a
--- /dev/null
+++ b/eternity-larry/styles.css
@@ -0,0 +1,125 @@
+@import "../larry/styles.css";
+
+:root {
+ --ink: #11212b;
+ --paper: #f1f1e9;
+ --acid: #c7ef4b;
+ --orange: #ff6b35;
+ --line: #b9c5bc;
+ --muted: #59706b;
+ --field: #fbfbf6;
+}
+
+html,
+body,
+#mainscreen,
+#layout,
+#main-menu,
+#taskbar,
+#mailboxlist,
+#messagelist,
+#messageframe {
+ background: var(--paper);
+ color: var(--ink);
+}
+
+body {
+ font-family: "Space Grotesk", "Helvetica Neue", sans-serif;
+ background-image: linear-gradient(90deg, transparent 49.5%, rgb(17 33 43 / 5%) 50%, transparent 50.5%), linear-gradient(rgb(17 33 43 / 4%) 1px, transparent 1px);
+ background-size: 70px 70px, 7px 7px;
+}
+
+a,
+#taskbar a,
+#mailboxlist li a,
+#messagelist tr td {
+ color: var(--ink);
+}
+
+a:hover,
+#taskbar a:hover,
+#mailboxlist li a:hover {
+ color: var(--orange);
+}
+
+#taskbar,
+#mailboxlist,
+#messagelist,
+#messagelist-header,
+#mailboxlist-header,
+.box,
+.boxcontent,
+.popupmenu,
+.menu,
+.toolbar {
+ border-color: var(--ink);
+ box-shadow: none;
+}
+
+#taskbar a.selected,
+#taskbar a:hover,
+#mailboxlist li.selected > a,
+#mailboxlist li a:hover,
+#messagelist tr:hover td {
+ background: var(--acid);
+ color: var(--ink);
+}
+
+#messagelist tr.selected td {
+ background: var(--ink);
+ color: var(--paper);
+}
+
+input[type="text"],
+input[type="password"],
+textarea,
+select {
+ border: 1px solid var(--ink);
+ border-radius: 0;
+ box-shadow: none;
+ background: var(--field);
+ color: var(--ink);
+}
+
+input:focus,
+textarea:focus,
+select:focus {
+ outline: 3px solid var(--acid);
+ outline-offset: 1px;
+}
+
+input[type="submit"],
+input[type="button"],
+button,
+.button,
+.toolbar .button {
+ border: 1px solid var(--ink);
+ border-radius: 0;
+ box-shadow: none;
+ background: var(--ink);
+ color: var(--paper);
+ font-family: "DM Mono", "Courier New", monospace;
+}
+
+input[type="submit"]:hover,
+input[type="button"]:hover,
+button:hover,
+.button:hover,
+.toolbar .button:hover {
+ background: var(--acid);
+ color: var(--ink);
+}
+
+#login-form,
+#login-form .box-inner,
+#login-form .boxcontent {
+ border-color: var(--ink);
+ border-radius: 0;
+ box-shadow: none;
+ background: var(--paper);
+}
+
+#login-form #logo {
+ max-width: 260px;
+ height: auto;
+}
\ No newline at end of file