diff --git a/components/SimulateurFeature.vue b/components/SimulateurFeature.vue index b93fbe4..4610b51 100644 --- a/components/SimulateurFeature.vue +++ b/components/SimulateurFeature.vue @@ -14,6 +14,7 @@ {{ tagLabel }}

{{ description }}

+

{{ mention }}

{{ cta }} @@ -29,6 +30,8 @@ const props = defineProps<{ description?: string cta?: string tag?: string + /** Ligne de réserve datée sous la description (ex. « Ordre de grandeur — version du … »). */ + mention?: string | null }>() const tagLabels: Record = { @@ -127,6 +130,13 @@ const tagLabel = computed(() => props.tag ? (tagLabels[props.tag] ?? props.tag) line-height: 1.55; } +.simu-feature__mention { + font-size: 0.78rem; + font-style: italic; + color: color-mix(in srgb, var(--text) 78%, transparent); + margin: 0.4rem 0 0; +} + .simu-feature__cta { display: inline-flex; align-items: center; @@ -145,6 +155,12 @@ const tagLabel = computed(() => props.tag ? (tagLabels[props.tag] ?? props.tag) opacity: 0.88; } +@media (max-width: 640px) { + .simu-feature { padding: 1.1rem 1rem; } + .simu-feature__inner { flex-direction: column; align-items: stretch; gap: 1rem; } + .simu-feature__cta { justify-content: center; } +} + :global(.dark) .simu-feature__badge { background: #064e3b; color: #a7f3d0; diff --git a/pages/outils.vue b/pages/outils.vue index a58c07c..c4447c8 100644 --- a/pages/outils.vue +++ b/pages/outils.vue @@ -7,48 +7,74 @@ -
+

Outils

-

- En tant qu'architecte, on jongle avec une multitude d'outils — simulation, dessin, - calcul, recherche, partage. Les mutualiser, se conseiller dessus, savoir lequel - utiliser quand : c'est une forme d'entraide concrète. Voici ceux que je propose - dans un premier temps. Chacun peut contribuer pour enrichir cette boîte à outils - commune. -

+

{{ outils.intro }}

-
+ +
+ + {{ t.libelle }} + {{ t.court }} + +
- -
-

- Simulateurs métier -

-

Créés par AEP — outils de calcul situés.

+
+

Chargement…

-
- -
+ + - -
-

- Outils tech open source -

-

Quelques recommandations directes. Le cœur de l'onglet, c'est la section FMHY plus bas.

+ + + + + - -
-

Avertissement

-

- Une partie des ressources indexées par FMHY relève du partage de contenus - protégés : la légalité dépend de ton pays et de l'usage que tu en fais. - Renseigne-toi avant d'utiliser ces liens. FMHY maintient une - liste des sites dangereux - (malwares, arnaques) : consulte-la. En cas de doute, privilégie les sources - libres de droits (Project Gutenberg, Gallica, domaine public). -

-
- -

- Cartographie établie d'après un snapshot du 25 août 2026 — l'index fmhy - évolue en continu, voir - fmhy.net. -

- - -

Sélection interactive — clique sur les branches pour déplier

-
-
- Chargement… -
-
- Impossible de charger les ressources. Explorer fmhy.net → -
- -
- - -
- - -
-
- Bientôt — nécessite un compte -

{{ outils?.section_5_placeholder?.titre }}

-

{{ outils?.section_5_placeholder?.description }}

-
-
- - -
- + +
+

{{ outils.contribution.texte }}

+ + {{ outils.contribution.cta }} +
-
@@ -358,26 +272,30 @@ useSeoMeta({ .outils-page { max-width: 860px; margin: 0 auto; - padding: 2rem 1.5rem 4rem; - color: var(--nav-text); + padding: var(--space-xl) var(--space-lg) 4rem; + color: var(--text); } /* ── Header ─────────────────────────────────────────────────── */ .outils-header { - margin-bottom: 2.5rem; + margin-bottom: var(--space-lg); } .outils-header__inner { display: flex; align-items: flex-start; - gap: 1.25rem; + gap: var(--space-md); +} + +.outils-header__body { + min-width: 0; } .outils-header__icon-wrap { width: 3rem; height: 3rem; - border-radius: 10px; - background: var(--nav-bg-alt); + border-radius: var(--radius-md); + background: var(--bg-alt); display: flex; align-items: center; justify-content: center; @@ -394,298 +312,159 @@ useSeoMeta({ .outils-header__title { font-size: 1.75rem; - font-weight: 700; - margin: 0 0 0.5rem; - color: var(--nav-text); + font-weight: var(--fw-bold); + margin: 0 0 var(--space-xs); + color: var(--text); } .outils-header__intro { font-size: 0.9rem; - color: var(--nav-text-muted); + color: color-mix(in srgb, var(--text) 78%, transparent); line-height: 1.65; - margin: 0; + margin: var(--space-sm) 0 0; max-width: 70ch; } -/* ── Sections ───────────────────────────────────────────────── */ +/* ── Sous-onglets ───────────────────────────────────────────── */ +.outils-tabs { + display: flex; + gap: var(--space-xs); + margin-bottom: var(--space-xl); + border-bottom: 1px solid var(--border); + overflow-x: auto; /* défilement interne à la barre, jamais de débordement de la page */ + overscroll-behavior-x: contain; + scrollbar-width: thin; +} + +.outils-tab { + flex: 0 0 auto; + padding: var(--space-xs) var(--space-md) var(--space-sm); + font-size: 0.92rem; + font-weight: var(--fw-medium); + white-space: nowrap; + text-decoration: none; + color: color-mix(in srgb, var(--text) 78%, transparent); + border-bottom: 3px solid transparent; + margin-bottom: -1px; + transition: color var(--dur-fast) var(--ease-out); +} + +.outils-tab:hover { + color: var(--text); +} + +.outils-tab:focus-visible { + outline: 2px solid var(--focus-ring); + outline-offset: -2px; + border-radius: var(--radius-sm); +} + +.outils-tab--actif { + color: var(--text); + font-weight: var(--fw-semibold); + border-bottom-color: var(--nav-primary-solid); +} + +.outils-tab__court { display: none; } + +@media (max-width: 480px) { + .outils-tab { padding: var(--space-xs) var(--space-sm) var(--space-sm); font-size: 0.85rem; } + .outils-tab__long { display: none; } + .outils-tab__court { display: inline; } +} + +@media (prefers-reduced-motion: reduce) { + .outils-tab { transition: none; } +} + +/* ── Panneau ────────────────────────────────────────────────── */ .outils-main { display: flex; flex-direction: column; - gap: 3rem; + gap: 2.5rem; + min-width: 0; +} + +.outils-etat { + font-size: 0.85rem; + color: color-mix(in srgb, var(--text) 78%, transparent); + margin: 0; +} + +.outils-etat a { color: var(--nav-primary-solid); } + +.outils-intention { + font-size: 0.95rem; + line-height: 1.6; + color: var(--text); + margin: 0; + max-width: 70ch; } .outils-section { display: flex; flex-direction: column; - gap: 1rem; + gap: var(--space-md); + min-width: 0; } .outils-section__title { font-size: 1.15rem; - font-weight: 700; + font-weight: var(--fw-bold); margin: 0; - color: var(--nav-text); - display: flex; - align-items: center; - gap: 0.5rem; - padding-bottom: 0.5rem; - border-bottom: 1.5px solid var(--nav-bg-alt); -} - -.outils-section__subtitle { - font-size: 0.82rem; - color: var(--nav-text-muted); - margin: -0.5rem 0 0; - font-style: italic; + color: var(--text); + padding-bottom: var(--space-xs); + border-bottom: 1.5px solid var(--bg-alt); } .outils-section__desc { font-size: 0.88rem; - color: var(--nav-text-muted); + color: color-mix(in srgb, var(--text) 78%, transparent); line-height: 1.65; margin: 0; max-width: 72ch; } -/* ── Simulateurs ────────────────────────────────────────────── */ -.outils-section--simulateurs { - gap: 1.25rem; -} - +/* ── Simulateurs & cartes ───────────────────────────────────── */ .simu-grid { display: flex; flex-direction: column; - gap: 0.75rem; + gap: var(--space-md); } -.simu-inspirations { - margin-top: 0.5rem; -} - -.simu-inspirations__label { - font-size: 0.75rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; - color: var(--nav-text-muted); - margin-bottom: 0.5rem; -} - -/* ── Cards grid ─────────────────────────────────────────────── */ .outil-cards-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); - gap: 0.75rem; + gap: var(--space-md); } /* ── Section FMHY ───────────────────────────────────────────── */ .outils-section--fmhy { - background: var(--nav-bg-alt); - border-radius: 14px; + background: var(--bg-alt); + border-radius: var(--radius-lg); padding: 1.75rem; gap: 1.25rem; - margin: 0 -0.25rem; } .fmhy-tree-wrap { - background: var(--nav-surface); - border: 1px solid var(--nav-bg-alt); - border-radius: 10px; + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius-md); padding: 1.25rem 1.5rem; overflow-x: auto; } -.fmhy-loading, -.fmhy-error { - font-size: 0.85rem; - color: var(--nav-text-muted); - padding: 0.5rem 0; -} - -.fmhy-error a { - color: var(--nav-primary-solid); -} - -.fmhy-footer { - text-align: right; -} +.fmhy-footer { text-align: right; } .fmhy-footer__link { font-size: 0.82rem; - font-weight: 600; + font-weight: var(--fw-semibold); color: var(--nav-primary-solid); text-decoration: none; - transition: opacity 0.15s; } -.fmhy-footer__link:hover { - opacity: 0.75; - text-decoration: underline; -} +.fmhy-footer__link:hover { text-decoration: underline; } -/* ── Bifurcation ────────────────────────────────────────────── */ -.bifurcation-block { - display: flex; - flex-direction: column; - gap: 0.6rem; -} - -.bifurcation-block__title { - font-size: 0.92rem; - font-weight: 600; - color: var(--nav-text); - margin: 0; -} - -.bifurcation-block__desc { - font-size: 0.84rem; - color: var(--nav-text-muted); - margin: 0; - line-height: 1.55; -} - -.bifurcation-block--coalition { - background: var(--nav-bg-alt); - border-radius: 8px; - padding: 0.875rem 1rem; -} - -/* ── Liste OFQA ─────────────────────────────────────────────── */ -.ofqa-list { - list-style: none; - padding: 0; - margin: 0; - display: flex; - flex-direction: column; - gap: 3px; -} - -.ofqa-list__item { - display: flex; -} - -.ofqa-list__link { - display: inline-flex; - align-items: baseline; - gap: 0.4rem; - flex-wrap: wrap; - padding: 3px 6px; - border-radius: 5px; - font-size: 0.84rem; - text-decoration: none; - color: var(--nav-text); - transition: background 0.1s; -} - -.ofqa-list__link:not(.ofqa-list__link--disabled):hover { - background: var(--nav-bg-alt); - color: var(--nav-primary-solid); - text-decoration: underline; -} - -.ofqa-list__link--disabled { - color: var(--nav-text-muted); - cursor: default; -} - -.ofqa-list__ep { - font-family: 'JetBrains Mono', 'Courier New', monospace; - font-size: 0.75rem; - font-weight: 600; - color: var(--nav-text-muted); - flex-shrink: 0; - min-width: 4.5rem; -} - -.ofqa-list__titre { - font-weight: 500; -} - -.ofqa-list__personnes { - color: var(--nav-text-muted); - font-size: 0.82rem; -} - -.ofqa-list__note { - color: var(--nav-text-muted); - font-size: 0.78rem; - font-style: italic; -} - -/* ── Section 5 placeholder ──────────────────────────────────── */ -.outils-section--placeholder { - opacity: 0.6; -} - -.placeholder-block { - border: 1.5px dashed var(--nav-bg-alt); - border-radius: 12px; - padding: 1.25rem 1.5rem; - display: flex; - flex-direction: column; - gap: 0.4rem; -} - -.placeholder-block__badge { - font-size: 0.68rem; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; - color: var(--nav-text-muted); -} - -.placeholder-block__title { - font-size: 0.95rem; - font-weight: 600; - color: var(--nav-text); - margin: 0; -} - -.placeholder-block__desc { - font-size: 0.84rem; - color: var(--nav-text-muted); - margin: 0; - line-height: 1.5; -} - -/* ── Footer ─────────────────────────────────────────────────── */ -.outils-footer { - padding-top: 1rem; - border-top: 1px solid var(--nav-bg-alt); - text-align: center; -} - -.outils-footer__text { - font-size: 0.84rem; - color: var(--nav-text-muted); - margin: 0; -} - -/* ── Mobile ─────────────────────────────────────────────────── */ -@media (max-width: 640px) { - .outils-page { - padding: 1.25rem 1rem 4rem; - } - - .outils-header__inner { - flex-direction: column; - gap: 0.75rem; - } - - .outils-header__title { - font-size: 1.4rem; - } - - .outil-cards-grid { - grid-template-columns: 1fr; - } - - .outils-section--fmhy { - padding: 1.25rem 1rem; - margin: 0 -0.5rem; - } - -/* ── Note FMHY détaillée (par usage) ────────────────────────── */ .fmhy-usage { display: flex; flex-direction: column; @@ -694,14 +473,14 @@ useSeoMeta({ .fmhy-usage__title { font-size: 0.92rem; - font-weight: 650; - color: var(--nav-text); + font-weight: var(--fw-semibold); + color: var(--text); margin: 0; } .fmhy-usage__note { font-size: 0.8rem; - color: var(--nav-text-muted); + color: color-mix(in srgb, var(--text) 78%, transparent); font-style: italic; margin: 0; line-height: 1.5; @@ -720,32 +499,27 @@ useSeoMeta({ font-size: 0.84rem; line-height: 1.5; padding: 2px 6px; - border-radius: 5px; + border-radius: var(--radius-sm); + overflow-wrap: anywhere; } -.fmhy-usage__item:hover { - background: var(--nav-surface); -} +.fmhy-usage__item:hover { background: var(--surface); } .fmhy-usage__link { color: var(--nav-primary-solid); - font-weight: 500; + font-weight: var(--fw-medium); text-decoration: none; } -.fmhy-usage__link:hover { - text-decoration: underline; -} +.fmhy-usage__link:hover { text-decoration: underline; } -.fmhy-usage__desc { - color: var(--nav-text-muted); -} +.fmhy-usage__desc { color: color-mix(in srgb, var(--text) 78%, transparent); } .fmhy-warning { - background: var(--nav-surface); - border: 1px solid var(--nav-bg-alt); + background: var(--surface); + border: 1px solid var(--border); border-left: 3px solid var(--nav-primary-solid); - border-radius: 8px; + border-radius: var(--radius-md); padding: 0.875rem 1rem; display: flex; flex-direction: column; @@ -754,44 +528,199 @@ useSeoMeta({ .fmhy-warning__title { font-size: 0.85rem; - font-weight: 650; - color: var(--nav-text); + font-weight: var(--fw-semibold); + color: var(--text); margin: 0; } .fmhy-warning__text { font-size: 0.82rem; - color: var(--nav-text-muted); + color: color-mix(in srgb, var(--text) 78%, transparent); line-height: 1.6; margin: 0; } -.fmhy-warning__text a { - color: var(--nav-primary-solid); -} +.fmhy-warning__text a, +.fmhy-snapshot a { color: var(--nav-primary-solid); } .fmhy-snapshot { font-size: 0.78rem; - color: var(--nav-text-muted); + color: color-mix(in srgb, var(--text) 78%, transparent); font-style: italic; margin: 0; } -.fmhy-snapshot a { - color: var(--nav-primary-solid); -} - .fmhy-tree-label { font-size: 0.75rem; - font-weight: 600; + font-weight: var(--fw-semibold); text-transform: uppercase; letter-spacing: 0.05em; - color: var(--nav-text-muted); + color: color-mix(in srgb, var(--text) 78%, transparent); margin: 0.5rem 0 -0.5rem; } -.fmhy-tree-wrap { - padding: 0.875rem 0.75rem; - } +/* ── Partir de soi (provisoire) ─────────────────────────────── */ +.fiche-s { gap: var(--space-sm); } + +.fiche-s__resume { + font-size: 0.88rem; + line-height: 1.6; + margin: 0; + max-width: 70ch; + color: color-mix(in srgb, var(--text) 78%, transparent); +} + +.fiche-s__vide { + font-size: 0.86rem; + line-height: 1.6; + margin: 0; + padding: 0.75rem 1rem; + border: 1.5px dashed var(--border-strong); + border-radius: var(--radius-md); + max-width: 70ch; +} + +.ressources { + list-style: none; + padding: 0; + margin: 0; + display: flex; + flex-direction: column; + gap: var(--space-md); +} + +.ressource { display: flex; flex-direction: column; gap: 2px; min-width: 0; } +.ressource p { margin: 0; overflow-wrap: anywhere; } +.ressource__titre { font-size: 0.92rem; font-weight: var(--fw-semibold); } +.ressource__titre a, .ressource__liens a { color: var(--nav-primary-solid); } +.ressource__meta { font-size: 0.78rem; color: color-mix(in srgb, var(--text) 78%, transparent); } +.ressource__pourquoi { font-size: 0.84rem; line-height: 1.5; } +.ressource__liens { font-size: 0.82rem; } +.ressource__note { font-size: 0.78rem; font-style: italic; color: color-mix(in srgb, var(--text) 78%, transparent); } + +/* ── Liste OFQA ─────────────────────────────────────────────── */ +.ofqa-list { + list-style: none; + padding: 0; + margin: var(--space-xs) 0 0; + display: flex; + flex-direction: column; + gap: 3px; +} + +.ofqa-list__link { + display: inline-flex; + align-items: baseline; + gap: 0.4rem; + flex-wrap: wrap; + padding: 3px 6px; + border-radius: var(--radius-sm); + font-size: 0.84rem; + text-decoration: none; + color: var(--text); +} + +.ofqa-list__link:not(.ofqa-list__link--disabled):hover { + background: var(--bg-alt); + color: var(--nav-primary-solid); + text-decoration: underline; +} + +.ofqa-list__link--disabled { cursor: default; } + +.ofqa-list__ep { + font-family: var(--font-mono, 'JetBrains Mono', 'Courier New', monospace); + font-size: 0.75rem; + font-weight: var(--fw-semibold); + flex-shrink: 0; + min-width: 4.5rem; + color: color-mix(in srgb, var(--text) 78%, transparent); +} + +.ofqa-list__titre { font-weight: var(--fw-medium); } +.ofqa-list__personnes, +.ofqa-list__note { font-size: 0.8rem; color: color-mix(in srgb, var(--text) 78%, transparent); } +.ofqa-list__note { font-style: italic; } + +/* ── Logiciels pro (placeholder) ────────────────────────────── */ +.outils-section--placeholder { opacity: 0.8; } + +.placeholder-block { + border: 1.5px dashed var(--border-strong); + border-radius: var(--radius-lg); + padding: 1.25rem 1.5rem; + display: flex; + flex-direction: column; + gap: 0.4rem; +} + +.placeholder-block__badge { + font-size: 0.68rem; + font-weight: var(--fw-semibold); + text-transform: uppercase; + letter-spacing: 0.05em; + color: color-mix(in srgb, var(--text) 78%, transparent); +} + +.placeholder-block__title { + font-size: 0.95rem; + font-weight: var(--fw-semibold); + color: var(--text); + margin: 0; +} + +.placeholder-block__desc { + font-size: 0.84rem; + color: color-mix(in srgb, var(--text) 78%, transparent); + margin: 0; + line-height: 1.5; +} + +/* ── Contribution (pied des 3 onglets) ──────────────────────── */ +.outils-contribution { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + gap: var(--space-md); + padding: var(--space-lg); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + background: var(--surface); +} + +.outils-contribution__texte { + margin: 0; + font-size: 0.9rem; + color: var(--text); +} + +.outils-contribution__cta { + display: inline-flex; + align-items: center; + padding: 0.6rem 1.25rem; + border-radius: var(--radius-md); + background: var(--nav-primary-solid); + color: var(--nav-text-on-primary); + font-size: 0.85rem; + font-weight: var(--fw-semibold); + text-decoration: none; +} + +.outils-contribution__cta:hover { opacity: 0.88; } + +.outils-contribution__cta:focus-visible { + outline: 2px solid var(--focus-ring); + outline-offset: 2px; +} + +/* ── Mobile ─────────────────────────────────────────────────── */ +@media (max-width: 640px) { + .outils-page { padding: var(--space-lg) var(--space-md) 4rem; } + .outils-header__inner { flex-direction: column; gap: var(--space-sm); } + .outils-header__title { font-size: 1.4rem; } + .outil-cards-grid { grid-template-columns: 1fr; } + .outils-section--fmhy { padding: 1.25rem 1rem; } + .fmhy-tree-wrap { padding: 0.875rem 0.75rem; } }