Compare commits
6 Commits
feat/v12-l
...
feat/v12-m
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ba4628818 | ||
|
|
78dde6a2a3 | ||
|
|
3360daa61f | ||
|
|
d2d3629965 | ||
|
|
272fb5c181 | ||
|
|
95b75d4866 |
@@ -5,7 +5,7 @@ import CarteOWrapper from '../vue/CarteOWrapper.vue';
|
|||||||
import ChatbotV2 from '../vue/ChatbotV2.vue';
|
import ChatbotV2 from '../vue/ChatbotV2.vue';
|
||||||
import EmbedDynamique from '../vue/EmbedDynamique.vue';
|
import EmbedDynamique from '../vue/EmbedDynamique.vue';
|
||||||
---
|
---
|
||||||
<div id="col-centre-grid" class="h-full grid grid-rows-2 gap-2 p-2">
|
<div id="col-centre-grid" class="h-full grid gap-2 p-2" style="grid-template-rows: 1fr 2fr;">
|
||||||
<!-- HAUT 50% : tabs Carte O / Chatbot -->
|
<!-- HAUT 50% : tabs Carte O / Chatbot -->
|
||||||
<section id="col-centre-haut" class="border border-neutral-200 rounded flex flex-col overflow-hidden bg-white" style="min-height: 0;">
|
<section id="col-centre-haut" class="border border-neutral-200 rounded flex flex-col overflow-hidden bg-white" style="min-height: 0;">
|
||||||
<nav role="tablist" aria-label="Vues centrales" class="flex border-b border-neutral-200 px-1 pt-1">
|
<nav role="tablist" aria-label="Vues centrales" class="flex border-b border-neutral-200 px-1 pt-1">
|
||||||
@@ -97,8 +97,8 @@ import EmbedDynamique from '../vue/EmbedDynamique.vue';
|
|||||||
haut.style.minHeight = '0';
|
haut.style.minHeight = '0';
|
||||||
poignee?.setAttribute('aria-label', 'Deployer la Carte O');
|
poignee?.setAttribute('aria-label', 'Deployer la Carte O');
|
||||||
} else {
|
} else {
|
||||||
grid.classList.add('grid-rows-2');
|
grid.classList.remove('grid-rows-2');
|
||||||
grid.style.gridTemplateRows = '';
|
grid.style.gridTemplateRows = '1fr 2fr';
|
||||||
haut.style.overflow = '';
|
haut.style.overflow = '';
|
||||||
haut.style.minHeight = '';
|
haut.style.minHeight = '';
|
||||||
poignee?.setAttribute('aria-label', 'Replier la Carte O');
|
poignee?.setAttribute('aria-label', 'Replier la Carte O');
|
||||||
@@ -141,7 +141,7 @@ import EmbedDynamique from '../vue/EmbedDynamique.vue';
|
|||||||
const parts = rows.split(' ');
|
const parts = rows.split(' ');
|
||||||
return parseFloat(parts[0]) || 50;
|
return parseFloat(parts[0]) || 50;
|
||||||
}
|
}
|
||||||
return 50;
|
return 33.33;
|
||||||
};
|
};
|
||||||
|
|
||||||
dragHandle.addEventListener('mousedown', (e: MouseEvent) => {
|
dragHandle.addEventListener('mousedown', (e: MouseEvent) => {
|
||||||
@@ -182,10 +182,10 @@ import EmbedDynamique from '../vue/EmbedDynamique.vue';
|
|||||||
gridEl.classList.remove('grid-rows-2');
|
gridEl.classList.remove('grid-rows-2');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Double-click sur drag handle = reset 50/50
|
// Double-click sur drag handle = reset default 1/3 + 2/3
|
||||||
dragHandle.addEventListener('dblclick', () => {
|
dragHandle.addEventListener('dblclick', () => {
|
||||||
gridEl.style.gridTemplateRows = '';
|
gridEl.style.gridTemplateRows = '1fr 2fr';
|
||||||
gridEl.classList.add('grid-rows-2');
|
gridEl.classList.remove('grid-rows-2');
|
||||||
sessionStorage.removeItem('tf-centre-rows');
|
sessionStorage.removeItem('tf-centre-rows');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,19 +5,19 @@ const categories = [
|
|||||||
{
|
{
|
||||||
id: 'politique',
|
id: 'politique',
|
||||||
label: 'Politique',
|
label: 'Politique',
|
||||||
color: '#1d4ed8',
|
color: '#B5443A',
|
||||||
hashtags: ['#politique', '#aep-politique'],
|
hashtags: ['#politique', '#aep-politique'],
|
||||||
plateformes: [
|
plateformes: [
|
||||||
{ id: 'instagram', label: '@aep.politique', url: 'https://www.instagram.com/aep.politique/' },
|
{ id: 'instagram', label: 'Court', url: 'https://www.instagram.com/aep.politique/' },
|
||||||
{ id: 'castopod', label: 'Podcast', url: 'https://podcast.trans-former.fr' },
|
{ id: 'castopod', label: 'Podcast', url: 'https://podcast.trans-former.fr' },
|
||||||
{ id: 'substack', label: 'Substack', url: 'https://julesneny.substack.com' },
|
{ id: 'substack', label: 'Article', url: 'https://julesneny.substack.com' },
|
||||||
],
|
],
|
||||||
hasSelector: true,
|
hasSelector: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'art',
|
id: 'art',
|
||||||
label: 'Art',
|
label: 'Art',
|
||||||
color: '#dc2626',
|
color: '#5B6B3A',
|
||||||
hashtags: ['#peinture', '#art'],
|
hashtags: ['#peinture', '#art'],
|
||||||
plateformes: [
|
plateformes: [
|
||||||
{ id: 'instagram', label: '@julesneny', url: 'https://www.instagram.com/julesneny/' },
|
{ id: 'instagram', label: '@julesneny', url: 'https://www.instagram.com/julesneny/' },
|
||||||
@@ -27,7 +27,7 @@ const categories = [
|
|||||||
{
|
{
|
||||||
id: 'outils',
|
id: 'outils',
|
||||||
label: 'Outils',
|
label: 'Outils',
|
||||||
color: '#16a34a',
|
color: '#475569',
|
||||||
hashtags: ['#stack', '#building-public'],
|
hashtags: ['#stack', '#building-public'],
|
||||||
plateformes: [
|
plateformes: [
|
||||||
{ id: 'gitea', label: 'Gitea', url: 'https://git.trans-former.fr/jules' },
|
{ id: 'gitea', label: 'Gitea', url: 'https://git.trans-former.fr/jules' },
|
||||||
@@ -68,7 +68,7 @@ const categories = [
|
|||||||
type="button"
|
type="button"
|
||||||
data-platform-id={p.id}
|
data-platform-id={p.id}
|
||||||
class="platform-pill"
|
class="platform-pill"
|
||||||
style="font-family:'Courier New',Courier,monospace;font-size:12px;padding:2px 8px;border-radius:12px;cursor:pointer;border:1px solid #1d4ed8;background:transparent;color:#1d4ed8;"
|
style="font-family:'Courier New',Courier,monospace;font-size:12px;padding:2px 8px;border-radius:12px;cursor:pointer;border:1px solid #B5443A;background:transparent;color:#B5443A;"
|
||||||
>
|
>
|
||||||
{p.label}
|
{p.label}
|
||||||
</button>
|
</button>
|
||||||
@@ -219,11 +219,11 @@ const categories = [
|
|||||||
pills.forEach((pill) => {
|
pills.forEach((pill) => {
|
||||||
const pid = pill.dataset.platformId;
|
const pid = pill.dataset.platformId;
|
||||||
if (!active || pid === active) {
|
if (!active || pid === active) {
|
||||||
pill.style.background = '#1d4ed8';
|
pill.style.background = '#B5443A';
|
||||||
pill.style.color = '#fff';
|
pill.style.color = '#fff';
|
||||||
} else {
|
} else {
|
||||||
pill.style.background = 'transparent';
|
pill.style.background = 'transparent';
|
||||||
pill.style.color = '#1d4ed8';
|
pill.style.color = '#B5443A';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<nav
|
<nav
|
||||||
id="mobile-tab-bar"
|
id="mobile-tab-bar"
|
||||||
aria-label="Navigation colonnes"
|
aria-label="Navigation colonnes"
|
||||||
class="fixed top-0 left-0 right-0 z-30 h-11 bg-white border-b border-neutral-200 flex items-stretch justify-around md:hidden"
|
class="fixed top-12 left-0 right-0 z-30 h-11 bg-white border-b border-neutral-200 flex items-stretch justify-around md:hidden"
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
|
|||||||
52
src/components/astro/SiteHeader.astro
Normal file
52
src/components/astro/SiteHeader.astro
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
// SiteHeader.astro - V1.2-M : bandeau header pleine largeur identite site
|
||||||
|
// Palette terre figee : papier #FAFAF7, encre #0F172A, encre douce #475569
|
||||||
|
// Composition retenue : 2 lignes hierarchique
|
||||||
|
// ligne 1 : "Trans-Former" wordmark dominant (semibold tracking serre)
|
||||||
|
// ligne 2 : "Jules Neny" + baseline italique cote a cote (separateur point median)
|
||||||
|
// Rationale : le wordmark domine sans ecraser ; la baseline reste lisible ;
|
||||||
|
// composition adaptee a un manifeste (hierarchie typographique forte).
|
||||||
|
// Hauteur : ~64px desktop / ~48px mobile (compacte)
|
||||||
|
// Baseline raccourcie mobile : "architecture politique du vivant"
|
||||||
|
---
|
||||||
|
<header
|
||||||
|
class="site-header w-full border-b border-[#E5E7EB] bg-[#FAFAF7] text-[#0F172A] px-4 md:px-6 flex items-center"
|
||||||
|
role="banner"
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
href="/"
|
||||||
|
class="flex flex-col md:flex-row md:items-baseline gap-x-3 gap-y-0 no-underline text-[#0F172A] hover:text-[#0F172A]"
|
||||||
|
aria-label="trans-former.fr - retour accueil"
|
||||||
|
>
|
||||||
|
<!-- Ligne 1 : wordmark dominant -->
|
||||||
|
<span
|
||||||
|
class="font-semibold tracking-tight text-[#0F172A] text-[17px] md:text-[20px] leading-none"
|
||||||
|
>
|
||||||
|
Trans-Former
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<!-- Ligne 2 (desktop : inline ; mobile : sous wordmark) : Jules Neny + baseline -->
|
||||||
|
<span class="flex items-baseline gap-2 text-[#475569] leading-none">
|
||||||
|
<span class="text-[11px] md:text-[13px]">Jules Neny</span>
|
||||||
|
<span class="text-[#94A3B8]" aria-hidden="true">·</span>
|
||||||
|
<!-- Baseline longue : desktop / Baseline courte : mobile -->
|
||||||
|
<span class="italic text-[11px] md:text-[13px] hidden sm:inline">
|
||||||
|
architecture d'ecologie politique
|
||||||
|
</span>
|
||||||
|
<span class="italic text-[11px] inline sm:hidden">
|
||||||
|
architecture politique du vivant
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.site-header {
|
||||||
|
height: 48px;
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.site-header {
|
||||||
|
height: 64px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
import '../styles/global.css';
|
import '../styles/global.css';
|
||||||
import Footer from '../components/astro/Footer.astro';
|
import Footer from '../components/astro/Footer.astro';
|
||||||
|
import SiteHeader from '../components/astro/SiteHeader.astro';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title?: string;
|
title?: string;
|
||||||
@@ -28,8 +29,11 @@ const {
|
|||||||
<meta name="twitter:title" content={title} />
|
<meta name="twitter:title" content={title} />
|
||||||
<meta name="twitter:description" content={description} />
|
<meta name="twitter:description" content={description} />
|
||||||
</head>
|
</head>
|
||||||
<body class="m-0 bg-white text-neutral-900 antialiased">
|
<body class="m-0 bg-white text-neutral-900 antialiased min-h-screen flex flex-col">
|
||||||
<slot />
|
<SiteHeader />
|
||||||
|
<div class="flex-1 flex flex-col min-h-0">
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
<Footer />
|
<Footer />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -15,15 +15,18 @@ import PopupOnboarding from '../components/astro/PopupOnboarding.astro';
|
|||||||
<MobileTabBar />
|
<MobileTabBar />
|
||||||
<PopupOnboarding />
|
<PopupOnboarding />
|
||||||
|
|
||||||
<!-- Desktop : grid 3 colonnes -->
|
<!-- Desktop : grid 3 colonnes (header 64px deja consommes par SiteHeader, on prend le reste) -->
|
||||||
<div class="hidden md:grid md:grid-cols-[320px_1fr_320px] h-screen overflow-hidden">
|
<div
|
||||||
|
class="hidden md:grid md:grid-cols-[320px_1fr_320px] overflow-hidden"
|
||||||
|
style="height: calc(100vh - 64px);"
|
||||||
|
>
|
||||||
<aside class="border-r border-neutral-200 overflow-y-auto"><ColJournal /></aside>
|
<aside class="border-r border-neutral-200 overflow-y-auto"><ColJournal /></aside>
|
||||||
<main class="overflow-hidden"><ColCentre /></main>
|
<main class="overflow-hidden"><ColCentre /></main>
|
||||||
<aside class="border-l border-neutral-200 overflow-y-auto"><ColInsta /></aside>
|
<aside class="border-l border-neutral-200 overflow-y-auto"><ColInsta /></aside>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Mobile : SwipeContainer Vue island - decale de 44px pour la tabbar -->
|
<!-- Mobile : SwipeContainer Vue island - header 48px + tabbar 44px = 92px reserves -->
|
||||||
<div class="md:hidden overflow-hidden" style="height: calc(100dvh - 44px); margin-top: 44px;">
|
<div class="md:hidden overflow-hidden" style="height: calc(100dvh - 48px - 44px); margin-top: 44px;">
|
||||||
<SwipeContainer client:load>
|
<SwipeContainer client:load>
|
||||||
<ColJournal slot="left" />
|
<ColJournal slot="left" />
|
||||||
<ColCentre slot="center" />
|
<ColCentre slot="center" />
|
||||||
|
|||||||
Reference in New Issue
Block a user