Submission workshop
Polish your listing, preview its personality, and get the repository ready for its place in town.
Shape the listing
Finish the curb appeal
Select improvements to hand off to a dedicated Copilot implementation session.
const STYLE = ` * { box-sizing: border-box; } :root { color-scheme: light dark; --accent: var(--true-color-blue, #0969da); --accent-muted: var(--true-color-blue-muted, #ddf4ff); --danger: var(--true-color-red, #cf222e); --danger-muted: var(--true-color-red-muted, #ffebe9); --success: #1a7f37; --success-muted: #dafbe1; --warning: #9a6700; --warning-muted: #fff8c5; --radius: 10px; } html, body { min-height: 100%; } body { margin: 0; background: radial-gradient(circle at 8% 0%, color-mix(in srgb, var(--accent) 10%, transparent) 0, transparent 28rem), radial-gradient(circle at 100% 18%, color-mix(in srgb, #a855f7 8%, transparent) 0, transparent 24rem), var(--background-color-default, #f6f8fa); color: var(--text-color-default, #1f2328); font-family: var(--font-sans, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif); font-size: var(--text-body-medium, 14px); line-height: var(--leading-body-medium, 20px); } button, input, textarea, select { font: inherit; } button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible { outline: 2px solid var(--color-focus-outline, #0969da); outline-offset: 2px; } .shell { max-width: 1120px; margin: 0 auto; padding: 34px 28px 56px; } .hero { position: relative; overflow: hidden; display: flex; align-items: center; justify-content: space-between; gap: 24px; margin-bottom: 18px; padding: 28px 30px; border: 1px solid color-mix(in srgb, var(--accent) 24%, var(--border-color-default, #d0d7de)); border-radius: 18px; background: linear-gradient(125deg, color-mix(in srgb, var(--accent) 10%, var(--background-color-default, #fff)), var(--background-color-default, #fff) 58%); box-shadow: 0 16px 44px color-mix(in srgb, var(--text-color-default, #1f2328) 9%, transparent); } .hero::after { content: ""; position: absolute; width: 210px; height: 210px; right: -70px; top: -115px; border-radius: 50%; background: color-mix(in srgb, var(--accent) 10%, transparent); } .brand { display: flex; align-items: center; gap: 18px; min-width: 0; } .brand-mark { width: 54px; height: 54px; display: grid; place-items: center; flex: 0 0 auto; border-radius: 15px; background: linear-gradient(145deg, var(--accent), #8250df); color: #fff; font-size: 28px; box-shadow: 0 9px 22px color-mix(in srgb, var(--accent) 28%, transparent); } .eyebrow { color: var(--accent); font-weight: var(--font-weight-semibold, 600); letter-spacing: .08em; text-transform: uppercase; font-size: 11px; } h1 { margin: 3px 0 6px; font-size: 30px; line-height: 36px; letter-spacing: -.025em; } .lede, .muted { color: var(--text-color-muted, #656d76); } .lede { margin: 0; max-width: 700px; } .status { position: relative; z-index: 1; display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; padding: 8px 12px; border: 1px solid var(--border-color-default, #d0d7de); border-radius: 999px; background: color-mix(in srgb, var(--background-color-default, #fff) 88%, transparent); font-weight: var(--font-weight-semibold, 600); box-shadow: 0 4px 12px color-mix(in srgb, var(--text-color-default, #1f2328) 6%, transparent); } .status::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--warning); } .status.ready::before { background: var(--success); } .summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 18px; } .metric, .panel { background: var(--background-color-default, #fff); border: 1px solid var(--border-color-default, #d0d7de); border-radius: 13px; } .metric { position: relative; overflow: hidden; padding: 15px 17px; box-shadow: 0 5px 16px color-mix(in srgb, var(--text-color-default, #1f2328) 4%, transparent); } .metric::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 3px; background: var(--metric-color, var(--accent)); } .metric.success { --metric-color: var(--success); } .metric.danger { --metric-color: var(--danger); } .metric.warning { --metric-color: var(--warning); } .metric strong { display: block; font-size: 19px; margin-top: 2px; } .metric span { display: flex; align-items: center; gap: 6px; color: var(--text-color-muted, #656d76); font-size: 12px; } .metric-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--metric-color, var(--accent)); } .panel { margin-bottom: 18px; overflow: hidden; box-shadow: 0 8px 24px color-mix(in srgb, var(--text-color-default, #1f2328) 5%, transparent); } .panel-head { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 16px 18px; border-bottom: 1px solid var(--border-color-default, #d0d7de); } .panel-head h2 { font-size: 16px; margin: 0; } .panel-head p { margin: 2px 0 0; font-size: 12px; color: var(--text-color-muted, #656d76); } .panel-title { display: flex; align-items: center; gap: 11px; } .step-number { width: 28px; height: 28px; display: grid; place-items: center; flex: 0 0 auto; border-radius: 9px; color: var(--accent); background: var(--accent-muted); font-size: 12px; font-weight: var(--font-weight-semibold, 600); } .panel-body { padding: 18px; } .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; } .span-2 { grid-column: 1 / -1; } label { display: block; font-weight: var(--font-weight-semibold, 600); font-size: 12px; margin-bottom: 5px; } .required::after { content: " *"; color: var(--danger); } input, textarea, select { width: 100%; border: 1px solid var(--border-color-default, #d0d7de); border-radius: 7px; background: var(--background-color-default, #fff); color: var(--text-color-default, #1f2328); padding: 10px 11px; transition: border-color .16s ease, box-shadow .16s ease; } input:hover, textarea:hover, select:hover { border-color: color-mix(in srgb, var(--accent) 48%, var(--border-color-default, #d0d7de)); } input:focus, textarea:focus, select:focus { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent); } textarea { resize: vertical; min-height: 92px; } .hint { color: var(--text-color-muted, #656d76); font-size: 11px; margin-top: 4px; } .field-label-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 5px; } .field-label-row label { margin: 0; } button.generate-button { display: inline-flex; align-items: center; gap: 6px; padding: 5px 9px; border-color: color-mix(in srgb, var(--accent) 28%, var(--border-color-default, #d0d7de)); color: var(--accent); font-size: 11px; } .description-options { display: none; grid-template-columns: repeat(3, 1fr); gap: 9px; margin-top: 10px; } .description-options.visible { display: grid; } .description-option { display: flex; min-width: 0; flex-direction: column; padding: 12px; border: 1px solid var(--border-color-default, #d0d7de); border-radius: 9px; background: color-mix(in srgb, var(--background-color-default, #fff) 94%, var(--accent-muted)); } .description-option-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 7px; } .description-option-head strong { font-size: 12px; } .word-count { color: var(--text-color-muted, #656d76); font-size: 10px; white-space: nowrap; } .description-option p { flex: 1; margin: 0 0 10px; color: var(--text-color-muted, #656d76); font-size: 11px; line-height: 16px; } .description-option button { align-self: flex-start; padding: 5px 8px; font-size: 11px; } .checklist { display: grid; gap: 9px; margin-top: 4px; } .checkline { display: flex; gap: 9px; align-items: flex-start; margin: 0; padding: 10px 12px; border: 1px solid var(--border-color-default, #d0d7de); border-radius: 8px; background: color-mix(in srgb, var(--background-color-default, #fff) 92%, var(--accent-muted)); font-weight: 400; font-size: 13px; } .checkline input { width: auto; margin-top: 3px; } .theme-workbench { display: grid; grid-template-columns: minmax(220px, .8fr) minmax(320px, 1.2fr); gap: 16px; padding: 15px; border: 1px solid var(--border-color-default, #d0d7de); border-radius: 11px; background: color-mix(in srgb, var(--background-color-default, #fff) 94%, var(--accent-muted)); } .theme-control { min-width: 0; } .theme-control .hint { margin-bottom: 12px; } .theme-swatches { display: grid; grid-template-columns: repeat(4, 1fr); gap: 7px; margin-top: 12px; } .theme-swatch { min-width: 0; } .swatch-color { display: block; height: 28px; border: 1px solid rgba(127,127,127,.25); border-radius: 7px; } .swatch-name { display: block; margin-top: 4px; overflow: hidden; color: var(--text-color-muted, #656d76); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; } .theme-preview { --preview-bg: #0f0e17; --preview-card: #1a1932; --preview-text: #fffffe; --preview-muted: #a7a9be; --preview-primary: #ff8906; --preview-accent: #3da9fc; --preview-tag-bg: rgba(61,169,252,.15); --preview-tag-text: #3da9fc; --preview-border: rgba(255,255,255,.08); min-height: 228px; padding: 12px; border-radius: 10px; overflow: hidden; background: var(--preview-bg); color: var(--preview-text); font-family: var(--preview-font, var(--font-sans, system-ui, sans-serif)); box-shadow: inset 0 0 0 1px var(--preview-border); transition: background-color .2s ease, color .2s ease; } .preview-browser { display: flex; align-items: center; gap: 5px; margin-bottom: 10px; } .preview-browser i { width: 6px; height: 6px; border-radius: 50%; background: var(--preview-muted); opacity: .65; } .preview-browser span { margin-left: 5px; color: var(--preview-muted); font-size: 9px; letter-spacing: .04em; } .preview-card { padding: 15px; border: 1px solid var(--preview-border); border-radius: 9px; background: var(--preview-card); } .preview-kicker { color: var(--preview-primary); font-size: 9px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; } .preview-card h3 { margin: 4px 0 5px; color: var(--preview-text); font-size: 19px; line-height: 23px; } .preview-card p { min-height: 32px; margin: 0 0 10px; color: var(--preview-muted); font-size: 11px; line-height: 16px; } .preview-footer { display: flex; align-items: center; justify-content: space-between; gap: 9px; } .preview-tags { display: flex; flex-wrap: wrap; gap: 4px; } .preview-tag { padding: 2px 7px; border-radius: 999px; background: var(--preview-tag-bg); color: var(--preview-tag-text); font-size: 9px; } .preview-button { padding: 5px 8px; border-radius: 999px; background: var(--preview-primary); color: var(--preview-bg); font-size: 9px; font-weight: 700; white-space: nowrap; } .recommendations { display: grid; gap: 10px; } .recommendation { display: grid; grid-template-columns: auto 1fr; gap: 11px; padding: 13px; border: 1px solid var(--border-color-default, #d0d7de); border-radius: 10px; transition: border-color .16s ease, transform .16s ease, box-shadow .16s ease; } .recommendation:hover { border-color: color-mix(in srgb, var(--accent) 42%, var(--border-color-default, #d0d7de)); transform: translateY(-1px); box-shadow: 0 4px 12px color-mix(in srgb, var(--text-color-default, #1f2328) 5%, transparent); } .recommendation input { width: auto; margin-top: 4px; } .recommendation h3 { font-size: 14px; margin: 0 0 3px; } .recommendation p { margin: 0; color: var(--text-color-muted, #656d76); font-size: 12px; } .badge { display: inline-block; padding: 2px 7px; border-radius: 999px; font-size: 10px; text-transform: uppercase; letter-spacing: .04em; margin-left: 7px; } .badge.blocking { color: var(--danger); background: var(--danger-muted); } .badge.recommended { color: var(--warning); background: var(--warning-muted); } .badge.suggestion { color: var(--accent); background: var(--accent-muted); } .actions { position: sticky; bottom: 0; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 18px; border-top: 1px solid var(--border-color-default, #d0d7de); background: color-mix(in srgb, var(--background-color-default, #fff) 92%, transparent); backdrop-filter: blur(10px); } .button-row { display: flex; flex-wrap: wrap; gap: 8px; } button { border: 1px solid var(--border-color-default, #d0d7de); border-radius: 7px; background: var(--background-color-default, #fff); color: var(--text-color-default, #1f2328); padding: 9px 13px; font-weight: var(--font-weight-semibold, 600); cursor: pointer; transition: transform .16s ease, border-color .16s ease, box-shadow .16s ease; } button:hover { border-color: var(--accent); transform: translateY(-1px); } button.primary { background: linear-gradient(135deg, var(--accent), #8250df); border-color: transparent; color: var(--color-white, #fff); box-shadow: 0 6px 16px color-mix(in srgb, var(--accent) 25%, transparent); } button:disabled { opacity: .55; cursor: wait; } .message { font-size: 12px; color: var(--text-color-muted, #656d76); min-height: 18px; } .message.error { color: var(--danger); } .message.success { color: var(--success); } .repo-path { font-family: var(--font-mono, Consolas, monospace); font-size: 11px; word-break: break-all; } .submission-link { color: var(--accent); font-weight: var(--font-weight-semibold, 600); } @media (max-width: 760px) { .shell { padding: 18px 14px; } .hero { display: block; } .brand { align-items: flex-start; } .brand-mark { width: 46px; height: 46px; font-size: 23px; } .status { margin-top: 14px; } .summary { grid-template-columns: 1fr 1fr; } .grid { grid-template-columns: 1fr; } .span-2 { grid-column: auto; } .theme-workbench { grid-template-columns: 1fr; } .description-options { grid-template-columns: 1fr; } .actions { align-items: stretch; flex-direction: column; } } `; export function renderHtml(nonce = "") { return `
Polish your listing, preview its personality, and get the repository ready for its place in town.
Select improvements to hand off to a dedicated Copilot implementation session.