From 276a8287cbfb45b7c3774ae88eea4ee2132b2fd7 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 18:15:24 +0000 Subject: [PATCH] =?UTF-8?q?Refonte=20:=20mod=C3=A8le=20charg=C3=A9,=20attr?= =?UTF-8?q?ibution,=20ombres,=20fl=C3=A8che,=20favicon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Retours sur la refonte, cinq corrections. Modèle affiché Le sélecteur de l'en-tête ne montrait que le PRESET actif — or un preset n'est « actif » que si son empreinte correspond exactement à la configuration. Une configuration écrite à la main, héritée de l'image ou modifiée d'un cran depuis le dernier preset n'en désigne aucun, et l'en-tête restait muet alors qu'un modèle tournait. Il retombe désormais sur le nom du fichier de la configuration active (loadCfg le lui donne), et l'infobulle porte le chemin complet. Attribution « fork de AJEAN » revient sous le nom de l'app, dans l'en-tête de la barre latérale, au lieu du pied de la zone défilante. Ombres Les bulles du fil et la carte de saisie portent une vraie ombre douce (--shadow-card), comme la maquette — le filet de 1 px ne les décollait pas du fond. Bouton d'envoi Chevron sauge sur fond transparent, à la place de la pastille verte pleine : c'est le dessin de la maquette, et il suit alors la même charte que ses voisins (dépôt, fichiers). Favicon Carré sauge (#5E7F5A) au lieu du carré noir, aux quatre endroits qui le dessinent : favicon SVG, icône d'accueil iOS, icône du .exe (icon.ico) et PNG macOS — tous rendus depuis sys_brand_icon.go, seule source du dessin. La variante « template » de macOS reste noire : le système ne lit que son alpha. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01LPyFxVHNAN9u5pVzSYMwjd --- cmd/loki/icon.ico | Bin 2730 -> 2850 bytes cmd/loki/icon.png | Bin 7918 -> 7969 bytes internal/loki/sys_brand_icon.go | 11 ++- internal/loki/ui/index.html | 102 +++++++++++++++++++-------- internal/loki/ui/src/index.tmpl.html | 15 ++-- internal/loki/ui/src/js/05-status.js | 3 + internal/loki/ui/src/js/18-shell.js | 62 +++++++++++----- internal/loki/ui/src/styles.css | 22 ++++-- 8 files changed, 152 insertions(+), 63 deletions(-) diff --git a/cmd/loki/icon.ico b/cmd/loki/icon.ico index febca2ce4b8f66981dcad5b22074596f1445c081..0d5030ab54a2f10e5d0a091c70d13d32f48d1f60 100644 GIT binary patch literal 2850 zcmd^Bc~nzZ8ow_IAwZBINJBuAL!D9_im6z(Y7%x8M5wkbWl4a7iUd#s$oj@If()Ce zR2B;rL6Ncz3dkB|1kVHog_1DrG71ifP}zx)xh&4Hb9(H|Y0sHI=AHY_{r30!zV~}K z0RRDbKq3LS(?9|Mzz^Ou+PdBdWeL3L^mTm($~O@JSgdvZ0F=MQ0Dz+Fx(AfUu`mc; ztMvwO09fMzIOphKtE@;-gl6Ua`>Z~LJA5J_5uguHr)3P>@u5z0xwn8k9< zaDPZ^L}4+RY~r*h)@ChtsSh&EZAp$1_lkfX=^Y}MMkc+7ykwZ3llQyB-0!R z8lM>W#8+mG2b$J-*w0jJ52z+%Ii|bVlzjr*t@IDI`4+{9l2)d7;(cQ)wbD4gCA%9b z*hJ>>Z(#BL$o4JwFKX0__-MkqUXb#{NuJn%P5(4$22ZQcB6miX%-qUFOclpp5Pa+5 z*dTb%DIM!rcR@Qg!aHq09Nl^{j#s6NXF$sUpZA#PGSl%9vK z8z@ZA>ucT_xjzf%ckHR3IF#S8nCKnmHb%k9EtMU6;VS%-IGwuIbHB+BAH9>9l3(bV z1^ukGo^Kut8H6-b-RL>TN%4#$$(ncclHBc!C-mfQKfJ19ZZqWKxHbFE*mO!~V_QO} zrLhNprMA&_I&S1--E3*^Q<_~!M+RY9$yE@Z!mSQ7H;T3mP~K%IIUf6+qR&{bVLm11 zem%4B^`>-S22yaH$kFZSCe~q3R>Za`rAIBZ&jM6hUXC_<#meskTTvU#IM}_JC7*x( z?dbQBP(V@0$9ArU6g8mb+DT93uS`1rOwPg6NTgH7Ce}|SF0D5k*GJB=pBN-toTPAq=_83#pa1&Bu<8b}J=MNP4y*Av>WZ z%F{R;^A`o00|=4tkQwQ+a=}v^Nf$Li){U4%wV#-{mxkm;Rn&Q=bMy0gX;6vRbd?G6 z&J0-j-;4bBrkawxq*B@U6aK*)VE@ySpY{(9>uG5;J(BqO4ZQA`JVB#IqpS-bO8&>)R?a&v z6Bs!2-c2s}MZ=S9ja=?0Z@`}v+_epI^>Vmf2h>?3&fTAD6zdm$rANDKB*ksM!Rj(O zC#j5S3PL2W@A#ML&dUPZN4r`CUu+{X^#fjN<`jN_r}h}P83j+{ z*$bRxQ@_a~K#nC(^k_DifwR==kxbWy1+9C-Enyx@2K0$?z;AL_2Q|zSeT9Z*rZ8e| zB*XQJI%rXm?&A4%;Q3Q6jDuMoX((xq3;I_og2wz7d;yWE-4azLRs;72iD(}+^;x%l zAE1fzK<)C#<-zPgEfBw~3ae`O4HCefl20J!$8RA z3u}%BW5FaB=m2RL_iPM?CF%tt3_Gu={pB@f7LM&z^ho^oLqHXcsrCJ0XC#({h^p=U zyWgk9d&Cql8G9Srqtu7pgxoRbAb6^=wYXXLa~OyfXszSngJNMg*(bF(hZoVP#DDd? zA=H0)3*QI`vZGoxv|Rc?yMM8O_oLRAgyBfLpdU&~#TKBebk?+S$+(`xKNiqjpd52c j4NI0rG~IEIavFY6J!jV|Tl){9_F6FeAi+HI?ZfS#3X1-4 literal 2730 zcmd^9c~nzp7XRK$LNE}(gDeBqq$(~Q!8k6gLcjo}9TwY;u@aadj#3L55FsFtJT(eE zsJJUjS?X9@6g1T)K%k)$%6JA97(}9x5H@9zHGsqr-h2Uij&sIw&dljK^T)h%-}~0e&-w_iFe0!rHGxl>7LS4pD~RR$NlL-) zC=A2Rdys$t%BG`;wNu`=yMfueBphFne%Ewr!-WWjxp}QamIysn>Qb!4qE4UBEmqU* z7$^*l<5OXaoO;a~;O77c@(*E^`*DxFAvhhn>2tvo4;`9-;NX1l7Z-gg7{i<>%f|5o ztP;Oc@`uGL#e*QxZ?>%|32b166JC)?<2_$73zyT+`h>0J*V-c8%Pz0#%E&}!yw?|D zgryolzDxLeM?%t&;9ZD&5W#s5ZZ`Jhz3Yd)5&ycOp6TeTGhOD!WdD{!^}oScEr#*m zmMpA2V9X`UMs=AGe7lgW@<+;1rn#syxKA%1xAn@}^Z8X}FaM%0#OYeD$;wyzizd&x zJC~b;QX_{dwTw>|b)5S2wuLA*_gqKw! zygp&k4eAmUj7qNFO6ui9hCc3%1&QR>3Jx%P@n&PX3KyrX^#v3tV#U9 z_H2vnQHpO?jka$Y-G8xR!gJi3iyQ%@Ar4{Wk!l8eQ_1DrHcdPrUe)_g!asP+}0|3nXn#PBsiud(MDY)czT zm=|)B{nJ{dXIqM|NWED=TC#Gf$Ejf?*QubY?5}$tzZaS|OEwlybHVy(zanq=-xLpn zer&FI3hyY``6zjzcu##pRAKf3&29s;(t;1ZDMlsYY_n>9WA2XoJu)2?9Un|S`4|72 z3ik$n4fdn(>z1@agXM9WqBCM-b>ze8Znx^zGas4zNZL>ORDpV0$MEqq#9p{8Kb%M6 z&ggFNs%){b=aW3u#tssrM2e)mY#eE=e_1Bv?q46CMy%UP*0gtM?^K#ut;XDtI_E+> z&V^Y3x`^|55j_MXpjp=cU>YuMB-=mgPB4TjF7>tuCHNmW#&_SyeZ%YjrHMMZT|AkS zWT5@0!5W5=WwWl%zdF9K$A6ut4A-4u1ZOYsU}*-i!fW>sCh6Q0@)3OTz7#MD3^T2S*mukEF)(bj@vGxjp;|`%I=>MbYkehH^(x&e4RW>Ve+} zCQ$|O_eD;Y+t$6Do)F042*z=oM8h9$UYz>&{(%!5j_SGo;T-q|4u9g2h5l)e2vO~~ z57^GxfUniR-};%qO5`@yXqR?#GZ?*pTU*Z=)r|?BHCqDDya1nC_7z&aGD>3+IJ5go zrrx5x=ZyT`XjJ7kNow8t4e2TE<&N#zOh@n7eV59H$F@;vQ@8u~3S)JO6SQP$f4!vi zi%!MZjuC#gS?zSxiB?s(Bk0Z)?}&>J1}A80MMHRcucxR}p+B_0B^ z>SM=@RiNJT`K^@e9}>7T@h;h0WGjt^iFjEg>ZiN{rYABJ^~s73Qtfo7!!YkL8<@)M zK+$Zxv#aY6irorFM*A(>CK@FXz-o#Q(qAdQH;5DLfGC5Cg$iS)Ym%V82#5?6OiSA( z;HgO<3jJBm*p-$Vwe;GS0VlesOvfs6O}F5Fc}Y_J z3>{4Z#-qs5+c1gT8^3dW+Vu`*T5Eq@DxFNJvBL~;5>**a(KuikaaH22ujyPyUJ@Zkr)b`F*Pb<#((J_7#d|q{4qm#dp#tPla$E;dpGn N+hhr~ng9Ce`aA5;)Ib0L diff --git a/cmd/loki/icon.png b/cmd/loki/icon.png index 597bd606e2e3f2798ac36372c61e263ae554398f..31c03993d7f4781406aa17f6bf7092a85670d555 100644 GIT binary patch literal 7969 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 literal 7918 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 Gy#06lJ_4Ko diff --git a/internal/loki/sys_brand_icon.go b/internal/loki/sys_brand_icon.go index 0f75171..4b64058 100644 --- a/internal/loki/sys_brand_icon.go +++ b/internal/loki/sys_brand_icon.go @@ -2,12 +2,15 @@ package loki // sys_brand_icon.go — l'icône de la marque Loki, rendue à la volée. // -// RÉPLIQUE EXACTE du favicon de l'UI web : carré à coins arrondis NOIR + « j » +// RÉPLIQUE EXACTE du favicon de l'UI web : carré à coins arrondis SAUGE + « j » // blanc (rects (6,3) (6,5) (4,7) sur une grille 12x12). Une seule source pour // tous les usages — zone de notification Windows, barre de menus macOS, icône du // .exe — pour qu'ils ne puissent plus diverger comme quand le favicon est passé // au noir en laissant les icônes système en bleu. // +// La sauge est --accent de l'interface (#5E7F5A) : l'icône de l'onglet et celle +// du bureau portent la couleur de l'app, pas un carré noir anonyme. +// // Aucun asset binaire à committer : tout est dessiné ici, et l'icône du .exe est // produite par `go generate ./cmd/loki` (voir tools/gen-icon). @@ -22,6 +25,8 @@ import ( const trayIconSize = 32 var ( + // brandSage = --accent du thème clair. Le blanc du « j » s'y lit à 4,9:1. + brandSage = color.RGBA{0x5e, 0x7f, 0x5a, 0xff} brandBlack = color.RGBA{0x00, 0x00, 0x00, 0xff} brandWhite = color.RGBA{0xff, 0xff, 0xff, 0xff} brandClear = color.RGBA{0, 0, 0, 0} @@ -80,9 +85,9 @@ func encodePNG(img *image.RGBA) []byte { return buf.Bytes() } -// BrandIconPNG rend l'icône de marque (noir + « j » blanc) en PNG de n pixels. +// BrandIconPNG rend l'icône de marque (sauge + « j » blanc) en PNG de n pixels. // Exporté pour le générateur d'icône du .exe (tools/gen-icon). -func BrandIconPNG(n int) []byte { return encodePNG(brandIconImage(n, brandBlack, brandWhite)) } +func BrandIconPNG(n int) []byte { return encodePNG(brandIconImage(n, brandSage, brandWhite)) } // brandTemplatePNG rend la variante « template » attendue par macOS : seule la // couche alpha compte, le système colore la forme selon le thème de la barre de diff --git a/internal/loki/ui/index.html b/internal/loki/ui/index.html index 90672cf..f5825c2 100644 --- a/internal/loki/ui/index.html +++ b/internal/loki/ui/index.html @@ -12,8 +12,8 @@ - - + +
+

+ +
fork de AJEAN
+
…
@@ -2009,10 +2022,6 @@ button:active:not(:disabled){transform:translateY(1px)}
- -
fork de AJEAN