"path/filepath"
        "strings"
 
+       "github.com/gohugoio/hugo/common/maps"
        "github.com/gohugoio/hugo/common/types"
 
        "github.com/gobwas/glob"
 
        "github.com/gohugoio/hugo/cache/filecache"
 
-       "github.com/gohugoio/hugo/common/maps"
-
        "github.com/gohugoio/hugo/parser/metadecoders"
 
        "github.com/gohugoio/hugo/common/herrors"
                }
        }
 
+       // We made this a Glob pattern in Hugo 0.75, we don't need both.
+       if v.GetBool("ignoreVendor") {
+               helpers.Deprecated("--ignoreVendor", "--ignoreVendorPaths **", false)
+               v.Set("ignoreVendorPaths", "**")
+       }
+
+       modulesConfig, err := l.loadModulesConfig(v)
+       if err != nil {
+               return v, configFiles, err
+       }
+
+       // Need to run these after the modules are loaded, but before
+       // they are finalized.
+       collectHook := func(m *modules.ModulesConfig) error {
+               if err := loadLanguageSettings(v, nil); err != nil {
+                       return err
+               }
+
+               mods := m.ActiveModules
+
+               // Apply default project mounts.
+               if err := modules.ApplyProjectConfigDefaults(v, mods[0]); err != nil {
+                       return err
+               }
+
+               return nil
+       }
+
+       _, modulesConfigFiles, err := l.collectModules(modulesConfig, v, collectHook)
+
+       if err == nil && len(modulesConfigFiles) > 0 {
+               configFiles = append(configFiles, modulesConfigFiles...)
+       }
+
        const delim = "__env__delim"
 
        // Apply environment overrides
 
        }
 
-       // We made this a Glob pattern in Hugo 0.75, we don't need both.
-       if v.GetBool("ignoreVendor") {
-               helpers.Deprecated("--ignoreVendor", "--ignoreVendorPaths **", false)
-               v.Set("ignoreVendorPaths", "**")
-       }
-
-       modulesConfig, err := l.loadModulesConfig(v)
-       if err != nil {
-               return v, configFiles, err
-       }
-
-       // Need to run these after the modules are loaded, but before
-       // they are finalized.
-       collectHook := func(m *modules.ModulesConfig) error {
-               if err := loadLanguageSettings(v, nil); err != nil {
-                       return err
-               }
-
-               mods := m.ActiveModules
-
-               // Apply default project mounts.
-               if err := modules.ApplyProjectConfigDefaults(v, mods[0]); err != nil {
-                       return err
-               }
-
-               return nil
-       }
-
-       _, modulesConfigFiles, err := l.collectModules(modulesConfig, v, collectHook)
-
-       if err == nil && len(modulesConfigFiles) > 0 {
-               configFiles = append(configFiles, modulesConfigFiles...)
-       }
-
        return v, configFiles, err
 }
 
 
 
        baseConfig := `
 
+theme = "mytheme"
 environment = "production"
 enableGitInfo = true
 intSlice = [5,7,9]
 
        b := newTestSitesBuilder(t).WithConfigFile("toml", baseConfig)
 
+       b.WithSourceFile("themes/mytheme/config.toml", `
+
+[params]
+[params.mytheme_section]
+theme_param="themevalue"
+[params.mytheme_section2]
+theme_param="themevalue2"
+
+`)
+
        b.WithEnviron(
                "HUGO_ENVIRONMENT", "test",
                "HUGO_NEW", "new", // key not in config.toml
                "HUGO_STRINGSLICE", `["c", "d"]`,
                "HUGO_INTSLICE", `[5, 8, 9]`,
                "HUGO_FLOATSLICE", `[5.32]`,
-               // https://github.com/gohugoio/hugo/issues/7829
+               // Issue #7829
                "HUGOxPARAMSxAPI_CONFIGxAPI_KEY", "new_key",
                // Delimiters are case sensitive.
                "HUGOxPARAMSxAPI_CONFIGXANOTHER_KEY", "another_key",
+               // Issue #8346
+               "HUGOxPARAMSxMYTHEME_SECTIONxTHEME_PARAM", "themevalue_changed",
+               "HUGOxPARAMSxMYTHEME_SECTION2xTHEME_PARAM", "themevalue2_changed",
        )
 
        b.Build(BuildCfg{})
        c.Assert(cfg.Get("intSlice"), qt.DeepEquals, []interface{}{5, 8, 9})
        c.Assert(cfg.Get("params.api_config.api_key"), qt.Equals, "new_key")
        c.Assert(cfg.Get("params.api_config.another_key"), qt.Equals, "default another_key")
+       c.Assert(cfg.Get("params.mytheme_section.theme_param"), qt.Equals, "themevalue_changed")
+       c.Assert(cfg.Get("params.mytheme_section2.theme_param"), qt.Equals, "themevalue2_changed")
 }