From 5c0de805c625cb9375e5ba45fa59838438257808 Mon Sep 17 00:00:00 2001 From: tamakyi Date: Thu, 22 Oct 2026 11:06:13 +0800 Subject: [PATCH] =?UTF-8?q?new-sakura=EF=BC=9A=E8=8A=B1=E6=9E=9D=E6=9C=9D?= =?UTF-8?q?=E5=90=91=E4=B8=8E=E5=88=86=E5=8F=89=E4=BF=AE=E6=AD=A3=EF=BC=8C?= =?UTF-8?q?=E7=B4=A0=E6=9D=90=E5=8C=85=E4=B8=80=E9=94=AE=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=88=B0=E5=AF=B9=E8=B1=A1=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gen_new_sakura.py:花朵加各自旋转角(原来一律朝上,像贴纸);分叉从垂直下垂改成向右上斜; 新增 --asset-base / --out —— 填前缀就引用对象存储位图,留空仍是内联 SVG。 - export_assets.py(新增):从 gen_new_sakura 的同一份 SVG 出图(直接 import,不另画一套), 用无头 Chrome 透明底渲染后转 WebP;--upload 一次传 CSS + 5 张 webp + 生成的 INSTALL.txt, 公开地址按 data/r2.txt 的 image_bucket_cdn_host(与 app.ini 同名)拼。 - serve.upload_files 支持逐文件 cacheControl。原来硬编码 immutable,而 INSTALL.txt 与镜像 CSS 的键不带版本 —— 重新生成后浏览器/CDN 一年内都还是旧内容。现在位图 1 天、CSS 5 分钟、 README 60 秒;selftest 补一条覆盖断言。 - 文档更正两处事实:①自定义域 r2.337845818.best 实测可匿名读(S3 endpoint 仍 403); ②服务端有 gzip,内联版 51KB 实际传输 3.9KB,比位图版(2.7KB + 5 图 48.9KB)小得多, 所以「换位图省 CSS 体积」不成立,位图只在素材要复用到非 CSS 场景时才有意义。 另记:曾以 immutable 传过的键必须去控制台清缓存,重传不会让边缘失效。 --- .workbuddy/memory/2026-10-22.md | 37 +++++ dev/theme-builder/index.html | 3 +- dev/theme-builder/selftest_upload.py | 11 ++ dev/theme-builder/serve.py | 6 +- dev/theme-tools/export_assets.py | 219 +++++++++++++++++++++++++++ dev/theme-tools/gen_new_sakura.py | 50 ++++-- docs/theme-new-sakura.md | 58 ++++++- static/css/themes/new-sakura.css | 8 +- 8 files changed, 372 insertions(+), 20 deletions(-) create mode 100644 .workbuddy/memory/2026-10-22.md create mode 100644 dev/theme-tools/export_assets.py diff --git a/.workbuddy/memory/2026-10-22.md b/.workbuddy/memory/2026-10-22.md new file mode 100644 index 0000000..d737ae7 --- /dev/null +++ b/.workbuddy/memory/2026-10-22.md @@ -0,0 +1,37 @@ +# 2026-10-22 + +## new-sakura 主题:纯 CSS 樱花 + +用户要求「用编辑器生成 new-sakura,CSS 做樱花、每页位置不同、上传到已配好的 S3」。 + +- **结论:生成器做不了这个** —— 它的装饰层只支持图片素材(导出打 zip / 传对象存储), + 没有内联 SVG 图层。所以改成手写主题 CSS(结构完全遵循生成器输出:令牌 + 10 槽 deco + + scope 覆盖),生成器只用来做视觉验证。 +- 实现:`dev/theme-tools/gen_new_sakura.py` 生成 `static/css/themes/new-sakura.css`。 + 花/瓣/枝/底纹都是内联 SVG 的 data URI(`quote(svq, safe="")` 全编码,避免 URI 里的 + 逗号被 `TestDecoSlotCount` 当成分层符)。CSS 50KB(gzip ≈12KB)。 +- 六个 scope 各一套 `--tb-deco` 位置;窄屏(≤640px)装饰全关、底纹缩到 200px; + 深色换亮粉 + 关底纹(浅粉压深底=噪点)。 +- 调参踩到的:①花枝 `auto 390px` 放右上角时可见部分只剩一团花 → 缩到 300px 并内移; + ②枝上 5 朵 scale≈1 的花是一串糖葫芦 → 改成 8 朵 0.4~0.62; + ③底纹 260px 双花双瓣读成「包装纸」→ 改成 300px 一朵花 + 两片瓣、各自错位。 +- 对比度:primary 候选 `#c14a72` 只有 4.39:1,压深到 `#b8436a`(4.87);muted `#77626a`(5.27); + 深色 `#ff93b4`(8.17)/`#ab9099`(5.82)。 +- i18n 四份词典加 `theme.name.new-sakura`(插在 shiroko 之后,gofmt_keep_crlf 后每份只 +1 行); + `conf/app.sample.ini` 的 available 登记。 +- ⚠️ 本机 Chrome/Edge 的 localStorage 里**没有**生成器的 S3 配置记录,项目也没有 + `conf/app.ini` → 「已预先配置好的 S3」在本机取不到,上传这一步需要用户给凭据。 + 纯 CSS 主题本身零素材,严格来说 S3 无事可做(已向用户确认)。 + +**R2 自定义域可用 + 素材包一键上传(接上一条)** +- `r2.337845818.best` 实测公开可读(7 个对象全部 200、Content-Type 正确);桶的 S3 endpoint 仍 403。 +- 樱花位图从 `gen_new_sakura.py` 的同一份 SVG 导出(`export_assets.py` 直接 import 它,不另画), + `--upload` 一次传 CSS + 5 张 webp + 生成的 INSTALL.txt(域名/体积写实数)。 +- `serve.upload_files` 支持逐文件 `cacheControl`:原来硬编码 immutable,而 + `INSTALL.txt` / 镜像 CSS 的键不带版本 → 改了看不到。现在位图 1 天、CSS 5 分钟、README 60 秒。 +- ⚠️ **CF 边缘缓存不会因为重传而失效**:第一版以 immutable 传过,`cf-cache-status: HIT`、Age>800, + 重传后拿到的仍是旧副本(带 `?cb=` 才是新内容)。清缓存只能去控制台按 URL 清。 +- ⚠️ **gzip 纠错**:服务端 `internal/route/gzip.go` 会压 CSS,内联版 51KB 实际传输 **3.9KB**, + 位图版 2.7KB + 5 张图 48.9KB ≈ 51.6KB。所以"换位图省 CSS 体积"是错的 —— + 位图唯一的理由是素材要给非 CSS 场景复用。文档与 INSTALL.txt 都已改。 +- `image_bucket_cdn_host` 沿用 app.ini 同名键(只写主机名),`export_assets.py` 据此拼公开地址。 diff --git a/dev/theme-builder/index.html b/dev/theme-builder/index.html index 13367d1..013b8c8 100644 --- a/dev/theme-builder/index.html +++ b/dev/theme-builder/index.html @@ -1901,7 +1901,8 @@ function renderHostEditor(){ tip.className = 'hint'; tip.textContent = can === false ? '当前是普通静态服务,没有上传接口。用 python dev/theme-builder/serve.py 启动生成器才能上传。' - : '密钥只存在当前标签页(sessionStorage)与内存里,不进工程文件、不进导出 zip。' + : '密钥只存在当前标签页(sessionStorage):刷新还在,关掉标签页就没了,也不进工程文件与导出 zip。' + + '想复用就别关标签页,或用脚本直传(见 dev/theme-tools/export_assets.py)。' + '上传成功后会自动把「素材前缀」填成上面的图片地址。'; el.appendChild(tip); diff --git a/dev/theme-builder/selftest_upload.py b/dev/theme-builder/selftest_upload.py index af8f818..d127672 100644 --- a/dev/theme-builder/selftest_upload.py +++ b/dev/theme-builder/selftest_upload.py @@ -63,6 +63,17 @@ def main(): check("Content-Type = image/webp", ctype == "image/webp", str(ctype)) check("Cache-Control = immutable", "immutable" in (cache or ""), str(cache)) + # 2b) 逐文件覆盖缓存头:README/清单这类「键不变、内容会变」的文件不能 immutable + serve.upload_files(cfg, [ + {"key": "shiroko/INSTALL.txt", "contentType": "text/plain; charset=utf-8", + "cacheControl": "public, max-age=60", + "data": base64.b64encode(b"readme").decode()}, + ]) + _, _, cc = MockS3.store.get("themes/shiroko/INSTALL.txt", (b"", None, None)) + check("可覆盖 Cache-Control", cc == "public, max-age=60", str(cc)) + # 这一步只为验头,别让它污染后面的对象计数 + MockS3.store.pop("themes/shiroko/INSTALL.txt", None) + # 3) 错误密钥:HEAD 拿不到响应体(规范如此),只能按状态码归因; # 真正能读到 S3 错误码的是带 body 的 PUT,所以用上传路径验证还原能力。 bad = serve.S3Config(dict(base, accessKey="BADKEY")) diff --git a/dev/theme-builder/serve.py b/dev/theme-builder/serve.py index a173a42..ef54f97 100644 --- a/dev/theme-builder/serve.py +++ b/dev/theme-builder/serve.py @@ -326,8 +326,10 @@ def upload_files(cfg, files): raise ValueError("内容为空") ctype = str(f.get("contentType") or "application/octet-stream") # 素材键里带内容版本(导出时由 id 决定),内容不会原地变化 → immutable。 - status, _, body = s3_request( - cfg, "PUT", key, data, ctype, "public, max-age=31536000, immutable") + # 但清单/说明这类「键不变、内容会变」的文件不能 immutable,否则一年内看不到更新, + # 所以允许逐个文件覆盖。 + cache = str(f.get("cacheControl") or "public, max-age=31536000, immutable") + status, _, body = s3_request(cfg, "PUT", key, data, ctype, cache) if status >= 400: code, msg = _parse_s3_error(body) results.append({"key": key, "name": name, "ok": False, diff --git a/dev/theme-tools/export_assets.py b/dev/theme-tools/export_assets.py new file mode 100644 index 0000000..86e40a2 --- /dev/null +++ b/dev/theme-tools/export_assets.py @@ -0,0 +1,219 @@ +"""把 new-sakura 的内联 SVG 导出成位图,并上传到对象存储。 + +为什么要这一步:主题本身是纯 CSS(SVG 内联在 CSS 里),线上不依赖任何外部素材。 +但对象存储上留一份位图有它的用处: + · 桶开了公开域名后,可以把 CSS 里的 url() 换成绝对地址(注意:服务端有 gzip, + 内联版总传输 3.9KB 比位图版的 51KB 更小,换位图不为省流量); + · 分享卡 / 其它非 CSS 场景只能用位图; + · 换人维护时不用去读那一长串 data URI。 + +用法(项目根): + python dev/theme-tools/export_assets.py # 只导出到 outputs/sakura-assets + python dev/theme-tools/export_assets.py --upload # 导出,并把 CSS + 位图 + INSTALL.txt 传到桶里 +""" +import argparse +import io +import os +import re +import sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +ROOT = os.path.dirname(os.path.dirname(HERE)) +sys.path.insert(0, HERE) +sys.path.insert(0, os.path.join(ROOT, "dev", "theme-builder")) + +import gen_new_sakura as G # noqa: E402 + +OUT_DIR = os.path.join(ROOT, "outputs", "sakura-assets") + +# (文件名, svg 源, 导出像素宽, 高) +def assets(): + p = G.LIGHT + return [ + ("branch-right", G.branch(p["wood"], p["light"], p["deep"], p["heart"], flip=False), 840, 640), + ("branch-left", G.branch(p["wood"], p["light"], p["deep"], p["heart"], flip=True), 840, 640), + ("blossom", G.blossom(p["light"], p["deep"], p["heart"]), 400, 400), + ("petal", G.petal(p["light"]), 240, 336), + ("pattern", G.pattern(p["pattern"]), 600, 600), + ] + + +def render(svg, w, h, out_png): + """用无头 Chrome 渲染成透明底 PNG。 + + 走命令行而不是 Playwright:本机只有 node 版 playwright,python 侧没装; + 而 `--default-background-color=00000000` 正好能给透明底。 + + ⚠️ `--window-size` 不等于 CSS 视口(实测 1080 只有 985),所以窗口开大一圈 + 并让内容居中,再按目标尺寸从中心裁 —— 这样尺寸误差被吸收掉,不必去猜差多少。 + """ + import subprocess + import tempfile + from PIL import Image + + pad = 120 + html = ( + '' + "" + svg + ) + fd, html_path = tempfile.mkstemp(suffix=".html") + os.close(fd) + with open(html_path, "w", encoding="utf-8") as f: + f.write(html) + + chrome = "C:/Program Files/Google/Chrome/Application/chrome.exe" + cmd = [ + chrome, "--headless=old", "--disable-gpu", "--hide-scrollbars", + "--force-device-scale-factor=1", "--default-background-color=00000000", + "--window-size=%d,%d" % (w + pad, h + pad), + "--screenshot=" + out_png, + "file:///" + html_path.replace("\\", "/"), + ] + subprocess.run(cmd, check=True, capture_output=True, timeout=60) + os.remove(html_path) + + img = Image.open(out_png).convert("RGBA") + cw, ch = img.size + left, top = max(0, (cw - w) // 2), max(0, (ch - h) // 2) + img.crop((left, top, left + w, top + h)).save(out_png) + + +def to_webp(png_path, webp_path, quality=92): + from PIL import Image + + img = Image.open(png_path).convert("RGBA") + img.save(webp_path, "WEBP", quality=quality, method=6) + + +def read_r2(path): + cfg = {} + for line in open(path, encoding="utf-8"): + m = re.match(r'^\s*([a-z_]+)\s*=\s*"?([^"\n]*)"?\s*$', line.strip()) + if m: + cfg[m.group(1)] = m.group(2).strip() + return cfg + + +def pack_readme(prefix, object_base, sizes): + """生成包内 INSTALL.txt。域名与体积都写实数,避免 README 与实际脱节。""" + base = (object_base or "").rstrip("/") + total_kb = sum(v for k, v in sizes.items() if k.endswith(".webp")) / 1024 + css_kb = sizes.get("new-sakura.css", 0) / 1024 + urls = "" + if base: + urls = "\n公开地址(已验证可匿名 GET)\n--------------------------\n" + "\n".join( + " %s/%s" % (base, n) for n in ["new-sakura.css"] + [ + "%s.webp" % k for k in ["branch-right", "branch-left", "blossom", "petal", "pattern"]]) + + return """new-sakura(新·樱花)主题包 +============================ + +来源:TamaBox 仓库 static/css/themes/new-sakura.css(生成产物,勿手改) +生成:dev/theme-tools/gen_new_sakura.py(花形/位置/配色都在里面) +位图:dev/theme-tools/export_assets.py(从同一份 SVG 导出,不是另画的) +说明:docs/theme-new-sakura.md +对象前缀:%s/ + +文件 +---- +new-sakura.css 主题本体 %5.1f KB(纯 CSS,樱花是内联 SVG,零外部请求) +branch-right.webp 花枝 840x640 透明底(细端在右上) +branch-left.webp 同上镜像 +blossom.webp 单朵樱花 400x400 透明底 +petal.webp 单瓣 240x336 透明底 +pattern.webp 平铺底纹 600x600 透明底 + 位图合计 %5.1f KB + +怎么用 +------ +线上只需要 new-sakura.css:放进仓库 static/css/themes/,在 conf/app.ini 的 +[theme] available 里加上 new-sakura,再重新 go build(主题 CSS 是编译期 embed, +只重启不重编不会生效)。 + +WebP 不是必需品 —— CSS 里的樱花是矢量,比位图清晰且没有额外请求。留着的用处: + 1) 素材要单独复用:python dev/theme-tools/gen_new_sakura.py --asset-base %s + (CSS 从 %.1f KB 降到 10.6 KB,但多 5 个请求共 48.9 KB,总传输更大) + 2) 非 CSS 场景(分享卡、海报)只能用位图 +%s +注意 +---- +直连桶的 S3 endpoint(*.r2.cloudflarestorage.com)会 403,那里需要签名。 +浏览器直读只能用自定义域 / r2.dev 或 CDN。 + +缓存:位图 1 天、CSS 5 分钟、本文件 60 秒 —— 对象键不带版本,所以**不用** immutable。 +要一年长缓存,得把内容哈希写进文件名(届时 CSS 里的地址也要跟着换)。 +""" % (prefix, css_kb, total_kb, + base or "https://<公开域名>/" + prefix.strip("/"), css_kb, urls) + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--upload", action="store_true", help="导出后上传到 data/r2.txt 里的桶") + ap.add_argument("--prefix", default="themes/new-sakura", help="对象键前缀,默认 themes/new-sakura") + ap.add_argument("--public-base", default="", + help="公开访问的主机(如 https://r2.example.com,不带路径);" + "默认读 data/r2.txt 的 image_public_base 或 image_bucket_cdn_host," + "都没有则在 INSTALL.txt 里写占位") + ap.add_argument("--r2", default=os.path.join(ROOT, "data", "r2.txt")) + args = ap.parse_args() + + os.makedirs(OUT_DIR, exist_ok=True) + files, sizes = [], {} + for name, svg, w, h in assets(): + png = os.path.join(OUT_DIR, name + ".png") + webp = os.path.join(OUT_DIR, name + ".webp") + render(svg, w, h, png) + to_webp(png, webp) + os.remove(png) + size = os.path.getsize(webp) + sizes[name + ".webp"] = size + print("导出 %-13s %dx%d %.1f KB" % (name, w, h, size / 1024)) + files.append((name + ".webp", webp)) + + if not args.upload: + print("\n只导出,未上传(加 --upload 才传)。目录:%s" % OUT_DIR) + return + + import base64 + import serve + + raw = read_r2(args.r2) + # 与 conf/app.ini 同名:image_bucket_cdn_host 只是主机名(不带 scheme) + cdn_host = raw.get("image_bucket_cdn_host", "").strip().strip("/") + public_host = (args.public_base or raw.get("image_public_base") + or ("https://" + cdn_host if cdn_host else "")).rstrip("/") + object_base = ("%s/%s" % (public_host, args.prefix.strip("/"))) if public_host else "" + cfg = serve.S3Config(dict( + endpoint=raw["image_endpoint"], region="auto", bucket=raw["image_bucket"], + prefix=args.prefix, pathStyle=True, + accessKey=raw["image_access_id"], secretKey=raw["image_access_secret"], + )) + # 键名不带版本,就不配 immutable —— 否则重新导出后一年内谁看到的都还是旧图。 + payload = [{"key": name, "name": name, "contentType": "image/webp", + "cacheControl": "public, max-age=86400", + "data": base64.b64encode(open(path, "rb").read()).decode()} + for name, path in files] + + css_path = os.path.join(ROOT, "static", "css", "themes", "new-sakura.css") + css = open(css_path, "rb").read() + sizes["new-sakura.css"] = len(css) + payload.append({"key": "new-sakura.css", "contentType": "text/css; charset=utf-8", + "cacheControl": "public, max-age=300", + "data": base64.b64encode(css).decode()}) + readme = pack_readme(args.prefix, object_base, sizes).encode("utf-8") + payload.append({"key": "INSTALL.txt", "contentType": "text/plain; charset=utf-8", + "cacheControl": "public, max-age=60", + "data": base64.b64encode(readme).decode()}) + + res = serve.upload_files(cfg, payload) + for r in res["files"]: + print(("OK " if r["ok"] else "FAIL ") + r["key"] + ("" if r["ok"] else " " + str(r.get("error")))) + print("\n上传 %d/%d" % (res["total"] - res["failed"], res["total"])) + if object_base: + print("公开地址:%s/" % object_base) + + +if __name__ == "__main__": + main() diff --git a/dev/theme-tools/gen_new_sakura.py b/dev/theme-tools/gen_new_sakura.py index cad5fc1..8396c8f 100644 --- a/dev/theme-tools/gen_new_sakura.py +++ b/dev/theme-tools/gen_new_sakura.py @@ -56,15 +56,16 @@ def branch(wood, light, deep, heart, flip=False): fl = ' transform="translate(420,0) scale(-1,1)"' if flip else "" # 花要比枝小得多、数量多几朵。早先 5 朵 scale≈1 的花配一根细枝,缩到 300px # 显示时是一串糖葫芦;真实樱花枝是"小碎花沿枝密布",所以花收到 0.42~0.62。 + # 第四项是旋转角:一朵朵都朝正上方会像贴纸糊上去的,真实花枝上朝向各异 blossoms = [ - (302, 74, 0.62), (256, 110, 0.55), (214, 138, 0.60), (172, 176, 0.58), - (352, 42, 0.50), (140, 214, 0.46), (116, 246, 0.40), (326, 128, 0.42), + (302, 74, 0.62, 14), (256, 110, 0.55, -22), (214, 138, 0.60, 34), (172, 176, 0.58, -6), + (352, 42, 0.50, 48), (140, 214, 0.46, 20), (116, 246, 0.40, -32), (326, 128, 0.42, 28), ] petals = [(272, 158, 22), (318, 150, -18), (196, 92, 40), (150, 196, -26)] body = [] - for x, y, s in blossoms: + for x, y, s, rot in blossoms: body.append( - f'' + f'' '' % light + "".join(f'' for a in (0, 72, 144, 216, 288)) @@ -81,7 +82,7 @@ def branch(wood, light, deep, heart, flip=False): f'' f'' - f'' + "".join(body) + "" ) @@ -124,7 +125,22 @@ DARK = dict( ) -def uris(p): +def uris(p, asset_base=""): + """asset_base 非空 -> 引用对象存储上的位图(键名与 export_assets.py 的产物一致)。 + + 内联 SVG 是默认:gzip 后约 3.9KB、零额外请求。位图版 CSS 只有 10.6KB,但要多个 + 5 个请求共 ~49KB,总传输反而更大 —— 它存在的理由是素材能被非 CSS 场景复用。 + 换之前先确认桶已对公网可读(自定义域或 r2.dev),否则主题会整片 403。 + """ + if asset_base: + b = asset_base.rstrip("/") + return { + "blossom_l": 'url("%s/blossom.webp")' % b, + "petal_l": 'url("%s/petal.webp")' % b, + "branch_l": 'url("%s/branch-left.webp")' % b, + "branch_r": 'url("%s/branch-right.webp")' % b, + "pattern": 'url("%s/pattern.webp")' % b, + } return { "blossom_l": uri(blossom(p["light"], p["deep"], p["heart"])), "petal_l": uri(petal(p["light"])), @@ -214,9 +230,9 @@ def scope_block(prefix, layers, indent=" "): ) -def build(): - u = uris(LIGHT) - d = uris(DARK) +def build(asset_base=""): + u = uris(LIGHT, asset_base) + d = uris(DARK, asset_base) vars_light = "\n".join([ f" --sk-blossom: {u['blossom_l']};", @@ -368,7 +384,17 @@ html[data-theme="dark"][data-theme-style="new-sakura"] .uk-alert-primary { if __name__ == "__main__": - css = build() - with open(OUT, "w", encoding="utf-8", newline="\n") as f: + import argparse + + ap = argparse.ArgumentParser(description="生成 new-sakura 主题 CSS") + ap.add_argument("--asset-base", default="", + help="引用对象存储位图的前缀,如 https://r2.example.com/themes/new-sakura;" + "留空 = 内联 SVG(默认)") + ap.add_argument("--out", default=OUT, help="输出路径") + args = ap.parse_args() + + css = build(args.asset_base) + with open(args.out, "w", encoding="utf-8", newline="\n") as f: f.write(css) - print("已生成 %s(%.1f KB)" % (OUT, len(css.encode()) / 1024)) + print("已生成 %s(%.1f KB)%s" % (args.out, len(css.encode()) / 1024, + " [位图版]" if args.asset_base else " [内联 SVG]")) diff --git a/docs/theme-new-sakura.md b/docs/theme-new-sakura.md index dbd1a0e..daa57bd 100644 --- a/docs/theme-new-sakura.md +++ b/docs/theme-new-sakura.md @@ -11,7 +11,7 @@ - 换花色只改 `dev/theme-tools/gen_new_sakura.py` 里的一个色值,重跑即得; - 没有额外 HTTP 请求 —— SVG 就在 CSS 里。 -代价是 CSS 有 40~50KB(gzip 后约 12KB)。主题 CSS 走 `StaticVersion` 缓存,一次性开销。 +代价是 CSS 有 51KB(服务端有 gzip,实际传输约 3.9KB)。主题 CSS 走 `StaticVersion` 缓存,一次性开销。 ## 结构 @@ -70,6 +70,62 @@ python dev/theme-tools/gen_new_sakura.py | `--tb-primary` | `#b8436a` (4.9:1) | `#ff93b4` (8.2:1) | 原候选 `#c14a72` 只有 4.39:1,压深 | | `--tb-on-primary` | `#ffffff` (5.2:1) | `#1b1014` (8.9:1) | 主色按钮上的字 | +## 素材包(可选,已传到对象存储) + +主题线上**不需要**任何素材:樱花是内联矢量。但同一个花形也导出成了位图, +放在对象存储上备用(`themes/new-sakura/`,共 7 个对象): + +| 键 | 内容 | +| --- | --- | +| `new-sakura.css` | 主题本体(备份,便于分发) | +| `branch-right.webp` / `branch-left.webp` | 花枝 840×640 透明底(互为镜像) | +| `blossom.webp` | 单朵樱花 400×400 透明底 | +| `petal.webp` | 带缺口的花瓣 240×336 透明底 | +| `pattern.webp` | 平铺底纹 600×600 透明底 | +| `INSTALL.txt` | 包内说明 | + +重新导出 / 上传(`--upload` 会一起传 CSS、位图和生成的 `INSTALL.txt`): + +```bash +python dev/theme-tools/export_assets.py # 只导出到 outputs/sakura-assets +python dev/theme-tools/export_assets.py --upload # 导出并上传,读 data/r2.txt +``` + +`data/r2.txt` 是部署凭据(`image_endpoint` / `image_access_id` / `image_access_secret` / +`image_bucket` / `image_bucket_cdn_host`),**不进版本库**(`.gitignore` 里的 `/data/`)。 +`image_bucket_cdn_host` 与 `conf/app.ini` 同名同义:只写主机名,不带 `https://` 和路径; +没有它时 `INSTALL.txt` 里的公开地址会写成占位符。 + +缓存策略:位图 `max-age=86400`、CSS 镜像 `300`、`INSTALL.txt` `60`。 +这些键**都不带内容版本**,所以刻意不用 `immutable` —— 否则重新导出后,浏览器与 CDN +一年内拿到的都还是旧图。想要一年长缓存,得把内容哈希写进文件名(CSS 里的地址跟着换)。 + +⚠️ 若某个键曾经以 `immutable` 传过(本主题第一版就是这样),CDN 会一直给旧副本, +改完必须去控制台按 URL 清一次缓存,光重传没用。 + +### 位图版(引用对象存储) + +桶绑了自定义域 `r2.337845818.best`(实测匿名 GET 200、`image/webp`、大小一致), +所以可以把 CSS 从内联切到位图: + +```bash +python dev/theme-tools/gen_new_sakura.py \ + --asset-base https://r2.337845818.best/themes/new-sakura \ + --out static/css/themes/new-sakura.css +``` + +| 版本 | CSS | gzip 后 | 额外请求 | 清晰度 | +| --- | --- | --- | --- | --- | +| 内联 SVG(默认) | 51.2KB | **3.9KB** | 0 | 矢量,任意 DPR | +| 位图 | 10.6KB | 2.7KB | 5 个 webp,共 48.9KB | 2 倍图 | + +服务端挂了 gzip(`internal/route/gzip.go`),所以内联版**总传输 3.9KB**,比位图版的 +2.7 + 48.9 = 51.6KB 小一个数量级 —— 换位图省不了流量,只是把开销从 CSS 挪到图片。 +位图版唯一正当的理由是**素材要单独复用**(分享卡、海报、其它系统)。 + +⚠️ 直接连桶的 S3 endpoint(`*.r2.cloudflarestorage.com`)会 403,**只有自定义域/r2.dev 可匿名读**。 +切之前先 `curl -I` 验一下前缀;切完 `go build` 部署,否则 embed 里还是旧的。 + ## 为什么不用主题生成器出图 生成器的装饰层只支持「图片素材」(导出时打进 zip 或传对象存储),没有内联 SVG 图层。 diff --git a/static/css/themes/new-sakura.css b/static/css/themes/new-sakura.css index 8e85912..bbed1c7 100644 --- a/static/css/themes/new-sakura.css +++ b/static/css/themes/new-sakura.css @@ -45,8 +45,8 @@ html[data-theme-style="new-sakura"] { 否则 6 套位置会把 4 个 data URI 重复 20 多次,文件直接翻倍。 */ --sk-blossom: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20100%20100%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227.5%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%223%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fsvg%3E"); --sk-petal: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2040%2056%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fsvg%3E"); - --sk-branch-l: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20420%20320%22%3E%3Cg%20transform%3D%22translate%28420%2C0%29%20scale%28-1%2C1%29%22%3E%3Cpath%20d%3D%22M2%20318C74%20276%20112%20212%20176%20184c62-28%20102-72%20146-118%2026-28%2052-46%2082-58%22%20fill%3D%22none%22%20stroke%3D%22%239a7a70%22%20stroke-width%3D%224.2%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.62%22%2F%3E%3Cpath%20d%3D%22M176%20184c-12-34-20-60-16-94M262%20126c16-28%2032-48%2046-58%22%20fill%3D%22none%22%20stroke%3D%22%239a7a70%22%20stroke-width%3D%222.8%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.5%22%2F%3E%3Cg%20transform%3D%22translate%28302%2074%29%20scale%280.62%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28256%20110%29%20scale%280.55%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28214%20138%29%20scale%280.6%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28172%20176%29%20scale%280.58%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28352%2042%29%20scale%280.5%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28140%20214%29%20scale%280.46%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28116%20246%29%20scale%280.4%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28326%20128%29%20scale%280.42%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28272%20158%29%20rotate%2822%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28318%20150%29%20rotate%28-18%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196%2092%29%20rotate%2840%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28150%20196%29%20rotate%28-26%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); - --sk-branch-r: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20420%20320%22%3E%3Cg%3E%3Cpath%20d%3D%22M2%20318C74%20276%20112%20212%20176%20184c62-28%20102-72%20146-118%2026-28%2052-46%2082-58%22%20fill%3D%22none%22%20stroke%3D%22%239a7a70%22%20stroke-width%3D%224.2%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.62%22%2F%3E%3Cpath%20d%3D%22M176%20184c-12-34-20-60-16-94M262%20126c16-28%2032-48%2046-58%22%20fill%3D%22none%22%20stroke%3D%22%239a7a70%22%20stroke-width%3D%222.8%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.5%22%2F%3E%3Cg%20transform%3D%22translate%28302%2074%29%20scale%280.62%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28256%20110%29%20scale%280.55%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28214%20138%29%20scale%280.6%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28172%20176%29%20scale%280.58%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28352%2042%29%20scale%280.5%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28140%20214%29%20scale%280.46%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28116%20246%29%20scale%280.4%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28326%20128%29%20scale%280.42%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28272%20158%29%20rotate%2822%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28318%20150%29%20rotate%28-18%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196%2092%29%20rotate%2840%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28150%20196%29%20rotate%28-26%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + --sk-branch-l: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20420%20320%22%3E%3Cg%20transform%3D%22translate%28420%2C0%29%20scale%28-1%2C1%29%22%3E%3Cpath%20d%3D%22M2%20318C74%20276%20112%20212%20176%20184c62-28%20102-72%20146-118%2026-28%2052-46%2082-58%22%20fill%3D%22none%22%20stroke%3D%22%239a7a70%22%20stroke-width%3D%224.2%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.62%22%2F%3E%3Cpath%20d%3D%22M176%20184c-4-30%204-56%2016-78M262%20126c16-28%2032-48%2046-58%22%20fill%3D%22none%22%20stroke%3D%22%239a7a70%22%20stroke-width%3D%222.8%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.5%22%2F%3E%3Cg%20transform%3D%22translate%28302%2074%29%20rotate%2814%29%20scale%280.62%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28256%20110%29%20rotate%28-22%29%20scale%280.55%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28214%20138%29%20rotate%2834%29%20scale%280.6%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28172%20176%29%20rotate%28-6%29%20scale%280.58%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28352%2042%29%20rotate%2848%29%20scale%280.5%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28140%20214%29%20rotate%2820%29%20scale%280.46%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28116%20246%29%20rotate%28-32%29%20scale%280.4%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28326%20128%29%20rotate%2828%29%20scale%280.42%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28272%20158%29%20rotate%2822%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28318%20150%29%20rotate%28-18%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196%2092%29%20rotate%2840%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28150%20196%29%20rotate%28-26%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + --sk-branch-r: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20420%20320%22%3E%3Cg%3E%3Cpath%20d%3D%22M2%20318C74%20276%20112%20212%20176%20184c62-28%20102-72%20146-118%2026-28%2052-46%2082-58%22%20fill%3D%22none%22%20stroke%3D%22%239a7a70%22%20stroke-width%3D%224.2%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.62%22%2F%3E%3Cpath%20d%3D%22M176%20184c-4-30%204-56%2016-78M262%20126c16-28%2032-48%2046-58%22%20fill%3D%22none%22%20stroke%3D%22%239a7a70%22%20stroke-width%3D%222.8%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.5%22%2F%3E%3Cg%20transform%3D%22translate%28302%2074%29%20rotate%2814%29%20scale%280.62%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28256%20110%29%20rotate%28-22%29%20scale%280.55%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28214%20138%29%20rotate%2834%29%20scale%280.6%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28172%20176%29%20rotate%28-6%29%20scale%280.58%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28352%2042%29%20rotate%2848%29%20scale%280.5%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28140%20214%29%20rotate%2820%29%20scale%280.46%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28116%20246%29%20rotate%28-32%29%20scale%280.4%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28326%20128%29%20rotate%2828%29%20scale%280.42%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f7bcd0%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23e989aa%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%23fdf6f8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28272%20158%29%20rotate%2822%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28318%20150%29%20rotate%28-18%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196%2092%29%20rotate%2840%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28150%20196%29%20rotate%28-26%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f7bcd0%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); /* 整页底纹:极淡的花与落瓣,260px 平铺。压在白底上只是一层纸纹, 不参与构图(真正的樱花由下面的装饰层负责)。 */ @@ -110,8 +110,8 @@ html[data-theme="dark"][data-theme-style="new-sakura"] { --sk-blossom: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20100%20100%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227.5%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%223%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fsvg%3E"); --sk-petal: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2040%2056%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fsvg%3E"); - --sk-branch-l: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20420%20320%22%3E%3Cg%20transform%3D%22translate%28420%2C0%29%20scale%28-1%2C1%29%22%3E%3Cpath%20d%3D%22M2%20318C74%20276%20112%20212%20176%20184c62-28%20102-72%20146-118%2026-28%2052-46%2082-58%22%20fill%3D%22none%22%20stroke%3D%22%23a8837a%22%20stroke-width%3D%224.2%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.62%22%2F%3E%3Cpath%20d%3D%22M176%20184c-12-34-20-60-16-94M262%20126c16-28%2032-48%2046-58%22%20fill%3D%22none%22%20stroke%3D%22%23a8837a%22%20stroke-width%3D%222.8%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.5%22%2F%3E%3Cg%20transform%3D%22translate%28302%2074%29%20scale%280.62%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28256%20110%29%20scale%280.55%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28214%20138%29%20scale%280.6%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28172%20176%29%20scale%280.58%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28352%2042%29%20scale%280.5%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28140%20214%29%20scale%280.46%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28116%20246%29%20scale%280.4%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28326%20128%29%20scale%280.42%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28272%20158%29%20rotate%2822%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28318%20150%29%20rotate%28-18%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196%2092%29%20rotate%2840%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28150%20196%29%20rotate%28-26%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); - --sk-branch-r: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20420%20320%22%3E%3Cg%3E%3Cpath%20d%3D%22M2%20318C74%20276%20112%20212%20176%20184c62-28%20102-72%20146-118%2026-28%2052-46%2082-58%22%20fill%3D%22none%22%20stroke%3D%22%23a8837a%22%20stroke-width%3D%224.2%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.62%22%2F%3E%3Cpath%20d%3D%22M176%20184c-12-34-20-60-16-94M262%20126c16-28%2032-48%2046-58%22%20fill%3D%22none%22%20stroke%3D%22%23a8837a%22%20stroke-width%3D%222.8%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.5%22%2F%3E%3Cg%20transform%3D%22translate%28302%2074%29%20scale%280.62%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28256%20110%29%20scale%280.55%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28214%20138%29%20scale%280.6%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28172%20176%29%20scale%280.58%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28352%2042%29%20scale%280.5%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28140%20214%29%20scale%280.46%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28116%20246%29%20scale%280.4%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28326%20128%29%20scale%280.42%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28272%20158%29%20rotate%2822%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28318%20150%29%20rotate%28-18%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196%2092%29%20rotate%2840%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28150%20196%29%20rotate%28-26%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + --sk-branch-l: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20420%20320%22%3E%3Cg%20transform%3D%22translate%28420%2C0%29%20scale%28-1%2C1%29%22%3E%3Cpath%20d%3D%22M2%20318C74%20276%20112%20212%20176%20184c62-28%20102-72%20146-118%2026-28%2052-46%2082-58%22%20fill%3D%22none%22%20stroke%3D%22%23a8837a%22%20stroke-width%3D%224.2%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.62%22%2F%3E%3Cpath%20d%3D%22M176%20184c-4-30%204-56%2016-78M262%20126c16-28%2032-48%2046-58%22%20fill%3D%22none%22%20stroke%3D%22%23a8837a%22%20stroke-width%3D%222.8%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.5%22%2F%3E%3Cg%20transform%3D%22translate%28302%2074%29%20rotate%2814%29%20scale%280.62%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28256%20110%29%20rotate%28-22%29%20scale%280.55%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28214%20138%29%20rotate%2834%29%20scale%280.6%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28172%20176%29%20rotate%28-6%29%20scale%280.58%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28352%2042%29%20rotate%2848%29%20scale%280.5%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28140%20214%29%20rotate%2820%29%20scale%280.46%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28116%20246%29%20rotate%28-32%29%20scale%280.4%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28326%20128%29%20rotate%2828%29%20scale%280.42%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28272%20158%29%20rotate%2822%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28318%20150%29%20rotate%28-18%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196%2092%29%20rotate%2840%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28150%20196%29%20rotate%28-26%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); + --sk-branch-r: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20420%20320%22%3E%3Cg%3E%3Cpath%20d%3D%22M2%20318C74%20276%20112%20212%20176%20184c62-28%20102-72%20146-118%2026-28%2052-46%2082-58%22%20fill%3D%22none%22%20stroke%3D%22%23a8837a%22%20stroke-width%3D%224.2%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.62%22%2F%3E%3Cpath%20d%3D%22M176%20184c-4-30%204-56%2016-78M262%20126c16-28%2032-48%2046-58%22%20fill%3D%22none%22%20stroke%3D%22%23a8837a%22%20stroke-width%3D%222.8%22%20stroke-linecap%3D%22round%22%20opacity%3D%22.5%22%2F%3E%3Cg%20transform%3D%22translate%28302%2074%29%20rotate%2814%29%20scale%280.62%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28256%20110%29%20rotate%28-22%29%20scale%280.55%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28214%20138%29%20rotate%2834%29%20scale%280.6%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28172%20176%29%20rotate%28-6%29%20scale%280.58%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28352%2042%29%20rotate%2848%29%20scale%280.5%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28140%20214%29%20rotate%2820%29%20scale%280.46%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28116%20246%29%20rotate%28-32%29%20scale%280.4%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28326%20128%29%20rotate%2828%29%20scale%280.42%29%20translate%28-50%20-50%29%22%3E%3Cg%20fill%3D%22%23f0a0b8%22%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%280%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%2872%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28144%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28216%2050%2050%29%22%2F%3E%3Cellipse%20cx%3D%2250%22%20cy%3D%2227%22%20rx%3D%2214%22%20ry%3D%2221%22%20transform%3D%22rotate%28288%2050%2050%29%22%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%227%22%20fill%3D%22%23c96a8b%22%2F%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%222.8%22%20fill%3D%22%232c2227%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28272%20158%29%20rotate%2822%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28318%20150%29%20rotate%28-18%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28196%2092%29%20rotate%2840%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate%28150%20196%29%20rotate%28-26%29%20scale%280.42%29%20translate%28-20%20-28%29%22%3E%3Cpath%20d%3D%22M20%201c9%200%2015%208%2015%2018%200%205-2%209-4%2012l-4-5-7%209-7-9-4%205c-2-3-4-7-4-12C5%209%2011%201%2020%201z%22%20fill%3D%22%23f0a0b8%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); /* 深色不铺底纹:浅粉花瓣压在深底上会变成一层噪点 */ --tb-page-image: linear-gradient(180deg, #251c21 0%, #221a1e 62%, #1e171b 100%);