[{"data":1,"prerenderedAt":386},["ShallowReactive",2],{"$fb-oIfOJYTgBXNQlhnxr18nUlgda8SrmzOY5iiCd9J1A":3},{"newThing":4,"project":5,"cycle":8,"sections":23,"threads":375,"otherDocs":376,"documents":379,"images":383,"archiveItems":384,"links":385},null,{"id":6,"label":7,"liveBase":4},"design","Design",{"id":9,"num":10,"dir":11,"name":12,"title":13,"focus":14,"status":15,"statusNote":16,"created":17,"completed":4,"mode":18,"report":4,"recordless":19,"thumbnail":4,"imageCount":20,"artifactCount":21,"lastActivity":17,"hasPickup":19,"hasInitialPrompt":22},"c119",119,"c119.logo-downloads","logo-downloads","Logo Downloads","Downloadable logos on `\u002Fbrand\u002Flogo`. Pick a logo, a format (SVG · PNG · GIF · JPG, in that order of preference) and a color (White · Black · Grape), then download a pre-built file generated from black master SVGs.","active","deployed 2026-10-20 — `d5a1b588b` live at \u002Fbrand\u002Flogo: five masters, 195 files, 4 raster sizes","2026-10-20","formula (applying the brand's logo rules as a build step)",false,0,2,true,[24,38,65,142],{"key":25,"title":26,"empty":19,"ast":27},"why","Why",{"type":28,"children":29},"root",[30],{"type":31,"tag":32,"props":33,"children":34},"element","p",{},[35],{"type":36,"value":37},"text","The logo page describes the logo but has nothing to take away. \"Always pull from the Figma master\" sends everyone without Figma access to ask for a file.",{"key":39,"title":40,"empty":19,"ast":41},"objective","Objective",{"type":28,"children":42},[43],{"type":31,"tag":32,"props":44,"children":45},{},[46,48,55,57,63],{"type":36,"value":47},"A Download section on ",{"type":31,"tag":49,"props":50,"children":52},"code",{"className":51},[],[53],{"type":36,"value":54},"\u002Fbrand\u002Flogo",{"type":36,"value":56}," that serves every logo × format × color as a static file, built by one script from grape and duotone masters in ",{"type":31,"tag":49,"props":58,"children":60},{"className":59},[],[61],{"type":36,"value":62},"brand\u002Flogos\u002Fmasters\u002F",{"type":36,"value":64},". Adding a master and re-running the script is the whole maintenance story.",{"key":66,"title":67,"empty":19,"ast":68},"scope","Scope",{"type":28,"children":69},[70],{"type":31,"tag":71,"props":72,"children":73},"ul",{},[74,85,112,131],{"type":31,"tag":75,"props":76,"children":77},"li",{},[78,83],{"type":31,"tag":49,"props":79,"children":81},{"className":80},[],[82],{"type":36,"value":62},{"type":36,"value":84},": grape and duotone master SVGs (source of truth)",{"type":31,"tag":75,"props":86,"children":87},{},[88,94,96,102,104,110],{"type":31,"tag":49,"props":89,"children":91},{"className":90},[],[92],{"type":36,"value":93},"scripts\u002Fbuild-logos.mjs",{"type":36,"value":95},", ",{"type":31,"tag":49,"props":97,"children":99},{"className":98},[],[100],{"type":36,"value":101},"package.json",{"type":36,"value":103}," (",{"type":31,"tag":49,"props":105,"children":107},{"className":106},[],[108],{"type":36,"value":109},"npm run logos",{"type":36,"value":111},")",{"type":31,"tag":75,"props":113,"children":114},{},[115,121,123,129],{"type":31,"tag":49,"props":116,"children":118},{"className":117},[],[119],{"type":36,"value":120},"public\u002Fbrand\u002Flogos\u002F",{"type":36,"value":122},": generated files; ",{"type":31,"tag":49,"props":124,"children":126},{"className":125},[],[127],{"type":36,"value":128},"app\u002Fdata\u002Flogo-downloads.json",{"type":36,"value":130},": the manifest the page reads",{"type":31,"tag":75,"props":132,"children":133},{},[134,140],{"type":31,"tag":49,"props":135,"children":137},{"className":136},[],[138],{"type":36,"value":139},"app\u002Fpages\u002Fbrand\u002Flogo.vue",{"type":36,"value":141},": Download section, copy reconciled",{"key":143,"title":144,"empty":19,"ast":145},"key-changes","Key Changes",{"type":28,"children":146},[147],{"type":31,"tag":71,"props":148,"children":149},{},[150,161,187,292,318],{"type":31,"tag":75,"props":151,"children":152},{},[153,159],{"type":31,"tag":154,"props":155,"children":156},"strong",{},[157],{"type":36,"value":158},"kick-off (2026-10-20):",{"type":36,"value":160}," cycle created; plan written with decisions D1–D8; waiting on the black master SVGs.",{"type":31,"tag":75,"props":162,"children":163},{},[164,169,171,177,179,185],{"type":31,"tag":154,"props":165,"children":166},{},[167],{"type":36,"value":168},"masters (2026-10-20):",{"type":36,"value":170}," the masters are grape and duotone, not black. The first one is in as ",{"type":31,"tag":49,"props":172,"children":174},{"className":173},[],[175],{"type":36,"value":176},"brand\u002Flogos\u002Fmasters\u002Fstacked.svg",{"type":36,"value":178},", single-color ",{"type":31,"tag":49,"props":180,"children":182},{"className":181},[],[183],{"type":36,"value":184},"#AB86F6",{"type":36,"value":186},", which sets the Grape download color (D1). Flattening the duotone masters to one color is D2b. The rest are still being exported from Illustrator.",{"type":31,"tag":75,"props":188,"children":189},{},[190,195,197,203,205,211,212,218,219,225,226,232,234,240,242,248,250,255,256,261,263,268,270,275,277,282,284,290],{"type":31,"tag":154,"props":191,"children":192},{},[193],{"type":36,"value":194},"build (2026-10-20):",{"type":36,"value":196}," Mark re-exported five masters as ",{"type":31,"tag":49,"props":198,"children":200},{"className":199},[],[201],{"type":36,"value":202},"logo-1…5.svg",{"type":36,"value":204},". All are clean paths: two in grape, three duotone (a grape mark with an unfilled wordmark, which renders black, and the two never overlap). They're saved as ",{"type":31,"tag":49,"props":206,"children":208},{"className":207},[],[209],{"type":36,"value":210},"symbol",{"type":36,"value":95},{"type":31,"tag":49,"props":213,"children":215},{"className":214},[],[216],{"type":36,"value":217},"stacked-caps",{"type":36,"value":95},{"type":31,"tag":49,"props":220,"children":222},{"className":221},[],[223],{"type":36,"value":224},"stacked",{"type":36,"value":95},{"type":31,"tag":49,"props":227,"children":229},{"className":228},[],[230],{"type":36,"value":231},"lockup",{"type":36,"value":233}," and ",{"type":31,"tag":49,"props":235,"children":237},{"className":236},[],[238],{"type":36,"value":239},"lockup-caps",{"type":36,"value":241},"; ",{"type":31,"tag":49,"props":243,"children":245},{"className":244},[],[246],{"type":36,"value":247},"brand\u002Flogos\u002Flogos.json",{"type":36,"value":249}," holds the names, labels and Drive source files. ",{"type":31,"tag":49,"props":251,"children":253},{"className":252},[],[254],{"type":36,"value":93},{"type":36,"value":103},{"type":31,"tag":49,"props":257,"children":259},{"className":258},[],[260],{"type":36,"value":109},{"type":36,"value":262},") builds 5 logos × 3 colors × 4 formats = 60 files, 2.1 MB, in ",{"type":31,"tag":49,"props":264,"children":266},{"className":265},[],[267],{"type":36,"value":120},{"type":36,"value":269},", plus ",{"type":31,"tag":49,"props":271,"children":273},{"className":272},[],[274],{"type":36,"value":128},{"type":36,"value":276},". A Download section on ",{"type":31,"tag":49,"props":278,"children":280},{"className":279},[],[281],{"type":36,"value":54},{"type":36,"value":283}," offers logo cards, a Format and a Color UxTabGroup, a preview of the actual file on its matte, and the filename, size and Download. Checked: contact sheet by eye, all 60 files serve 200 with the right MIME types, dark mode, 375 px. The site nav overflowing at phone width predates this cycle, as does a hydration warning also on ",{"type":31,"tag":49,"props":285,"children":287},{"className":286},[],[288],{"type":36,"value":289},"\u002Fbrand\u002Fcolors",{"type":36,"value":291},". Uncommitted.",{"type":31,"tag":75,"props":293,"children":294},{},[295,300,302,308,310,316],{"type":31,"tag":154,"props":296,"children":297},{},[298],{"type":36,"value":299},"tweaks (2026-10-20):",{"type":36,"value":301}," the pickers are now labelled \"Select a logo \u002F format \u002F size \u002F color\". PNG, GIF and JPG come in four sizes, 256, 512, 1024 and 2048 px on the long edge, each rendered straight from the vector. The size picker shows only for those three formats and defaults to 1024. Files are named ",{"type":31,"tag":49,"props":303,"children":305},{"className":304},[],[306],{"type":36,"value":307},"qpoint-\u003Cid>-\u003Ccolor>-\u003Csize>.\u003Cext>",{"type":36,"value":309},"; SVG keeps ",{"type":31,"tag":49,"props":311,"children":313},{"className":312},[],[314],{"type":36,"value":315},"qpoint-\u003Cid>-\u003Ccolor>.svg",{"type":36,"value":317},". There are now 195 files, 3.7 MB, and all serve 200. Uncommitted.",{"type":31,"tag":75,"props":319,"children":320},{},[321,326,328,334,336,342,344,350,352,358,360,365,367,373],{"type":31,"tag":154,"props":322,"children":323},{},[324],{"type":36,"value":325},"ship (2026-10-20):",{"type":36,"value":327}," committed ",{"type":31,"tag":49,"props":329,"children":331},{"className":330},[],[332],{"type":36,"value":333},"d5a1b588b",{"type":36,"value":335},", staging only the c119 entry in CYCLES.md (the c115 edit there belongs to another session). ",{"type":31,"tag":49,"props":337,"children":339},{"className":338},[],[340],{"type":36,"value":341},"npm run deploy",{"type":36,"value":343}," → deploy ",{"type":31,"tag":49,"props":345,"children":347},{"className":346},[],[348],{"type":36,"value":349},"4da9fcbba",{"type":36,"value":351},". ",{"type":31,"tag":49,"props":353,"children":355},{"className":354},[],[356],{"type":36,"value":357},"_deploy.json",{"type":36,"value":359}," on design-f39.pages.dev shows ",{"type":31,"tag":49,"props":361,"children":363},{"className":362},[],[364],{"type":36,"value":333},{"type":36,"value":366},", layer 0.9.33, 25 uncommitted files from other work. ",{"type":31,"tag":49,"props":368,"children":370},{"className":369},[],[371],{"type":36,"value":372},"\u002Fbrand\u002Flogo\u002F",{"type":36,"value":374}," serves 200 and all 195 files serve 200 with the right MIME types.",[],[377,378],"initial-prompt.md","plan.md",[380,381],{"file":377,"title":13},{"file":378,"title":382},"plan: Logo Downloads",[],[],[],1794599407694]