Optimized design for iPhone 17 (393×852) with Deep Slate evaluation style.
open_document("new")
get_editor_state()
From the response, extract the root node ID (e.g. root or the document root id). Use it as ROOT_ID in the script below.
Replace ROOT_ID with the actual root node ID from step 2. Run Batch 1 first, then Batch 2 (each batch ≤25 ops).
Important: Ensure the root/canvas has size 393×852 and background #0F172A. If the new document root differs, run first:
U("ROOT_ID", {width: 393, height: 852, backgroundColor: "#0F172A"})
Glass style: background: rgba(30,41,59,0.7), backdropFilter: blur(20px), border: 1px solid rgba(100,116,139,0.4), borderRadius: 24
Text: Primary #F8FAFC, Secondary #94A3B8
blob1=I("ROOT_ID", {type: "ellipse", width: 280, height: 280, x: -60, y: -80, fill: "#6366F1", opacity: 0.35, filter: "blur(80px)"})
blob2=I("ROOT_ID", {type: "ellipse", width: 200, height: 200, x: -50, y: 552, fill: "#A855F7", opacity: 0.35, filter: "blur(80px)"})
blob3=I("ROOT_ID", {type: "ellipse", width: 150, height: 150, x: 333, y: 400, fill: "#6366F1", opacity: 0.25, filter: "blur(80px)"})
dynamicIsland=I("ROOT_ID", {type: "rect", width: 126, height: 37, x: 133.5, y: 12, fill: "#000000", borderRadius: 20})
header=I("ROOT_ID", {type: "frame", layout: "row", y: 64, x: 20, width: 353, justifyContent: "space-between", alignItems: "center"})
title=I("header", {type: "text", content: "AI Insight", fontSize: 24, fontWeight: 600, color: "#F8FAFC"})
avatar=I("header", {type: "ellipse", width: 40, height: 40, fill: "linear-gradient(135deg, #6366F1 0%, #A855F7 100%)", border: "2px solid rgba(255,255,255,0.3)"})
ctaBtn=I("ROOT_ID", {type: "frame", y: 124, x: 20, width: 353, height: 48, layout: "row", justifyContent: "center", alignItems: "center", background: "linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%)", borderRadius: 24})
ctaLabel=I("ctaBtn", {type: "text", content: "Generate Report", fontSize: 16, fontWeight: 600, color: "#FFFFFF"})
heroCard=I("ROOT_ID", {type: "frame", y: 184, x: 20, width: 353, padding: 24, background: "rgba(30,41,59,0.7)", backdropFilter: "blur(20px)", border: "1px solid rgba(100,116,139,0.4)", borderRadius: 24})
heroLabel=I("heroCard", {type: "text", content: "Total Followers", fontSize: 14, color: "#94A3B8"})
heroValue=I("heroCard", {type: "text", content: "128.5K", fontSize: 36, fontWeight: 700, color: "#F8FAFC"})
heroBadge=I("heroCard", {type: "frame", content: "+1.2K", background: "rgba(34,197,94,0.3)", color: "#22c55e", padding: "6px 12px", borderRadius: 12})
statsGrid=I("ROOT_ID", {type: "frame", layout: "row", y: 320, x: 20, width: 353, gap: 12})
statPlays=I("statsGrid", {type: "frame", flex: 1, padding: 16, background: "rgba(30,41,59,0.7)", backdropFilter: "blur(20px)", border: "1px solid rgba(100,116,139,0.4)", borderRadius: 24})
statPlaysLabel=I("statPlays", {type: "text", content: "Plays", fontSize: 12, color: "#94A3B8"})
statPlaysVal=I("statPlays", {type: "text", content: "892K", fontSize: 20, fontWeight: 700, color: "#F8FAFC"})
statLikes=I("statsGrid", {type: "frame", flex: 1, padding: 16, background: "rgba(30,41,59,0.7)", backdropFilter: "blur(20px)", border: "1px solid rgba(100,116,139,0.4)", borderRadius: 24})
statLikesLabel=I("statLikes", {type: "text", content: "Likes", fontSize: 12, color: "#94A3B8"})
statLikesVal=I("statLikes", {type: "text", content: "42.1K", fontSize: 20, fontWeight: 700, color: "#F8FAFC"})
statShares=I("statsGrid", {type: "frame", flex: 1, padding: 16, background: "rgba(30,41,59,0.7)", backdropFilter: "blur(20px)", border: "1px solid rgba(100,116,139,0.4)", borderRadius: 24})
statSharesLabel=I("statShares", {type: "text", content: "Shares", fontSize: 12, color: "#94A3B8"})
statSharesVal=I("statShares", {type: "text", content: "8.3K", fontSize: 20, fontWeight: 700, color: "#F8FAFC"})
trendCard=I("ROOT_ID", {type: "frame", y: 450, x: 20, width: 353, padding: 20, background: "rgba(30,41,59,0.7)", backdropFilter: "blur(20px)", border: "1px solid rgba(100,116,139,0.4)", borderRadius: 24})
trendTitle=I("trendCard", {type: "text", content: "Fan Trend (7d)", fontSize: 16, fontWeight: 600, color: "#F8FAFC"})
chartBars=I("trendCard", {type: "frame", layout: "row", gap: 8, height: 80, alignItems: "flex-end"})
bar1=I("chartBars", {type: "rect", flex: 1, height: 20, fill: "linear-gradient(180deg, #6366F1 0%, #A855F7 100%)", borderRadius: 6})
bar2=I("chartBars", {type: "rect", flex: 1, height: 28, fill: "linear-gradient(180deg, #6366F1 0%, #A855F7 100%)", borderRadius: 6})
bar3=I("chartBars", {type: "rect", flex: 1, height: 36, fill: "linear-gradient(180deg, #6366F1 0%, #A855F7 100%)", borderRadius: 6})
bar4=I("chartBars", {type: "rect", flex: 1, height: 44, fill: "linear-gradient(180deg, #6366F1 0%, #A855F7 100%)", borderRadius: 6})
bar5=I("chartBars", {type: "rect", flex: 1, height: 56, fill: "linear-gradient(180deg, #6366F1 0%, #A855F7 100%)", borderRadius: 6})
bar6=I("chartBars", {type: "rect", flex: 1, height: 68, fill: "linear-gradient(180deg, #6366F1 0%, #A855F7 100%)", borderRadius: 6})
bar7=I("chartBars", {type: "rect", flex: 1, height: 80, fill: "linear-gradient(180deg, #6366F1 0%, #A855F7 100%)", borderRadius: 6})
videoSection=I("ROOT_ID", {type: "frame", y: 650, x: 20, width: 353})
videoTitle=I("videoSection", {type: "text", content: "Recent Videos", fontSize: 18, fontWeight: 600, marginBottom: 12, color: "#F8FAFC"})
videoList=I("videoSection", {type: "frame", padding: 16, background: "rgba(30,41,59,0.7)", backdropFilter: "blur(20px)", border: "1px solid rgba(100,116,139,0.4)", borderRadius: 24})
tabBar=I("ROOT_ID", {type: "frame", y: 768, x: 0, width: 393, height: 84, layout: "row", background: "rgba(15,23,42,0.9)", backdropFilter: "blur(20px)", borderTop: "1px solid rgba(100,116,139,0.3)"})
| Element | Position | Specs |
|---|---|---|
| Canvas | — | 393×852, #0F172A |
| Blobs | Various | Indigo #6366F1, Purple #A855F7, low opacity |
| Header | y=64 | "AI Insight" + Avatar |
| CTA Button | y=124 | Full-width, gradient #6366F1→#8B5CF6 |
| Hero Card | y=184 | Total Followers 128.5K, glass |
| Stats Grid | y=320 | Plays, Likes, Shares, glass |
| Trend Chart | y=450 | Fan Trend (7d), neon bars |
| Video List | y=650 | Recent Videos, glass |
| Tab Bar | y=768 | Deep rgba(15,23,42,0.9) |
Note: If ROOT_ID in Pencil is literally "root", use root in the script. For a new document, the root may have a different auto-generated id—always use the value from get_editor_state().