1ScssPhp\ScssPhp\Exception\CompilerException {#8911
  #message: "Undefined mixin atelier-page-hero-root: line: 189, column: 60"
  #code: 0
  #file: "/app/vendor/scssphp/scssphp/src/Compiler.php"
  #line: 6179trace: {/app/vendor/scssphp/scssphp/src/Compiler.php:6179 {ScssPhp\ScssPhp\Compiler->error($msg, ...$args) …
      › 
      ›     return new CompilerException($msg);}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:3323 {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) …
      › if (! $mixin) {    throw $this->error("Undefined mixin $name");}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2427 {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') …
      › } else {    $ret = $this->compileChild($stm, $out);}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:1970 {ScssPhp\ScssPhp\Compiler->compileBlock(Block $block) …
      › 
      › $this->compileChildrenNoReturn($block->children, $out, $block->selfParent);}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2980 {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) …
      › case Type::T_BLOCK:    $this->compileBlock($child[1]);    break;}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2427 {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') …
      › } else {    $ret = $this->compileChild($stm, $out);}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:1970 {ScssPhp\ScssPhp\Compiler->compileBlock(Block $block) …
      › 
      › $this->compileChildrenNoReturn($block->children, $out, $block->selfParent);}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2980 {ScssPhp\ScssPhp\Compiler->compileChild($child, OutputBlock $out) …
      › case Type::T_BLOCK:    $this->compileBlock($child[1]);    break;}
    /app/vendor/scssphp/scssphp/src/Compiler.php:2427 {ScssPhp\ScssPhp\Compiler->compileChildrenNoReturn($stms, OutputBlock $out, $selfParent = null, $traceName = '') …
      › } else {    $ret = $this->compileChild($stm, $out);}}
    /app/vendor/scssphp/scssphp/src/Compiler.php:782 {ScssPhp\ScssPhp\Compiler->compileRoot(Block $rootBlock) …
      › 
      › $this->compileChildrenNoReturn($rootBlock->children, $this->scope);assert($this->scope !== null);}
    /app/vendor/scssphp/scssphp/src/Compiler.php:560 {ScssPhp\ScssPhp\Compiler->compileString($source, $path = null) …
      › $this->injectVariables($this->registeredVars);$this->compileRoot($tree);$this->popEnv();}
    /app/src/Twig/Traits/ScssExtensionTrait.php:190 {App\Twig\TwigExtension->App\Twig\Traits\{closure} …
      › 
      › $css = $compiler->compileString($scss)->getCss();$entityName = $entity?->__toString();}
    /app/src/Service/Cache/MemoryCacheService.php:31 {App\Service\Cache\MemoryCacheService::App\Service\Cache\{closure} …
      ›     $item->tag($tags);    return $function($item);});}
    /app/vendor/symfony/cache/LockRegistry.php:111 {Symfony\Component\Cache\LockRegistry::compute(callable $callback, ItemInterface $item, bool &$save, CacheInterface $pool, ?Closure $setMetadata = null, ?LoggerInterface $logger = null): mixed …
      › 
      › $value = $callback($item, $save);}
    /app/vendor/symfony/cache/Traits/ContractsTrait.php:102 {Symfony\Component\Cache\Adapter\TagAwareAdapter->Symfony\Component\Cache\Traits\{closure} …
      › try {    $value = ($this->callbackWrapper)($callback, $item, $save, $pool, function (CacheItem $item) use ($setMetadata, $startTime, &$metadata) {        $setMetadata($item, $startTime, $metadata);}
    /app/vendor/symfony/cache-contracts/CacheTrait.php:64 {Symfony\Component\Cache\Adapter\TagAwareAdapter->contractsGet(CacheItemPoolInterface $pool, string $key, callable $callback, ?float $beta, ?array &$metadata = null, ?LoggerInterface $logger = null): mixed …
      › $save = true;$item->set($callback($item, $save));if ($save) {}
    /app/vendor/symfony/cache/Traits/ContractsTrait.php:85 {Symfony\Component\Cache\Adapter\TagAwareAdapter->doGet(AdapterInterface $pool, string $key, callable $callback, ?float $beta, ?array &$metadata = null): mixed …
      › 
      › return $this->contractsGet($pool, $key, function (CacheItem $item, bool &$save) use ($pool, $callback, $setMetadata, &$metadata, $key) {    // don't wrap nor save recursive calls}
    /app/vendor/symfony/cache-contracts/CacheTrait.php:30 {Symfony\Component\Cache\Adapter\TagAwareAdapter->get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed …
      › {    return $this->doGet($this, $key, $callback, $beta, $metadata);}}
    /app/src/Service/Cache/MemoryCacheService.php:29 {App\Service\Cache\MemoryCacheService::getValue(App\Service\Cache\CacheTagsEnum|string $name, callable $function, array $tags = [], bool $ignoreLanguage = false, bool $ignoreMediaType = false, bool $ignoreRole = false, array $suffixes = []): mixed …
      › 
      › return $cache->get($name, function (CacheItem $item) use ($function, $tags) {    $item->tag($tags);}
    /app/src/Service/Cache/Strategy/MemoryAndHttpCacheStrategy.php:14 {App\Service\Cache\Strategy\MemoryAndHttpCacheStrategy::getValue(App\Service\Cache\CacheTagsEnum|string $name, callable $function, array $tags = [], bool $ignoreLanguage = false, bool $ignoreMediaType = false, bool $ignoreRole = false, array $suffixes = []): mixed …
      › {    return MemoryCacheService::getValue($name, $function, $tags, $ignoreLanguage, $ignoreMediaType, $ignoreRole, $suffixes);}}
    /app/src/Service/Cache/CacheManager.php:16 {App\Service\Cache\CacheManager::getValue(App\Service\Cache\CacheTagsEnum|string $name, callable $function, array $tags = [], bool $ignoreLanguage = false, bool $ignoreMediaType = false, bool $ignoreRole = false, array $suffixes = []): mixed …
      › {    return (self::getCacheStrategyClass())::getValue($name, $function, $tags, $ignoreLanguage, $ignoreMediaType, $ignoreRole, $suffixes);}}
    /app/src/Twig/Traits/ScssExtensionTrait.php:74 {App\Twig\TwigExtension->filter_scss(?string $scss, ?string $randomBlockId = null, ?AbstractEvolutEntity $entity = null): ?string …
      › $mediaType = SessionContextService::getContext(SessionContextEnum::MANUAL_MEDIA_TYPE) ?? SessionContextService::getContext(SessionContextEnum::ACTUAL_MEDIA_TYPE);return CacheManager::getValue(sprintf('scss_rendering_for_%s_%s_%s_%s', $randomBlockId, md5($scss), $language, $mediaType),    function () use ($scss, $randomBlockId, $entity) {}
    /app/var/cache/prod/twig/40/40d274654847ebb44e105d8301adbd44.php:118 {__TwigTemplate_de3f5a5383dba55f0089769a14095e32->block_bloc_styles(array $context, array $blocks = []): iterable …
      › yield "            ";yield $this->extensions['App\Twig\TwigExtension']->filter_decode_html($this->extensions['App\Twig\TwigExtension']->filter_scss(CoreExtension::getAttribute($this->env, $this->source, ($context["bloc"] ?? null), "scss", [], "any", false, false, false, 17), CoreExtension::getAttribute($this->env, $this->source, ($context["bloc"] ?? null), "blocId", [], "any", false, false, false, 17), ($context["bloc"] ?? null)));yield "}
    /app/vendor/twig/twig/src/Template.php:437 {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable …
      › try {    yield from $template->$block($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/40/40d274654847ebb44e105d8301adbd44.php:75 {__TwigTemplate_de3f5a5383dba55f0089769a14095e32->doDisplay(array $context, array $blocks = []): iterable …
      › // line 13yield from $this->unwrap()->yieldBlock('bloc_styles', $context, $blocks);// line 44}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/cc/cc7aa6d18d1c40bd6452c433b77a82c0.php:53 {__TwigTemplate_3dac8488c739450518b10b9760b9254b->doDisplay(array $context, array $blocks = []): iterable …
      ›     $this->parent = $this->loadTemplate("blocs/Bloc.html.twig", "blocs/global/bloc_with_header.html.twig", 3);    yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));}}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/8e/8ed5391774d269ffe313b0559cfd8382.php:47 {__TwigTemplate_6b57b105b45e51a70cfc162472edc3fd->doDisplay(array $context, array $blocks = []): iterable …
      ›     $this->parent = $this->loadTemplate("blocs/global/bloc_with_header.html.twig", "blocs/ContentBloc.html.twig", 2);    yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));}}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/e4/e442822ed0d4f08edcff2f3e037ba064.php:105 {__TwigTemplate_423c0fd090ec7fbc4f373b8126c9baeb->block_include_bloc(array $context, array $blocks = []): iterable …
      › yield "            ";yield from         $this->loadTemplate((("blocs/" . $this->extensions['App\Twig\TwigExtension']->filter_class(CoreExtension::getAttribute($this->env, $this->source, ($context["blocPage"] ?? null), "bloc", [], "any", false, false, false, 6))) . ".html.twig"), "blocs/CustomPage.html.twig", 6)->unwrap()->yield(CoreExtension::merge($context, ["bloc" => CoreExtension::getAttribute($this->env, $this->source, ($context["blocPage"] ?? null), "bloc", [], "any", false, false, false, 6), "nodump" => true, "form" => ($context["form"] ?? null)]));// line 7}
    /app/vendor/twig/twig/src/Template.php:437 {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable …
      › try {    yield from $template->$block($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/e4/e442822ed0d4f08edcff2f3e037ba064.php:78 {__TwigTemplate_423c0fd090ec7fbc4f373b8126c9baeb->block_blocPages(array $context, array $blocks = []): iterable …
      › yield "        ";yield from $this->unwrap()->yieldBlock('include_bloc', $context, $blocks);// line 8}
    /app/vendor/twig/twig/src/Template.php:437 {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable …
      › try {    yield from $template->$block($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/16/1645acb24792cee10894bf491402cd5b.php:227 {__TwigTemplate_8e47dc406ec905e42279cfc058629785->block_body(array $context, array $blocks = []): iterable …
      › // line 54yield from $this->unwrap()->yieldBlock('blocPages', $context, $blocks);// line 61}
    /app/vendor/twig/twig/src/Template.php:437 {Twig\Template->yieldBlock($name, array $context, array $blocks = [], $useBlocks = true, ?self $templateContext = null): iterable …
      › try {    yield from $template->$block($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/f3/f3ea7129739c5ba87d4de6e044961f47.php:304 {__TwigTemplate_f7de9678832f434a6f354facfb4e9091->{closure} …
      › yield "            ";yield from $this->unwrap()->yieldBlock('body', $context, $blocks);// line 131}
    /app/vendor/twig/twig/src/Extension/CoreExtension.php:1919 {Twig\Extension\CoreExtension::captureOutput(iterable $body): string …
      › try {    foreach ($body as $data) {        echo $data;}
    /app/var/cache/prod/twig/f3/f3ea7129739c5ba87d4de6e044961f47.php:301 {__TwigTemplate_f7de9678832f434a6f354facfb4e9091->doDisplay(array $context, array $blocks = []): iterable …
      › // line 123$___internal_parse_0_ = ('' === $tmp = \Twig\Extension\CoreExtension::captureOutput((function () use (&$context, $macros, $blocks) {    // line 124}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/16/1645acb24792cee10894bf491402cd5b.php:70 {__TwigTemplate_8e47dc406ec905e42279cfc058629785->doDisplay(array $context, array $blocks = []): iterable …
      ›     $this->parent = $this->loadTemplate("base.html.twig", "blocs/Page.html.twig", 2);    yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));}}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/var/cache/prod/twig/e4/e442822ed0d4f08edcff2f3e037ba064.php:48 {__TwigTemplate_423c0fd090ec7fbc4f373b8126c9baeb->doDisplay(array $context, array $blocks = []): iterable …
      ›     $this->parent = $this->loadTemplate("blocs/Page.html.twig", "blocs/CustomPage.html.twig", 1);    yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));}}
    /app/vendor/twig/twig/src/Template.php:393 {Twig\Template->yield(array $context, array $blocks = []): iterable …
      › try {    yield from $this->doDisplay($context, $blocks);} catch (Error $e) {}
    /app/vendor/twig/twig/src/Template.php:349 {Twig\Template->display(array $context, array $blocks = []): void …
      › {    foreach ($this->yield($context, $blocks) as $data) {        echo $data;}
    /app/vendor/twig/twig/src/Template.php:364 {Twig\Template->render(array $context): string …
      › try {    $this->display($context);} catch (\Throwable $e) {}
    /app/vendor/twig/twig/src/TemplateWrapper.php:35 {Twig\TemplateWrapper->render(array $context = []): string …
      › {    return $this->template->render($context);}}
    /app/vendor/twig/twig/src/Environment.php:306 {Twig\Environment->render($name, array $context = []): string …
      › {    return $this->load($name)->render($context);}}
    /app/vendor/symfony/framework-bundle/Controller/AbstractController.php:448 {Symfony\Bundle\FrameworkBundle\Controller\AbstractController->doRenderView(string $view, ?string $block, array $parameters, string $method): string …
      › 
      ›     return $this->container->get('twig')->render($view, $parameters);}}
    /app/vendor/symfony/framework-bundle/Controller/AbstractController.php:453 {Symfony\Bundle\FrameworkBundle\Controller\AbstractController->doRender(string $view, ?string $block, array $parameters, ?Response $response, string $method): Response …
      › {    $content = $this->doRenderView($view, $block, $parameters, $method);    $response ??= new Response();}
    /app/vendor/symfony/framework-bundle/Controller/AbstractController.php:253 {Symfony\Bundle\FrameworkBundle\Controller\AbstractController->render(string $view, array $parameters = [], ?Response $response = null): Response …
      › {    return $this->doRender($view, null, $parameters, $response, __FUNCTION__);}}
    /app/src/Controller/Base/WebsiteController.php:164 {App\Controller\Base\WebsiteController->renderPage(?string $slug = null): Response …
      › 
      › return $this->render('blocs/' . TwigExtension::filter_class($page) . '.html.twig', [    'bloc' => $page,}
    /app/vendor/symfony/http-kernel/HttpKernel.php:181 {Symfony\Component\HttpKernel\HttpKernel->handleRaw(Request $request, int $type = self::MAIN_REQUEST): Response …
      › // call controller$response = $controller(...$arguments);}
    /app/vendor/symfony/http-kernel/HttpKernel.php:76 {Symfony\Component\HttpKernel\HttpKernel->handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true): Response …
      › try {    return $response = $this->handleRaw($request, $type);} catch (\Throwable $e) {}
    /app/vendor/symfony/http-kernel/Kernel.php:197 {Symfony\Component\HttpKernel\Kernel->handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true): Response …
      › try {    return $this->getHttpKernel()->handle($request, $type, $catch);} finally {}
    /app/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php:35 {Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run(): int …
      › {    $response = $this->kernel->handle($this->request);}
    /app/vendor/autoload_runtime.php:29 {require_once …
      ›         ->getRunner($app)        ->run());}
    /app/public/index.php:5 {
      › 
      › require_once dirname(__DIR__).'/vendor/autoload_runtime.php';arguments: {
        "/app/vendor/autoload_runtime.php"
      }
    }
  }
}
2 """
.service-hero { @include atelier-page-hero-root; padding: 142px 0 96px !important; min-height: 640px !important; display: flex !important; align-items: flex-end !important; }\n.service-hero__media { position: absolute !important; inset: 0 !important; }\n.service-hero__img { width: 100% !important; height: 100% !important; object-fit: cover !important; }\n.service-hero__overlay { position: absolute !important; inset: 0 !important; background: linear-gradient(115deg, rgba(34, 36, 38, 0.92) 0%, rgba(34, 36, 38, 0.76) 48%, rgba(34, 36, 38, 0.32) 100%) !important; }\n.service-hero__inner { position: relative !important; z-index: 2 !important; max-width: 1180px !important; text-align: left !important; }\n.service-hero__eyebrow { @include atelier-kicker; color: rgba(244, 241, 234, 0.86) !important; border-left-color: var(--color4) !important; margin-bottom: 22px !important; }\n.service-hero__icon { display: inline-flex !important; align-items: center !important; justify-content: center !important; width: 64px !important; height: 64px !important; margin-bottom: 24px !important; border: 1px solid rgba(244, 241, 234, 0.38) !important; background: rgba(244, 241, 234, 0.1) !important; color: var(--color4) !important; font-size: 27px !important; }\n.service-hero__title { @include atelier-page-hero-title; max-width: 880px !important; margin-bottom: 22px !important; font-size: clamp(42px, 5vw, 72px) !important; }\n.service-hero__lead { max-width: 760px !important; @include atelier-section-description(rgba(244, 241, 234, 0.86)); font-size: 1.08rem !important; line-height: 1.78 !important; }\n.service-hero__actions { margin-top: 30px !important; }\n.service-hero__actions .buttons, .service-hero__actions .bloc-buttons { display: flex !important; flex-wrap: wrap !important; gap: 14px !important; }\n.service-hero__actions .btn { border: 1px solid rgba(244, 241, 234, 0.74) !important; box-shadow: none !important; }\n.service-hero__actions .btn:hover { background: var(--color3) !important; border-color: var(--color3) !important; color: var(--color4) !important; }\n.service-hero__signals { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)) !important; max-width: 920px !important; gap: 0 !important; margin-top: 46px !important; border-top: 1px solid rgba(244, 241, 234, 0.24) !important; border-bottom: 1px solid rgba(244, 241, 234, 0.24) !important; }\n.service-hero__signals span { padding: 18px 20px !important; color: rgba(244, 241, 234, 0.84) !important; font-size: 0.9rem !important; border-right: 1px solid rgba(244, 241, 234, 0.18) !important; }\n.service-hero__signals span:last-child { border-right: 0 !important; }\n@media all and (max-width: 900px) {\n  .service-hero { min-height: 560px !important; padding: 112px 0 72px !important; }\n  .service-hero__signals { grid-template-columns: 1fr !important; }\n  .service-hero__signals span { border-right: 0 !important; border-bottom: 1px solid rgba(244, 241, 234, 0.18) !important; }\n  .service-hero__signals span:last-child { border-bottom: 0 !important; }\n}
"""
bloc_3de7dda1-299d-4a17-bc87-cbc22330c759 *{color: red !important} #bloc_3de7dda1-299d-4a17-bc87-cbc22330c759 .shape-divider-top path { fill: #6174d1 !important; } #bloc_3de7dda1-299d-4a17-bc87-cbc22330c759 .shape-divider-bottom path { fill: #6174d1 !important; }
Mission d’architecture

Bricolage & montage

Montage de meubles, pose d'étagères, petites réparations et petits travaux à domicile. HM Bat intervient avec le matériel et le savoir-faire nécessaires.
Cadrage des usagesArbitrages réglementairesDécisions traçables
Méthode

Transformer une intention en mission claire

Chaque service est présenté comme une séquence de décisions : ce qui est cadré, ce que l’agence produit et ce qui permet d’avancer sans zone grise.

Bricolage & montage

L’esquisse permet de transformer une intention en premiers scénarios : implantation, orientation, volumes, lumière et relation au site.

L’agence formalise les hypothèses sous une forme lisible pour comparer les usages, les contraintes réglementaires et les enveloppes budgétaires avant d’engager la suite du projet.

  • Lecture du site, des usages et des contraintes existantes.
  • Plans d’intention, principes de volumes et premières ambiances.
  • Arbitrages pour choisir une direction architecturale réaliste.
Continuer l’exploration

Projets et expertises à rapprocher

Des références et contenus utiles pour situer cette mission dans un parcours complet.

Valider la bonne trajectoire pour votre projet

Un premier échange permet de qualifier le besoin, les contraintes et les prochaines décisions à prendre.

Valider la bonne trajectoire pour votre projet

Un premier échange permet de qualifier le besoin, les contraintes et les prochaines décisions à prendre.