diff --git a/website/apps/base/templates/about.scm b/website/apps/base/templates/about.scm
index 1cf2f65..68c8815 100644
--- a/website/apps/base/templates/about.scm
+++ b/website/apps/base/templates/about.scm
@@ -26,7 +26,7 @@
 system|GNU Hurd|GNU Guix package manager") #\|)
    #:active-menu-item (C_ "website menu" "About")
    #:css (list
-	  (guix-url "static/base/css/page.css"))
+	  (theme-url "css/page.css"))
    #:crumbs (list (crumb (C_ "website menu" "About") "./"))
    #:content
    `(main
diff --git a/website/apps/base/templates/components.scm b/website/apps/base/templates/components.scm
index 2a6881e..82f3b85 100644
--- a/website/apps/base/templates/components.scm
+++ b/website/apps/base/templates/components.scm
@@ -179,8 +179,8 @@
   `(img
     (@ (class "h-separator")
        ,(if light
-	    `(src ,(guix-url "static/base/img/h-separator.png"))
-	    `(src ,(guix-url "static/base/img/h-separator-dark.png")))
+	    `(src ,(theme-url "img/h-separator.png"))
+	    `(src ,(theme-url "img/h-separator-dark.png")))
        (alt ""))))
 
 (define (horizontal-skip)
@@ -191,7 +191,7 @@
   "Return SHTML for a visible separator to be used in a dropdown menu
 like a menu item."
   `(img (@ (class "hline")
-           (src ,(guix-url "static/base/img/h-separator.png"))
+           (src ,(theme-url "img/h-separator.png"))
            (alt ""))))
 
 
diff --git a/website/apps/base/templates/contact.scm b/website/apps/base/templates/contact.scm
index 49d8393..33d4abf 100644
--- a/website/apps/base/templates/contact.scm
+++ b/website/apps/base/templates/contact.scm
@@ -25,9 +25,9 @@ system|GNU Hurd|GNU Guix package manager|Community|Mailing lists|IRC \
 channels|Bug reports|Help") #\|)
    #:active-menu-item (C_ "website menu" "About")
    #:css (list
-	  (guix-url "static/base/css/page.css")
-          (guix-url "static/base/css/buttons.css")
-	  (guix-url "static/base/css/contact.css"))
+	  (theme-url "css/page.css")
+          (theme-url "css/buttons.css")
+	  (theme-url "css/contact.css"))
    #:crumbs (list (crumb (C_ "website menu" "Contact") "./"))
    #:content
    `(main
diff --git a/website/apps/base/templates/contribute.scm b/website/apps/base/templates/contribute.scm
index 42ffcb9..703267f 100644
--- a/website/apps/base/templates/contribute.scm
+++ b/website/apps/base/templates/contribute.scm
@@ -25,8 +25,8 @@ system|GNU Hurd|GNU Guix package manager|Volunteer|Development|\
 Translation|I18N|L10N|Artwork") #\|)
    #:active-menu-item (C_ "website menu" "About")
    #:css (list
-	  (guix-url "static/base/css/page.css")
-	  (guix-url "static/base/css/item-preview.css"))
+	  (theme-url "css/page.css")
+	  (theme-url "css/item-preview.css"))
    #:crumbs (list (crumb (C_ "website menu" "Contribute") "./"))
    #:content
    `(main
diff --git a/website/apps/base/templates/cuirass.scm b/website/apps/base/templates/cuirass.scm
index 00fe4b9..b421530 100644
--- a/website/apps/base/templates/cuirass.scm
+++ b/website/apps/base/templates/cuirass.scm
@@ -21,7 +21,7 @@
     (G_ "GNU|Linux|Unix|Free software|Libre software|Operating \
 system|GNU Guix package manager|Cuirass|CI") #\|)
    #:css (list
-          (guix-url "static/base/css/page.css"))
+          (theme-url "css/page.css"))
    #:content
    `(main
      (section
diff --git a/website/apps/base/templates/donate.scm b/website/apps/base/templates/donate.scm
index 5257a57..0a7d796 100644
--- a/website/apps/base/templates/donate.scm
+++ b/website/apps/base/templates/donate.scm
@@ -25,7 +25,7 @@
 system|GNU Hurd|GNU Guix package manager|Donations") #\|)
    #:active-menu-item (C_ "website menu" "Donate")
    #:css (list
-	  (guix-url "static/base/css/page.css"))
+	  (theme-url "css/page.css"))
    #:crumbs (list (crumb (C_ "website menu" "Donate") "./"))
    #:content
    `(main
diff --git a/website/apps/base/templates/graphics.scm b/website/apps/base/templates/graphics.scm
index befbb19..97bfe53 100644
--- a/website/apps/base/templates/graphics.scm
+++ b/website/apps/base/templates/graphics.scm
@@ -23,7 +23,7 @@
 system|GNU Hurd|GNU Guix package manager|Donations|Branding|Logo") #\|)
    #:active-menu-item (C_ "website menu" "About")
    #:css (list
-	  (guix-url "static/base/css/page.css"))
+	  (theme-url "css/page.css"))
    #:crumbs (list (crumb (C_ "website menu" "Graphics") "./"))
    #:content
    `(main
@@ -40,7 +40,7 @@ system|GNU Hurd|GNU Guix package manager|Donations|Branding|Logo") #\|)
           "."))
       (p
        (@ (class "centered-text"))
-       (img (@ (src ,(guix-url "static/base/img/Guix.png"))
+       (img (@ (src ,(theme-url "img/Guix.png"))
                ,(G_ `(alt "GNU Guix logotype")))))
       ,(G_
         `(p
diff --git a/website/apps/base/templates/help.scm b/website/apps/base/templates/help.scm
index 98bba39..4cacf49 100644
--- a/website/apps/base/templates/help.scm
+++ b/website/apps/base/templates/help.scm
@@ -27,8 +27,8 @@
 system|GNU Hurd|GNU Guix package manager|Help resources") #\|)
    #:active-menu-item (C_ "website menu" "Help")
    #:css (list
-	  (guix-url "static/base/css/page.css")
-	  (guix-url "static/base/css/item-preview.css"))
+	  (theme-url "css/page.css")
+	  (theme-url "css/item-preview.css"))
    #:crumbs (list (crumb (C_ "website menu" "Help") "./"))
    #:content
    `(main
@@ -43,7 +43,7 @@ system|GNU Hurd|GNU Guix package manager|Help resources") #\|)
        (div
 	(@ (class "summary-box"))
 	(img
-	 (@ (src ,(guix-url "static/base/img/manual-icon.png"))
+	 (@ (src ,(theme-url "img/manual-icon.png"))
 	    (alt "")))
         ,(G_ `(h3 "GNU Guix Manual " ,(latest-guix-version) ""))
         ,(G_
@@ -71,7 +71,7 @@ system|GNU Hurd|GNU Guix package manager|Help resources") #\|)
        (div
 	(@ (class "summary-box"))
 	(img
-	 (@ (src ,(guix-url "static/base/img/manual-latest-icon.png"))
+	 (@ (src ,(theme-url "img/manual-latest-icon.png"))
 	    (alt "")))
         ,(G_ `(h3 "GNU Guix Manual (Latest)"))
         ,(G_
@@ -86,7 +86,7 @@ system|GNU Hurd|GNU Guix package manager|Help resources") #\|)
 
        (div
         (@ (class "summary-box"))
-        (img (@ (src ,(guix-url "static/base/img/videos-icon.png"))
+        (img (@ (src ,(theme-url "img/videos-icon.png"))
                 (alt "")))
         ,(G_ `(h3 "Videos"))
         ,(G_
@@ -103,7 +103,7 @@ system|GNU Hurd|GNU Guix package manager|Help resources") #\|)
 
        (div
         (@ (class "summary-box"))
-        (img (@ (src ,(guix-url "static/base/img/cookbook-icon.png"))
+        (img (@ (src ,(theme-url "img/cookbook-icon.png"))
                 (alt "")))
         ,(G_ `(h3 "Cookbook"))
         ,(G_
@@ -120,7 +120,7 @@ system|GNU Hurd|GNU Guix package manager|Help resources") #\|)
 
        (div
 	(@ (class "summary-box"))
-	(img (@ (src ,(guix-url "static/base/img/library-icon.png"))
+	(img (@ (src ,(theme-url "img/library-icon.png"))
 		(alt "")))
         ,(G_ `(h3 "GNU Manuals"))
         ,(G_
@@ -137,7 +137,7 @@ system|GNU Hurd|GNU Guix package manager|Help resources") #\|)
 
        (div
 	(@ (class "summary-box"))
-	(img (@ (src ,(guix-url "static/base/img/wiki-icon.png"))
+	(img (@ (src ,(theme-url "img/wiki-icon.png"))
 		(alt "")))
         ,(G_ `(h3 "Wiki"))
         ,(G_
@@ -155,7 +155,7 @@ system|GNU Hurd|GNU Guix package manager|Help resources") #\|)
 
        (div
 	(@ (class "summary-box"))
-	(img (@ (src ,(guix-url "static/base/img/chat-icon.png"))
+	(img (@ (src ,(theme-url "img/chat-icon.png"))
 		(alt "")))
         ,(G_ `(h3 "IRC Chat"))
         ,(G_
@@ -176,7 +176,7 @@ system|GNU Hurd|GNU Guix package manager|Help resources") #\|)
 
        (div
 	(@ (class "summary-box"))
-	(img (@ (src ,(guix-url "static/base/img/email-icon.png"))
+	(img (@ (src ,(theme-url "img/email-icon.png"))
 		(alt "")))
         ,(G_ `(h3 "Mailing lists"))
         ,(G_
diff --git a/website/apps/base/templates/home.scm b/website/apps/base/templates/home.scm
index adddd91..aa1fbb5 100644
--- a/website/apps/base/templates/home.scm
+++ b/website/apps/base/templates/home.scm
@@ -32,9 +32,9 @@ Scheme|Transactional upgrades|Functional package \
 management|Reproducibility") #\|)
    #:active-menu-item (C_ "website menu" "Overview")
    #:css (list
-	  (guix-url "static/base/css/item-preview.css")
-	  (guix-url "static/base/css/index.css")
-          (guix-url "static/media/css/video-preview.css"))
+	  (theme-url "css/item-preview.css")
+	  (theme-url "css/index.css")
+          (theme-url "css/video-preview.css"))
    #:content
    `(main
      ;; Featured content.
diff --git a/website/apps/base/templates/irc.scm b/website/apps/base/templates/irc.scm
index 13b501f..05dc87a 100644
--- a/website/apps/base/templates/irc.scm
+++ b/website/apps/base/templates/irc.scm
@@ -23,7 +23,7 @@
     (G_ "GNU|Linux|Unix|Free software|Libre software|Operating \
 system|GNU Hurd|GNU Guix package manager|IRC|chat") #\|)
    #:active-menu-item "About"
-   #:css (list (guix-url "static/base/css/page.css"))
+   #:css (list (theme-url "css/page.css"))
    #:crumbs (list (crumb (C_ "webpage title" "Contact") (guix-url "contact/"))
 		  (crumb (C_ "webpage title" "IRC") "./"))
    #:content
diff --git a/website/apps/base/templates/menu.scm b/website/apps/base/templates/menu.scm
index 5b245f8..db17fc2 100644
--- a/website/apps/base/templates/menu.scm
+++ b/website/apps/base/templates/menu.scm
@@ -22,4 +22,4 @@ system|GNU Hurd|GNU Guix package manager|GNU Guile|Guile \
 Scheme|Transactional upgrades|Functional package \
 management|Reproducibility") #\|)
    #:active-menu-item (C_ "website menu" "Menu")
-   #:css (list (guix-url "static/base/css/menu.css"))))
+   #:css (list (theme-url "css/menu.css"))))
diff --git a/website/apps/base/templates/security.scm b/website/apps/base/templates/security.scm
index 8a72950..09dc5dc 100644
--- a/website/apps/base/templates/security.scm
+++ b/website/apps/base/templates/security.scm
@@ -30,7 +30,7 @@
 system|GNU Hurd|GNU Guix package manager|Security updates") #\|)
    #:active-menu-item (C_ "website menu" "About")
    #:css (list
-	  (guix-url "static/base/css/page.css"))
+	  (theme-url "css/page.css"))
    #:crumbs (list (crumb (C_ "website menu" "Security") "./"))
    #:content
    `(main
diff --git a/website/apps/base/templates/theme.scm b/website/apps/base/templates/theme.scm
index 5f5416f..d410fdc5 100644
--- a/website/apps/base/templates/theme.scm
+++ b/website/apps/base/templates/theme.scm
@@ -93,13 +93,13 @@
       ;; Menu prefetch.
       (link (@ (rel "prefetch") (href ,(guix-url "menu/index.html"))))
       ;; Base CSS.
-      (link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/elements.css"))))
-      (link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/common.css"))))
-      (link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/messages.css"))))
-      (link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/navbar.css"))))
-      (link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/breadcrumbs.css"))))
-      (link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/buttons.css"))))
-      (link (@ (rel "stylesheet") (href ,(guix-url "static/base/css/footer.css"))))
+      (link (@ (rel "stylesheet") (href ,(theme-url "css/elements.css"))))
+      (link (@ (rel "stylesheet") (href ,(theme-url "css/common.css"))))
+      (link (@ (rel "stylesheet") (href ,(theme-url "css/messages.css"))))
+      (link (@ (rel "stylesheet") (href ,(theme-url "css/navbar.css"))))
+      (link (@ (rel "stylesheet") (href ,(theme-url "css/breadcrumbs.css"))))
+      (link (@ (rel "stylesheet") (href ,(theme-url "css/buttons.css"))))
+      (link (@ (rel "stylesheet") (href ,(theme-url "css/footer.css"))))
       ;; Additional CSS.
       ,@(map (lambda (style-sheet)
 	       `(link (@ (rel "stylesheet") (href ,style-sheet))))
@@ -109,9 +109,9 @@
                (title ,(C_ "webpage title" "GNU Guix — Activity Feed"))
 	       (href ,(guix-url "feeds/blog.atom"))))
       (link (@ (rel "icon") (type "image/png")
-	       (href ,(guix-url "static/base/img/icon.png"))))
+	       (href ,(theme-url "img/icon.png"))))
       (link (@ (rel "icon") (type "image/svg+xml") (sizes "any")
-	       (href ,(guix-url "static/base/img/icon.svg"))))
+	       (href ,(theme-url "img/icon.svg"))))
       ;; Additional scripts.
       ,@(map (lambda (script)
 	       `(script (@ (src ,script)) ""))
diff --git a/website/apps/base/utils.scm b/website/apps/base/utils.scm
index bb520be..37ac434 100644
--- a/website/apps/base/utils.scm
+++ b/website/apps/base/utils.scm
@@ -42,7 +42,8 @@
             manual-url-with-language
 	    number*
 	    paginate
-            packages-url))
+            packages-url
+            theme-url))
 
 
 ;;;
@@ -65,6 +66,8 @@
            path
            (string-append path "/"))))))
 
+(define guix-website-theme "initial")  ; See "themes" directory.
+
 (define latest-guix-version
   (make-parameter "1.4.0"))
 
@@ -184,6 +187,21 @@ manual.
      A URL. For example: https://packages.guix.gnu.org/packages/guile/."
   (string-append "https://packages.guix.gnu.org/" path))
 
+(define (theme-url subpath)
+  "Return the URL to a given resource provided by the current website
+   theme (see 'guix-website-theme' variable).
+
+   SUBPATH (string)
+     Relative URL path to the resource. For example: 'css/buttons.css'.
+
+   RETURN VALUE (string)
+     Complete URL to the resource. For example:
+     'https://guix.gnu.org/themes/abc/css/buttons.css'."
+  (string-append (guix-root-url-path)
+                 "themes" "/"
+                 guix-website-theme "/"
+                 subpath))
+
 
 
 ;;;
diff --git a/website/apps/blog/templates/feed.scm b/website/apps/blog/templates/feed.scm
index 0702318..8284626 100644
--- a/website/apps/blog/templates/feed.scm
+++ b/website/apps/blog/templates/feed.scm
@@ -30,7 +30,7 @@
       (id ,id)
       (title ,title)
       (author (name (C_ "feed author name" "GNU Guix")) (uri ,domain))
-      (icon ,(guix-url "static/base/img/icon.png"))
+      (icon ,(theme-url "img/icon.png"))
       (updated ,(date->string (current-date) "~4"))
       (link (@ (rel "alternate") (href ,alternate)))
 
diff --git a/website/apps/blog/templates/post-list.scm b/website/apps/blog/templates/post-list.scm
index acffce1..6bf81d1 100644
--- a/website/apps/blog/templates/post-list.scm
+++ b/website/apps/blog/templates/post-list.scm
@@ -33,9 +33,9 @@ management|Reproducibility") #\|)
      #:index? #false
      #:active-menu-item (C_ "website menu" "Blog")
      #:css
-     (list (guix-url "static/base/css/page.css")
-	   (guix-url "static/base/css/item-preview.css")
-	   (guix-url "static/base/css/sidebar.css"))
+     (list (theme-url "css/page.css")
+	   (theme-url "css/item-preview.css")
+	   (theme-url "css/sidebar.css"))
      #:crumbs
      (list (crumb (C_ "website menu" "Blog") (guix-url "blog/"))
            (crumb (G_ (string-append "Page " page-number ""))
diff --git a/website/apps/blog/templates/post.scm b/website/apps/blog/templates/post.scm
index 0e6ad0d..5183d5b 100644
--- a/website/apps/blog/templates/post.scm
+++ b/website/apps/blog/templates/post.scm
@@ -29,9 +29,9 @@
      #:keywords tags
      #:active-menu-item (C_ "website menu" "Blog")
      #:css
-     (list (guix-url "static/base/css/page.css")
-	   (guix-url "static/base/css/code.css")
-	   (guix-url "static/blog/css/post.css"))
+     (list (theme-url "css/page.css")
+	   (theme-url "css/code.css")
+	   (theme-url "css/post.css"))
      #:crumbs
      (list (crumb (C_ "website menu" "Blog") (guix-url "blog/"))
 	   (crumb (post-ref post 'title)
diff --git a/website/apps/blog/templates/tag.scm b/website/apps/blog/templates/tag.scm
index 0145e63..92b9ee3 100644
--- a/website/apps/blog/templates/tag.scm
+++ b/website/apps/blog/templates/tag.scm
@@ -37,9 +37,9 @@ management|Reproducibility") #\|)
      #:index? #false
      #:active-menu-item (C_ "website menu" "Blog")
      #:css
-     (list (guix-url "static/base/css/page.css")
-	   (guix-url "static/base/css/item-preview.css")
-	   (guix-url "static/base/css/sidebar.css"))
+     (list (theme-url "css/page.css")
+	   (theme-url "css/item-preview.css")
+	   (theme-url "css/sidebar.css"))
      #:crumbs
      (list (crumb (C_ "website menu" "Blog") (guix-url "blog/"))
 	   (crumb tag (guix-url (tag-url-path tag)))
diff --git a/website/apps/download/templates/download-latest.scm b/website/apps/download/templates/download-latest.scm
index cdcecb7..87e3cfa 100644
--- a/website/apps/download/templates/download-latest.scm
+++ b/website/apps/download/templates/download-latest.scm
@@ -155,8 +155,8 @@ system|GNU Hurd|GNU Guix package manager|Installer|Source code|\
 Package manager") #\|)
    #:active-menu-item (C_ "website menu" "Download")
    #:css (list
-          (guix-url "static/base/css/page.css")
-          (guix-url "static/base/css/download.css"))
+          (theme-url "css/page.css")
+          (theme-url "css/download.css"))
    #:crumbs
    (list (crumb (C_ "website menu" "Download") (guix-url "download/"))
          (crumb (C_ "website menu" "Latest") "./"))
diff --git a/website/apps/download/templates/download.scm b/website/apps/download/templates/download.scm
index 4ee8e3b..58500b4 100644
--- a/website/apps/download/templates/download.scm
+++ b/website/apps/download/templates/download.scm
@@ -42,8 +42,8 @@ system|GNU Hurd|GNU Guix package manager|Installer|Source code|\
 Package manager") #\|)
    #:active-menu-item (C_ "website menu" "Download")
    #:css (list
-	  (guix-url "static/base/css/page.css")
-	  (guix-url "static/base/css/download.css"))
+	  (theme-url "css/page.css")
+	  (theme-url "css/download.css"))
    #:crumbs (list (crumb (C_ "website menu" "Download") "./"))
    #:content
    `(main
diff --git a/website/apps/media/templates/components.scm b/website/apps/media/templates/components.scm
index 8bedc9f..2c0f551 100644
--- a/website/apps/media/templates/components.scm
+++ b/website/apps/media/templates/components.scm
@@ -61,7 +61,7 @@
        (@ (class "playlist-title"))
 
        (img (@ (class "playlist-icon")
-               (src ,(guix-url "static/media/img/playlist-icon.svg"))
+               (src ,(theme-url "img/playlist-icon.svg"))
                (alt ,(G_ "Playlist: "))
                (title ,(G_ "Playlist"))))
        " "
@@ -94,7 +94,7 @@
        ,(if (publication-scientific? publication)
             `((img
                (@ (class "scientific-mark")
-                  (src ,(guix-url "static/media/img/scientific-mark.svg"))
+                  (src ,(theme-url "img/scientific-mark.svg"))
                   ;; TRANSLATORS: This is a tag that indicates a
                   ;; publication is scientific.
                   (alt ,(G_ "[Scientific]"))
@@ -182,7 +182,7 @@ top."
 
        ,(if playing?
             `((img (@ (class "playing-icon")
-                      (src ,(guix-url "static/media/img/playing-icon.svg"))
+                      (src ,(theme-url "img/playing-icon.svg"))
 
                       (alt
                        ;; TRANSLATORS: Alternative text indicating that
diff --git a/website/apps/media/templates/publication-list.scm b/website/apps/media/templates/publication-list.scm
index bcc5744..2ef666a 100644
--- a/website/apps/media/templates/publication-list.scm
+++ b/website/apps/media/templates/publication-list.scm
@@ -27,8 +27,8 @@
    (string-split (G_ "Publications|Papers") #\|)
    #:active-menu-item (C_ "website menu" "Publications")
    #:css (list
-	  (guix-url "static/base/css/page.css")
-	  (guix-url "static/media/css/publications.css"))
+	  (theme-url "css/page.css")
+	  (theme-url "css/publications.css"))
    #:crumbs (list (crumb (C_ "website menu" "Publications") "./"))
    #:content
    `(main
diff --git a/website/apps/media/templates/screenshot.scm b/website/apps/media/templates/screenshot.scm
index b2d42b8..a942ef6 100644
--- a/website/apps/media/templates/screenshot.scm
+++ b/website/apps/media/templates/screenshot.scm
@@ -26,8 +26,8 @@ system|GNU Hurd|GNU Guix package manager|GNU Guile|Guile \
 Scheme|Transactional upgrades|Functional package \
 management|Reproducibility") #\|)
      #:active-menu-item (C_ "website menu" "Media")
-     #:css (list (guix-url "static/base/css/index.css")
-                 (guix-url "static/media/css/screenshots.css"))
+     #:css (list (theme-url "css/index.css")
+                 (theme-url "css/screenshots.css"))
      #:content
      `(main
        (section
diff --git a/website/apps/media/templates/screenshots-overview.scm b/website/apps/media/templates/screenshots-overview.scm
index 04a9fc6..7663ad9 100644
--- a/website/apps/media/templates/screenshots-overview.scm
+++ b/website/apps/media/templates/screenshots-overview.scm
@@ -23,7 +23,7 @@ system|GNU Hurd|GNU Guix package manager|GNU Guile|Guile \
 Scheme|Transactional upgrades|Functional package \
 management|Reproducibility") #\|)
    #:active-menu-item (C_ "website menu" "Media")
-   #:css (list (guix-url "static/base/css/index.css"))
+   #:css (list (theme-url "css/index.css"))
    #:content
    `(main
      (section
diff --git a/website/apps/media/templates/video-list.scm b/website/apps/media/templates/video-list.scm
index 676abba..91e56fe 100644
--- a/website/apps/media/templates/video-list.scm
+++ b/website/apps/media/templates/video-list.scm
@@ -33,8 +33,8 @@
 system|GNU Hurd|GNU Guix package manager|Help resources|Videos") #\|)
      #:active-menu-item (C_ "website menu" "Videos")
      #:css (list
-            (guix-url "static/media/css/video-list.css")
-            (guix-url "static/media/css/video-preview.css"))
+            (theme-url "css/video-list.css")
+            (theme-url "css/video-preview.css"))
      #:crumbs (list (crumb (C_ "website menu" "Videos") (guix-url "videos/")))
      #:content
      `(main
diff --git a/website/apps/media/templates/video.scm b/website/apps/media/templates/video.scm
index cb74207..8bb76f9 100644
--- a/website/apps/media/templates/video.scm
+++ b/website/apps/media/templates/video.scm
@@ -45,8 +45,8 @@
 system|GNU Hurd|GNU Guix package manager|Help resources|Videos") #\|)
      #:active-menu-item (C_ "website menu" "Videos")
      #:css (list
-            (guix-url "static/media/css/video.css")
-            (guix-url "static/media/css/video-preview.css"))
+            (theme-url "css/video.css")
+            (theme-url "css/video-preview.css"))
      #:crumbs (list (crumb (C_ "website menu" "Videos") (guix-url "videos/"))
                     (crumb (video-title video) "./"))
      #:content
diff --git a/website/haunt.scm b/website/haunt.scm
index 455bdc8..34f69cc 100644
--- a/website/haunt.scm
+++ b/website/haunt.scm
@@ -24,4 +24,5 @@
                         blog:builder
                         download:builder
                         media:builder
+                        (static-directory "themes")
                         (static-directory "static"))))
diff --git a/website/static/base/img/GuixSD-logo.png b/website/static/base/img/GuixSD-logo.png
deleted file mode 100644
index 4e520dbf1a21d9c90990758305e57ad5d3201e4b..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/website/themes/README.org b/website/themes/README.org
new file mode 100644
index 0000000..7f477d0
--- /dev/null
+++ b/website/themes/README.org
@@ -0,0 +1,6 @@
+#+TITLE: Themes
+
+This directory contains themes for Guix websites and other themable
+artifacts. Themes are folders containing style sheets, fonts, images,
+and other assets that define the visual, aural and haptic identity of
+the artifacts.
diff --git a/website/static/base/css/breadcrumbs.css b/website/themes/initial/css/breadcrumbs.css
similarity index 100%
rename from website/static/base/css/breadcrumbs.css
rename to website/themes/initial/css/breadcrumbs.css
diff --git a/website/static/base/css/buttons.css b/website/themes/initial/css/buttons.css
similarity index 100%
rename from website/static/base/css/buttons.css
rename to website/themes/initial/css/buttons.css
diff --git a/website/static/base/css/code.css b/website/themes/initial/css/code.css
similarity index 100%
rename from website/static/base/css/code.css
rename to website/themes/initial/css/code.css
diff --git a/website/static/base/css/common.css b/website/themes/initial/css/common.css
similarity index 100%
rename from website/static/base/css/common.css
rename to website/themes/initial/css/common.css
diff --git a/website/static/base/css/contact.css b/website/themes/initial/css/contact.css
similarity index 100%
rename from website/static/base/css/contact.css
rename to website/themes/initial/css/contact.css
diff --git a/website/static/base/css/download.css b/website/themes/initial/css/download.css
similarity index 100%
rename from website/static/base/css/download.css
rename to website/themes/initial/css/download.css
diff --git a/website/static/base/css/elements.css b/website/themes/initial/css/elements.css
similarity index 100%
rename from website/static/base/css/elements.css
rename to website/themes/initial/css/elements.css
diff --git a/website/static/base/css/footer.css b/website/themes/initial/css/footer.css
similarity index 100%
rename from website/static/base/css/footer.css
rename to website/themes/initial/css/footer.css
diff --git a/website/static/base/css/index.css b/website/themes/initial/css/index.css
similarity index 100%
rename from website/static/base/css/index.css
rename to website/themes/initial/css/index.css
diff --git a/website/static/base/css/item-preview.css b/website/themes/initial/css/item-preview.css
similarity index 100%
rename from website/static/base/css/item-preview.css
rename to website/themes/initial/css/item-preview.css
diff --git a/website/static/packages/css/letter-selector.css b/website/themes/initial/css/letter-selector.css
similarity index 100%
rename from website/static/packages/css/letter-selector.css
rename to website/themes/initial/css/letter-selector.css
diff --git a/website/static/base/css/manual.css b/website/themes/initial/css/manual.css
similarity index 100%
rename from website/static/base/css/manual.css
rename to website/themes/initial/css/manual.css
diff --git a/website/static/base/css/menu.css b/website/themes/initial/css/menu.css
similarity index 100%
rename from website/static/base/css/menu.css
rename to website/themes/initial/css/menu.css
diff --git a/website/static/base/css/messages.css b/website/themes/initial/css/messages.css
similarity index 100%
rename from website/static/base/css/messages.css
rename to website/themes/initial/css/messages.css
diff --git a/website/static/base/css/navbar.css b/website/themes/initial/css/navbar.css
similarity index 100%
rename from website/static/base/css/navbar.css
rename to website/themes/initial/css/navbar.css
diff --git a/website/static/packages/css/package-list.css b/website/themes/initial/css/package-list.css
similarity index 100%
rename from website/static/packages/css/package-list.css
rename to website/themes/initial/css/package-list.css
diff --git a/website/static/packages/css/package.css b/website/themes/initial/css/package.css
similarity index 100%
rename from website/static/packages/css/package.css
rename to website/themes/initial/css/package.css
diff --git a/website/static/base/css/page.css b/website/themes/initial/css/page.css
similarity index 100%
rename from website/static/base/css/page.css
rename to website/themes/initial/css/page.css
diff --git a/website/static/blog/css/post.css b/website/themes/initial/css/post.css
similarity index 100%
rename from website/static/blog/css/post.css
rename to website/themes/initial/css/post.css
diff --git a/website/static/media/css/publications.css b/website/themes/initial/css/publications.css
similarity index 92%
rename from website/static/media/css/publications.css
rename to website/themes/initial/css/publications.css
index 11a8542..a4d8abe 100644
--- a/website/static/media/css/publications.css
+++ b/website/themes/initial/css/publications.css
@@ -18,7 +18,7 @@
 .publication-preview:focus,
 .publication-preview:hover {
     background-color: gold;
-    background-image: url("/static/base/img/link-arrow-shaper.svg");
+    background-image: url("/themes/initial/img/link-arrow-shaper.svg");
     background-position: right;
     background-repeat: no-repeat;
     background-size: auto 100%;
diff --git a/website/static/media/css/screenshots.css b/website/themes/initial/css/screenshots.css
similarity index 100%
rename from website/static/media/css/screenshots.css
rename to website/themes/initial/css/screenshots.css
diff --git a/website/static/base/css/sidebar.css b/website/themes/initial/css/sidebar.css
similarity index 96%
rename from website/static/base/css/sidebar.css
rename to website/themes/initial/css/sidebar.css
index 12ed90e..c3c278b 100644
--- a/website/static/base/css/sidebar.css
+++ b/website/themes/initial/css/sidebar.css
@@ -55,7 +55,7 @@
 }
 
 .feed-link {
-    background-image: url("/static/base/img/feed-bg-white.png");
+    background-image: url("/themes/initial/img/feed-bg-white.png");
     background-position: bottom left;
     background-repeat: no-repeat;
 }
diff --git a/website/static/media/css/video-list.css b/website/themes/initial/css/video-list.css
similarity index 100%
rename from website/static/media/css/video-list.css
rename to website/themes/initial/css/video-list.css
diff --git a/website/static/media/css/video-preview.css b/website/themes/initial/css/video-preview.css
similarity index 100%
rename from website/static/media/css/video-preview.css
rename to website/themes/initial/css/video-preview.css
diff --git a/website/static/media/css/video.css b/website/themes/initial/css/video.css
similarity index 100%
rename from website/static/media/css/video.css
rename to website/themes/initial/css/video.css
diff --git a/website/static/base/img/Guix-logo.png b/website/themes/initial/img/Guix-logo.png
similarity index 100%
rename from website/static/base/img/Guix-logo.png
rename to website/themes/initial/img/Guix-logo.png
diff --git a/website/static/base/img/Guix.png b/website/themes/initial/img/Guix.png
similarity index 100%
rename from website/static/base/img/Guix.png
rename to website/themes/initial/img/Guix.png
diff --git a/website/static/base/img/back-btn-bg.png b/website/themes/initial/img/back-btn-bg.png
similarity index 100%
rename from website/static/base/img/back-btn-bg.png
rename to website/themes/initial/img/back-btn-bg.png
diff --git a/website/static/base/img/breadcrumbs-bg.png b/website/themes/initial/img/breadcrumbs-bg.png
similarity index 100%
rename from website/static/base/img/breadcrumbs-bg.png
rename to website/themes/initial/img/breadcrumbs-bg.png
diff --git a/website/static/base/img/chat-icon.png b/website/themes/initial/img/chat-icon.png
similarity index 100%
rename from website/static/base/img/chat-icon.png
rename to website/themes/initial/img/chat-icon.png
diff --git a/website/static/base/img/checkerboard-bg.png b/website/themes/initial/img/checkerboard-bg.png
similarity index 100%
rename from website/static/base/img/checkerboard-bg.png
rename to website/themes/initial/img/checkerboard-bg.png
diff --git a/website/static/base/img/cookbook-icon.png b/website/themes/initial/img/cookbook-icon.png
similarity index 100%
rename from website/static/base/img/cookbook-icon.png
rename to website/themes/initial/img/cookbook-icon.png
diff --git a/website/static/base/img/depression-shadow-top.png b/website/themes/initial/img/depression-shadow-top.png
similarity index 100%
rename from website/static/base/img/depression-shadow-top.png
rename to website/themes/initial/img/depression-shadow-top.png
diff --git a/website/static/base/img/dropdown-bg.png b/website/themes/initial/img/dropdown-bg.png
similarity index 100%
rename from website/static/base/img/dropdown-bg.png
rename to website/themes/initial/img/dropdown-bg.png
diff --git a/website/static/base/img/email-icon.png b/website/themes/initial/img/email-icon.png
similarity index 100%
rename from website/static/base/img/email-icon.png
rename to website/themes/initial/img/email-icon.png
diff --git a/website/static/base/img/featured-box-bg.png b/website/themes/initial/img/featured-box-bg.png
similarity index 100%
rename from website/static/base/img/featured-box-bg.png
rename to website/themes/initial/img/featured-box-bg.png
diff --git a/website/static/base/img/feed-bg-white.png b/website/themes/initial/img/feed-bg-white.png
similarity index 100%
rename from website/static/base/img/feed-bg-white.png
rename to website/themes/initial/img/feed-bg-white.png
diff --git a/website/static/base/img/feed.png b/website/themes/initial/img/feed.png
similarity index 100%
rename from website/static/base/img/feed.png
rename to website/themes/initial/img/feed.png
diff --git a/website/static/base/img/feed.svg b/website/themes/initial/img/feed.svg
similarity index 100%
rename from website/static/base/img/feed.svg
rename to website/themes/initial/img/feed.svg
diff --git a/website/static/base/img/h-separator-dark.png b/website/themes/initial/img/h-separator-dark.png
similarity index 100%
rename from website/static/base/img/h-separator-dark.png
rename to website/themes/initial/img/h-separator-dark.png
diff --git a/website/static/base/img/h-separator.png b/website/themes/initial/img/h-separator.png
similarity index 100%
rename from website/static/base/img/h-separator.png
rename to website/themes/initial/img/h-separator.png
diff --git a/website/static/base/img/icon-set.svg b/website/themes/initial/img/icon-set.svg
similarity index 100%
rename from website/static/base/img/icon-set.svg
rename to website/themes/initial/img/icon-set.svg
diff --git a/website/static/base/img/icon.png b/website/themes/initial/img/icon.png
similarity index 100%
rename from website/static/base/img/icon.png
rename to website/themes/initial/img/icon.png
diff --git a/website/static/base/img/icon.svg b/website/themes/initial/img/icon.svg
similarity index 100%
rename from website/static/base/img/icon.svg
rename to website/themes/initial/img/icon.svg
diff --git a/website/static/base/img/language-picker.svg b/website/themes/initial/img/language-picker.svg
similarity index 100%
rename from website/static/base/img/language-picker.svg
rename to website/themes/initial/img/language-picker.svg
diff --git a/website/static/base/img/library-icon.png b/website/themes/initial/img/library-icon.png
similarity index 100%
rename from website/static/base/img/library-icon.png
rename to website/themes/initial/img/library-icon.png
diff --git a/website/static/base/img/link-arrow-shaper.svg b/website/themes/initial/img/link-arrow-shaper.svg
similarity index 100%
rename from website/static/base/img/link-arrow-shaper.svg
rename to website/themes/initial/img/link-arrow-shaper.svg
diff --git a/website/static/base/img/link-arrow.png b/website/themes/initial/img/link-arrow.png
similarity index 100%
rename from website/static/base/img/link-arrow.png
rename to website/themes/initial/img/link-arrow.png
diff --git a/website/static/base/img/manual-icon.png b/website/themes/initial/img/manual-icon.png
similarity index 100%
rename from website/static/base/img/manual-icon.png
rename to website/themes/initial/img/manual-icon.png
diff --git a/website/static/base/img/manual-latest-icon.png b/website/themes/initial/img/manual-latest-icon.png
similarity index 100%
rename from website/static/base/img/manual-latest-icon.png
rename to website/themes/initial/img/manual-latest-icon.png
diff --git a/website/static/base/img/menu-btn-bg.png b/website/themes/initial/img/menu-btn-bg.png
similarity index 100%
rename from website/static/base/img/menu-btn-bg.png
rename to website/themes/initial/img/menu-btn-bg.png
diff --git a/website/static/base/img/menu-item-active-bg.png b/website/themes/initial/img/menu-item-active-bg.png
similarity index 100%
rename from website/static/base/img/menu-item-active-bg.png
rename to website/themes/initial/img/menu-item-active-bg.png
diff --git a/website/static/base/img/more-info-bg.png b/website/themes/initial/img/more-info-bg.png
similarity index 100%
rename from website/static/base/img/more-info-bg.png
rename to website/themes/initial/img/more-info-bg.png
diff --git a/website/static/base/img/noise-bg.png b/website/themes/initial/img/noise-bg.png
similarity index 100%
rename from website/static/base/img/noise-bg.png
rename to website/themes/initial/img/noise-bg.png
diff --git a/website/static/media/img/playing-icon.svg b/website/themes/initial/img/playing-icon.svg
similarity index 100%
rename from website/static/media/img/playing-icon.svg
rename to website/themes/initial/img/playing-icon.svg
diff --git a/website/static/media/img/playlist-icon.svg b/website/themes/initial/img/playlist-icon.svg
similarity index 100%
rename from website/static/media/img/playlist-icon.svg
rename to website/themes/initial/img/playlist-icon.svg
diff --git a/website/static/packages/img/red-tag.png b/website/themes/initial/img/red-tag.png
similarity index 100%
rename from website/static/packages/img/red-tag.png
rename to website/themes/initial/img/red-tag.png
diff --git a/website/static/media/img/scientific-mark.svg b/website/themes/initial/img/scientific-mark.svg
similarity index 100%
rename from website/static/media/img/scientific-mark.svg
rename to website/themes/initial/img/scientific-mark.svg
diff --git a/website/static/base/img/videos-icon.png b/website/themes/initial/img/videos-icon.png
similarity index 100%
rename from website/static/base/img/videos-icon.png
rename to website/themes/initial/img/videos-icon.png
diff --git a/website/static/base/img/white-star.png b/website/themes/initial/img/white-star.png
similarity index 100%
rename from website/static/base/img/white-star.png
rename to website/themes/initial/img/white-star.png
diff --git a/website/static/base/img/wiki-icon.png b/website/themes/initial/img/wiki-icon.png
similarity index 100%
rename from website/static/base/img/wiki-icon.png
rename to website/themes/initial/img/wiki-icon.png
