Skip to content

v0.41.0

Choose a tag to compare

@liustack liustack released this 10 Oct 18:13
· 179 commits to main since this release

Minor Changes

  • 6bab867: Almanac has a new look, a long-run yearbook. Every content page except statement uses yearbook-sheet: the page's kicker beside a sprout at the top left, a strip of years at the top right that lights the page's years, the point in bold over a hairline, the source small at the foot, and the body drawn in the yearbook setting. A page's tag (what the whole page rests on) is set where its composition places it, or over the body. The cover uses yearbook-cover: the page's photograph squared on the right, contour lines under the office and occasion, the title, a short rule in the accent and a scale of years from the page's timeline. The ending uses yearbook-ending: the photograph under a scrim from the left and each decision on its own card, the marked one in the accent. When the deck asks for a footer, the motif prints the office at the left and 「N / M」 at the right. If you copied almanac into your own theme file, its menu still names the old faces and keeps working as before.

  • 1907b12: pptwise audit now reports any text on a page that still prints an emphasis mark as asterisks, as content-dropped with kind emphasis, and exits with code 1. Before, a component that did not read **…** printed the asterisks and nothing said so.

  • 307ed98: pptwise audit has a new stepped-aside finding. It names every page the theme's layout could not hold, which a plainer layout drew whole but with a heading that does not match the rest of the deck, and it makes the audit exit with code 1. pptwise inspect --fit already said so for one page at a time.

  • 89573fd: A page's ballot can give one item boxes of its own (item_choices), such as a pick among three ways to pay beside items voted for or against. A face that sets every item's boxes in shared columns (clinic's ballot ending) declares such a ballot dropped, and the quiz and request compositions leave it to the face, so validate says where it is drawn.

  • 1226512: The shared compositions gain a binder setting, drawn on proposal's 2026-10 board and read entirely from the theme's tokens. It draws what the client gets as a verdict over its figures, a day's tariff hours in named steps with the hours that matter framed, places side by side as cards, a sum worked line by line down to its answer, a run of bars against a reference with the levers beside it, a formula over two charge cycles a day, what changed from before to now, the parts of a plan with an unsettled basis dashed, ways to pay side by side, public precedents in a table, safety lessons beside who answers for what, a risk register with each remedy, the steps to delivery as a chain, a priced quote with its blanks left to fill, and the papers the client hands over as a checklist.

  • aec759d: A data_table, a comparison and a timeline take an optional title, the name a report gives a table ("Free cash flow"). It prints over the block in bold, and a theme that sets the block in a panel prints it in the panel's title bar. A hand-set table or timeline with no place for a title leaves the page to the ordinary block, which prints it.

  • 243c90c: validate now refuses a cover, chapter or ending heading the bound face would cut or drop, and says how long a heading that face holds on the page, in Chinese characters or in words. Such a heading used to export with its end cut off, or stop the export with no word of the limit. Two luxe faces, the invitation cover and chapter, also cut an over-long title with no mark at all, and now refuse the page instead.

  • aca1276: validate now refuses a cover, chapter or ending subheading the bound face would cut or leave off, and quotes how much of it the face holds on that page. Such a subheading used to pass validate and only show up later as a cut line in the audit or a refused export. The check draws the page with its face, so the room it reports moves with whatever else the page carries.

  • 22d9b66: Brief has a new look. The corner mark in the top left is gone. Content pages now open with a navy heading over a fine rule, and with branding: "full" they close with a footer that names the organization and the confidentiality. The cover, statement, chapter and ending pages are redrawn. Points, list, comparison, process, data and hierarchy pages use the new gauge-sheet face, which chooses a layout from the page's content. Evidence pages use gauge-exhibit and fact pages use gauge-figure. If you copied brief into your own theme file, its menu still names the old faces and keeps working as before.

    Authors can now mark the one thing a page is about:

    • emphasis on a run of waterfall bars, with an optional emphasis_label drawn as a bracket over them
    • emphasis on one chart series
    • recommended on a comparison column
    • emphasis on one roadmap item

    The marked item takes the theme's highlight and the rest steps back. Comparison cells now read **…** as emphasis instead of printing the asterisks.

    When every level of a waterfall sits well above zero, the axis now starts from a round floor below the lowest level, and break marks on the total bars show that the axis is cut. The small steps between the totals are now readable.

  • 479019d: Pages that sit a chart, a row of figures, a timeline or a table next to a takeaway now lay out as designed in brief instead of falling back to a grey note box:

    • A chart followed by kpi_cards puts the figures in a column beside the chart, with an optional callout as the conclusion or a blockquote as a quote. A chart on its own still derives its column from the data.
    • kpi_cards items take a note line under the value.
    • Two to four figures followed by a blockquote set the figures in a row and the quote below, with its attribution.
    • A timeline, comparison (now up to four columns) or rows page followed by a callout closes with a full-width block in the theme's primary colour.
    • A fact page's kpi_cards can carry one or two supporting figures beside the hero figure.

    Every face now draws the page's footnote. Photo pages and several statement, pull-quote and two-column faces used to drop it without a word, and audit now reports a source line that a page leaves out. Headings no longer count ** marks toward their length, and **…** in a blockquote is drawn as emphasis instead of printing the asterisks.

  • a9efcc5: Bulletin now offers statement, fact and evidence pages, which it used to refuse. A statement uses notice-statement: no claim header, the sentence itself set large and bold where the header would be, over a short IKB bar, with the paragraph that backs it under a hairline. A fact uses notice-figure: the usual claim header, then one figure as large as the page allows in IKB with its unit small after it, the line that says what it counts above it, and the two or three figures it is read against under a hairline. Evidence uses notice-exhibit: the usual claim header, then one chart or table on a white card numbered across the deck (「图 1」, 「表 1」, "Exhibit 1"), an IKB ring round the bar group you marked with data[].emphasis or the row you marked highlight, and your reading beside it, numbered to the ring, with up to three notes. A page these faces cannot set whole goes to the ordinary notice sheet. The shared compositions behind them, sentence, billboard and proof, work in the notice setting, so any face that sets its pages that way can offer them.

  • 0ddb07f: Bulletin has a new look. The cover and ending are a full IKB page with a large white title and white steps. Every content page now opens with one quiet header, a black bold claim over a grey hairline with a short IKB bar, in place of the IKB title band and the ruler, and IKB is kept for the one thing each page marks. Points, list, comparison, process, data and hierarchy pages use the new notice-sheet face, which sets the page from its content: numbered rows with the answer reversed out, a chart or bridge beside its figures, a horizontal bar chart, an open records table with a warning, figures beside a titled list, a calendar window over facts, a two-lane timeline, or an options table. Photo pages use the notice column of image-split. On bulletin, a waterfall or a gantt may share its page with a kpi_cards. If you copied bulletin into your own theme file, its menu still names the old faces and they keep working, while bulletin-motif now draws only the steps.

  • 3153104: A callout can carry a title, a short bold line over its text naming what the note is about (such as 谁付 or Who pays), and a tag, a few words under its text that say what the note rests on (such as 企业口径 · 据报道, with a basis or an evidence kind). The ordinary callout draws both inside its panel and declares a tag wider than its text dropped. The shared hand-set compositions leave such a page to the ordinary callout.

  • 3fa3b01: The shared compositions gain a chalkboard setting: a night class at a green board, words in chalk white, what is quieter in a wiped chalk grey, and one stroke of yellow chalk drawn by hand under the thing to remember. Sixteen compositions come with it: agenda (what tonight covers in boxes of chalk), confluence (two paths meeting in one result beside a photograph, from a concept_equation), braces (a formula with a brace under each term its "term:note" bullets explain), boughs (a decision tree in chalk with the recommended answer ringed), factors (things beside their factors, written after a multiplication sign in sub), subtractions (what is taken off as a row of minus signs), flashcards (two rows of cards, the tagged ones ringed), risers (a rate table as a staircase), givens (an example's givens beside its photographs), derivation (a sum worked line by line with its equals signs in a column), cascade (a waterfall as chalk bars, the marked step dashed in yellow), exercises (questions lettered in rings with a line to answer on), solutions (the answers worked in columns), pitfalls (mistakes struck with a cross, from row_cards marked tone: "danger"), strikeout (figures with the misquoted one struck out, from a warning callout titled by it) and chronology (dates at their true distance with the window ahead boxed). Any face can offer them, and lecture's content pages use them.

  • 0fcdea7: A chart can mark a value range across its plot with bands, such as a target range a line should stay in: [{ "from": 4.5, "to": 5, "label": "Target range" }]. The range is tinted across the plot behind the data with its label inside it, and the value axis grows to hold it. Line, area and upright bar charts take up to two. A theme's hand-set plot with no value axis leaves such a chart to the ordinary chart.

  • 2840597: A share bar can carry an emphasis_label: the line it states for its marked parts in the author's own words, such as what they add up to ("第 73 章制品 €93.5 亿,占 69.5%"). The ordinary share bar sets it where the run's computed total would stand, and leaves the bar undrawn rather than cut a line wider than the bar. Any chart that is not a share bar with a marked series refuses it. The shared hand-set plots leave such a chart to the ordinary one.

  • 384f16f: A bar or stacked chart's point can carry status: "estimate" for a past value nobody published that was worked out from figures that were, such as a year read back from "1.8 points lower than in 2018". The bar is drawn pale inside a heavier dashed outline, and a series that mixes estimates with reported values gets an Estimate entry in its legend.

  • 92c9194: A bar or line chart can keep a place for a category nobody published a value for (gaps), such as a year a survey skipped: [{ "after": "2017", "x": "2018", "label": "Not published" }]. The ordinary bar chart draws a dashed outline there, about as tall as its bars run, with the label over it. The ordinary line breaks there and sets the label over the axis.

  • 740aef5: A bar chart can now mark the one bar a page is about with emphasis: true on that point, such as the latest year in a run of years. The marked bar keeps its series' colour and the other bars step back to a grey, the way a marked series does. Before, a chart with one series had no way to say which bar mattered. validate holds it to one point per chart, on a bar chart, and not beside a marked series.

  • 96415d9: A bar on its side can set a symbol before each category's name (data[].icon on the first series), such as the way of reading each bar counts. The ordinary chart sets the symbols in a column of their own at its left edge, before the names.

  • 6379d96: A bar on its side, or a part of a share bar, can carry a note: a few words printed after its value, after a middle dot, such as 基准线, 低约 37% or 62.36 元. The ordinary chart prints it with the value, and a share bar's part takes it inside or over the bar with its value. Any other chart refuses it. The shared hand-set plots and ledger's figure page leave such a chart to the ordinary one.

  • f9986f3: A bar on its side can carry a value known only as a range: upper on a point is its high end, y its low end, such as 60 to 70 for two groups that scored about 60% and 70%. The bar is drawn solid to its low end and dashed on to its high end over a pale tint, and its label names both ends (「60 至 70」, "60–70"). validate refuses upper off a horizontal bar chart, on a value below zero, under its own y, or beside a status.

  • e82ba05: Charts can now say what a number is and draw the change a page argues about. On bar and stacked charts, status: "forecast" on a point hatches its bar and status: "target" draws it as a dashed outline over a pale tint, with a Forecast or Target legend entry. changes: [{ "from": "...", "to": "..." }] draws a bracket over two columns with the change between them, and with at compares two series at one category. A horizontal chart writes that change after the later bar.

  • 4fe7411: A pie, a donut and a funnel print the value axis's unit (axes.y_unit) after every value they name (「1200 个」, "30%"), and a donut after its centre total. These charts have no axis, so a y_unit alone no longer draws the chart_axes_ignored warning; their other axis settings still do.

  • 2cefb52: A bar chart can carry a reference: one value drawn as a dashed line across the bars, such as a benchmark or a threshold ({ "value": 1.37, "label": "EU benchmark 1.370" }). The ordinary chart draws it over the bars, upright or on their side, names it in its legend with a dashed swatch, and grows the value axis to hold it. Any other chart type refuses it. The shared hand-set plots and ledger's figure page leave such a chart to the ordinary one.

  • b2d89c8: A chart series can say what kind of news it is: tone ("success", "danger", "warning") draws the series and its legend swatch in the colour every theme keeps for that kind of news, on bar, line, area, scatter, stacked, percent_stacked and combo charts. A percent_stacked chart of who got better, who stayed the same and who got worse no longer hands the worse share whatever palette colour came second. Hand-set plots that cannot paint a tone hand the page to the ordinary chart.

  • 1de665b: A stacked chart with direction: "horizontal" now draws a share bar: one whole as a single bar across the page, cut into its parts, each with its name and value. Write one series per part with its one value at the chart's one category, whose name captions the bar. Marking a run of adjacent parts with emphasis adds their total and share of the whole under the bar, beside the largest other part's. Before, a stacked chart refused direction.

  • d949180: A bar chart on its side can mark value ranges (bands), as a line, an area and an upright bar already could, such as what a value below zero means: [{ "from": -0.4, "to": 0, "label": "← Screens did worse" }, { "from": 0, "to": 0.1, "label": "Print did worse →" }]. The ordinary chart tints each range down the rows and names it in a row over the plot, and its value axis grows to hold the ranges.

  • 1dcafc0: A chart can carry a tag, a few words over it saying what kind of figures it draws, such as 企业口径 or "Company figures", with an optional evidence kind that colours it by its source. The ordinary chart sets it at the start of its legend row, the legend right-aligned beside it. Hand-set plots with no place for it hand the page to the ordinary chart. A share bar refuses one.

  • 827ce23: A chart can carry a short name over it (title), as a table, a comparison and a timeline can. The ordinary chart sets the title over the plot, and the hand-set compositions leave a titled chart to the ordinary one. A theme that numbers its figures prints the number before the title.

  • 0be5ec0: A chevron_process stage can carry an icon. The ordinary chevrons draw it at the top right of the stage's text, on the line of its number.

  • 5d08e18: Clinic has a new look, a clinical assessment file. Every content page uses dossier-sheet: the section's label beside a short heartbeat, the point in bold over a hairline, the source small at the foot, and the body drawn in the dossier setting. A page's tag (the evidence the whole page rests on) is a capsule over the body. The cover uses dossier-cover, with the submitting office and its request over the title, a heartbeat across to a full-height photograph, and header lines from the page's fields. The ending uses dossier-ending: each item to decide on its own numbered card, a box per choice when the page carries a ballot, and who submits it, when, and a line to sign. When the deck asks for a footer, the motif prints the deck's label at the top right and the office and 「N / M」 at the foot. Marked text now takes clinic's deep teal instead of its light accent. If you copied clinic into your own theme file, its menu still names the old faces and keeps working as before.

  • aa301ec: A code listing can carry a title, printed in a title bar over its first line (a file name such as deploy.yaml), and highlight_lines, the lines the page is about, counted from 1 and set bold in the theme's warning colour.

  • efb7553: A comparison can name the column of its rows' labels with label_column, such as 「药品」 or "Option". The ordinary comparison prints it bold over the labels like the other headers. Hand-set tables with no place for it hand the page to the ordinary comparison.

  • 7bc996e: A comparison can say who its recommended option is for: recommended_label ("客服用这个", "For support teams") prints as a filled tag over the recommended column. Only with recommended. Compositions with no place for it hand the page to the ordinary comparison.

  • bb919e8: A comparison row can carry an icon. The ordinary comparison sets the rows' icons in a narrow column of their own before the labels. Hand-set tables with no place for it hand the page to the ordinary comparison.

  • 4726aa2: A comparison row can say what happened to it. rows[].tag prints a few words, such as "Now a range" or "Unchanged", as a small label after the row's cells, under the header tag_column. rows[].emphasis marks the one row the page is about: it sits on a pale tint and its tag fills in the theme's emphasis colour. A tag with quiet: true, one that says nothing changed, steps back in a grey outline, and any other tag is outlined in the accent. Every theme sets them in its ordinary table.

  • bd45f96: A concept_equation can name what its result leaves out on purpose (excluded, a term with a label, a value, a note and an optional icon). The ordinary equation draws it under the panels in a dashed outline, its value struck through, and validate refuses an exclusion with no value to strike.

  • ab07255: A concept_equation term, and its result, can carry an icon. The ordinary equation draws it at the top of the term's panel, above the figure, and grows every panel to hold it.

  • 04ccd6c: Four new faces drawn from terminal's 2026-10 board. console-sheet sets every ordinary page as an incident console: a mono line at the top left that says where the page sits (01 / Review · P04), the claim bold across the page over a hairline, the body handed to the compositions in the console setting, and a mono source line. Seven compositions are new and drawn only in that setting: cards sets findings as HUD cards with icons and tags, listing sets a code block as a terminal window with its marked lines, log sets a timeline as an incident log with a dot per tone and a column beside it, span sets lengths of time to scale, plates sets pictures over their figures, paths sets an issue tree as failure points beside their fixes, and screen sets a browser screenshot beside its log lines. console-cover and console-chapter draw their own pages over a photograph, darkened from the left, the chapter page listing its chapter's pages as a directory, and console-ending sets the decision over a checklist of dated to-dos from a timeline or from bullets. A cover or chapter face can now say it draws over its own photograph, so the page keeps its face, its kicker and its components instead of going to the shared photo page.

  • a070f95: The shared compositions take a sixth setting, console, drawn from terminal's 2026-10 board: an incident console of square panels on a dark page, figures, times, labels and the source in a mono face, the one thing a page is about on the signal colour's dark tint, and red, amber and green only for what kind of news a line is. In it a horizontal bar chart beside figures is a ranked list of bars with figure panels, a data table sets its figures in mono and draws a cell that opens with ✓, ✕ or — as an icon, a comparison sets its options as cards with the recommended one selected, a rating row such as $ to $$$$ as a meter and a row named by a code such as RPO in bold mono, and a roadmap runs its phases along one line over a decision banner. A face names the setting it was drawn with.

  • 628ccdb: A deck can carry course: the stages a talk runs through in order (stages, two to eight, each a label and an optional quiz: true), such as the parts and quizzes of a lesson. A page names the stage it belongs to with stage, written as that stage's label, and a face that has a place for it draws the course as a strip of pills with the page's stage lit and a quiz stage dashed. validate refuses a stage on a face with no place for it, a stage the course does not have, a stage on a deck with no course, a repeated stage label, and a strip wider than its room. The spec carries course, and page files may fill stage.

  • 72e5f1c: crayon is redrawn as a box of crayons on drawing paper, to a kindergarten parents' meeting. Every content page wears a rounded capsule at the top left in the crayon of the section it sits in (the page's kicker): a deck's sections take sky, grass green, tangerine, red and purple in the order they first appear, a chapter names its section by its heading, and the capsule carries the symbol the deck's own contents gives that section. The claim is set in a heavy rounded hand on one line across the page, broken at a comma or a colon only when it has to be, with a stroke of crayon in the section's colour under it. Cards are rounded and outlined twice, as if traced by hand. A sun and two stars sit in the top right corner, and the page number stands in a pale disc of the section's crayon beside the deck's name and term. A content page over a photograph lays the paper over it from the left. The cover sets the occasion in a sky capsule, the title large with a tangerine stroke, the subtitle and the term beside the page's photograph in a crayon frame. A chapter opens on its number on a tilted block of its section's crayon beside a framed photograph. The close sets the next meeting, a contact card for each way to reach the school (an icon_cards, or a list whose items read 「名字:说明」) and the line to remember on a tangerine pill, over a veiled photograph. crayon now offers the data kind, and its colours gain the five section crayons (accentPool) and a burnt orange for words the tangerine has to carry (emphasisInk). If you copied crayon into your own theme file, its menu still names the old faces and keeps working as before.

  • 72e5f1c: The shared compositions gain a crayonbox setting, drawn on crayon's 2026-10 board and read entirely from the theme's tokens: the claim with its stroke of crayon and the source placed by the composition, the section's crayon handed down by the face, cards outlined twice, a filled crayon carrying the ink or white, and a colour that has to carry words lifted toward the ink until it reads. It draws the contents of a meeting as a row of crayons, rules as sticky notes with their article numbers, what a rule covers and what it does not beside its reach and a worked sum, a count in bars with a rate on a storey of its own above them, a card of its own colour for each thing that grows from one stage to the next, a crossed-out ruler under a large claim with the words it rests on, a day as the sun's arc with photographs inside it, notes pinned to a fridge door, what several bodies advise side by side with the binding row stamped and the cells that give no figure set back in grey, figures beside a framed photograph, an eye check with an estimated year drawn pale beside its advice, studies beside things to tick, round safety badges with the one that warns of danger larger and red, and big boxes to tick beside a photograph.

  • 7f177c3: A data_table column can be marked as the one the page is about (columns[].emphasis) and can carry an icon set before each of its cells (columns[].icon, a left-aligned column only). The ordinary table sets the marked column's header and cells bold in the primary colour and outlines the column; validate refuses two marked columns. Hand-set tables hand such a page to the ordinary table.

  • d4bca60: A data_table row can carry an icon, drawn at the row's start before its first cell. Compositions with no place for it hand the page to the ordinary table.

  • c69352e: A data_table row can carry a tag, a word or two saying what kind of row it is (倡导, 独立, Independent), printed as a small tag at the start of the row's last cell. The ordinary table draws it, outlined in the accent, grey when quiet, filled on the highlighted row. Compositions with no place for it hand the page to the ordinary table.

  • f0222be: A deck now prints no footer unless it asks for one. Content pages carry no page number, organization, date or confidentiality line by default. Several places used to print them anyway and no longer do: the large page number in the right margin of the narrow-column layout (19 themes), the organization and date down ink's right-edge column, the month in journal's bottom ornament, the organization and date under the statement pages of vermilion, museum and ink, the organization in the kicker of runway's and the photo-split content pages, and the organization line inside the card of a photo-backed content page. Theme decoration stays.

    Ask for the marks the occasion needs with the new footer field, in a bare IR or in deck.spec.json:

    "footer": {
      "page_number": true,
      "organization": true,
      "label": "2026 年中期业绩 | 2026.08",
      "notice": "© 2026 Acme",
      "draft": "讨论稿",
      "confidentiality": "footer"
    }
    • page_number prints the page number bottom right, on content pages only, never on the cover, chapter or ending pages. In the exported file it is PowerPoint's own slide-number field, so it renumbers when you move slides.
    • organization, label and notice print bottom left. label and notice print exactly what you write.
    • confidentiality: "cover" puts the meta.confidentiality mark on the cover once. "footer" also puts it on every content page.

    The confidentiality mark now follows the deck's language. A Chinese deck prints 「仅供内部讨论」, 「内部资料,请勿外传」 or 「限定范围阅读,请勿转发」 instead of the English word, and never 「机密」, which is a legal classification in Chinese. public prints nothing. A legal classification such as 「秘密 ★1 年」 goes in the new meta.classification and prints on the cover only, top left. Every theme's cover now prints the mark under the same rules.

    branding keeps its three values and now decides only where the logo appears. A deck with branding: "full" and no footer keeps its footer, now as the organization and the confidentiality mark on content pages. The date and version it used to repeat on every page stay on the cover and ending page. Write footer: {} to keep the logo and drop that footer.

    The theme brand flag suppressFooterMeta is retired. Theme files that set it still load, and the flag is ignored.

  • 29b7ae6: pptwise images fetch and pptwise images generate pin a deck project's pictures into the deck's own assets/, with their provenance sidecar beside them, so a deck moved to another folder keeps its pictures instead of drawing empty frames. A single IR file still keeps its pictures under .pptwise/<deck>/assets/. Pictures pinned there before for a deck project still count while the deck stays put, and images list shows them. A .json file in a deck's assets/ is read as a sidecar, not a picture. When a page names an asset_id no file supplies, validate now says where to put the picture, such as decks/q3/assets/hero.jpg.

  • dea04c8: deliberation-ending is redrawn to vermilion's 2026-10 board. The page's subheading says what it asks of the room in a small line at the top, the heading is the decision, centred at 52px in the brand colour, and a short accent bar sits under it. The first bullets become two to four cards across the page, each with a numbered square in the deck's own numerals, its label at 28px and its gloss under it: an item written "label: gloss" splits at the colon, and an item with no label that runs past one line becomes the card's sentence. The old face set a short heading as a letter-spaced kicker and, with nothing to list, printed ARRANGEMENTS. It now prints nothing it was not given.

  • 251b3b6: A completion ring can say what its rate is made of and which ring the page is about. progress_donuts.items[].detail prints the amounts behind a rate, such as "1.18 of 1.3 trillion", on a line under its label and before its source, and items[].emphasis sets the one rate the page is about, its ring, figure and label, in the theme's emphasis colour.

  • 3433e38: The shared compositions take an eighth setting, dossier: a clinical assessment file, the way a committee reads a submission. Proposals are numbered on cards under the page's section (「提议 1」), with their icons and where their evidence is, the one the page argues for filled with the mark. A comparison sets each option's proposal as a capsule that says how settled it is: a settled yes filled, a conditional yes outlined in the mark, an open no or a deferral outlined in grey, a settled no filled in a quiet grey. Approvals run on two lanes and rules sit on cards two by two. The setting's capsules name the kind of source each figure rests on in its own ink, and what a result is read against is drawn in outline.

  • fcaf63e: ember is redrawn as a pitch on a dark stage, its one fire colour lit on one thing a page. Its cover lays the photograph under a darkening from the foot, the fire's wedge in the corner with the occasion and the date, the title large and the pitch's facts as pills; its chapter page outlines the act's number huge in the fire over a photograph darkened from the left, with what the act covers a line each with an icon; its ending keeps the wedge, recaps the steps the round pays for and sets a button of the fire with the author's own words. Every content page lights its beat on the pitch's running order at the top right (course, stage), sets its claim bold across the measure and hands its body to twelve new compositions in a pitch setting; a photograph page sets the photograph down the left half with the lit figure beside it. The deck's label stands at the top left and the page number at the bottom right in ember's own folio.

  • f17558e: arena and playbill are folded into rally, and heritage into luxe, so the shelf holds 22 factory themes instead of 25. Drawn side by side on the same content, arena and rally were hard to tell apart, playbill answered the rooms rally already answers, and heritage spoke in luxe's register.

    A deck that names a folded id keeps working. validate, render and audit read arena and playbill as rally and heritage as luxe, and draw exactly what a deck naming the new id draws. validate and render print a warning that names the one edit to make: theme id "arena" was folded into "rally", so this deck renders as "rally". Bind it to "rally". A deck spec, schema --kind --theme, theme new --from, theme fork and theme try resolve the old names the same way. rally now also lists entertainment among its occasions, and the annual-review narrative recommends luxe where it recommended heritage.

    The old ids are not free names. A theme file, theme new --id, theme fork --id, a preset copy, registerTheme or a content pack that takes one is refused with the theme it folded into. The ten faces and three motifs only those themes drew are deleted: cut-panel-cover, round-mark-chapter, seat-cta-ending, bill-head, day-bill-chapter, ticket-cta-ending, mono-bleed, double-frame-cover, mirror-volume-chapter, invite-field-ending, arena-motif, playbill-motif and heritage-motif. A theme file copied from one of those presets names them, and is refused with a message that says which theme to copy again from.

  • 8f99813: from_to takes label_column, the header over the measures' names, such as 「指标」 or "Measure". It stands on the state titles' baseline in the quiet ink, set like a name. A table with no header draws nothing there, as before.

  • 7cdc702: A from_to row can carry an icon before its name and a short note under it (rows[].icon, rows[].note), such as where its figures come from. The ordinary before-and-after table sets the icon before the name and the note under it in the quiet ink, the name moving up half a line to make room.

  • b928eb4: A from_to row takes the same tag and emphasis a comparison row does: a few words such as "New" printed after its values, and a mark on the one measure the page is about, whose name and starting value sit on a pale tint and whose tag fills in. Every theme sets them in its ordinary before-and-after table.

  • 6b3da53: A gantt can mark spans of its axis (bands, such as the season a plan is built around): the ordinary gantt tints each span behind the bars and names it in a line under its axis. Validate refuses a span outside the axis, one that runs backwards, and two that overlap. Hand-set gantts hand such a page to the ordinary gantt.

  • 9598d71: A gantt can mark up to two single moments across its bars (milestones), such as a check the plan turns on, and a bar can say its stretch is not settled (items[].basis). The ordinary gantt draws a moment as a line down the rows with a diamond and its label under them, and an unsettled bar as a dashed outline. A blank axis label leaves its tick unnamed and lends its room to the label before it, so a 20-month axis can name every third month whole.

  • 872d46f: A gantt can run its axis over a stretch of its own (range, such as a whole 18-month plan whose bars cover parts of it), and a row can carry an icon and a period (「第 16 至 18 个月」, "Months 16 to 18"). The ordinary gantt runs its axis over the range, sets the icon before the row's label and the period under it. Validate refuses a bar outside the range. Hand-set gantts hand such a page to the ordinary gantt.

  • de7e213: A gantt item can carry a line of text under its label, and emphasis: true on one item draws that stretch in the emphasis colour while the others recede.

  • 747e7e1: The hand-set page bodies the notice sheet uses (a column chart, a bridge, a table, a two-lane timeline, figures beside a chart, a row of figures) now have a grid setting for swiss: black data, two greys for what steps back, and the theme's red for the one thing marked. A new share body opens a page on a share bar and hands what follows to the others, and bulletin's notice sheet offers it too. A new chapter list sets the pages a chapter holds from the deck itself.

  • 2c237d5: Three new faces for swiss's report pages. grid-sheet heads every content page with the chapter's number and name, a black bold claim across the full width over a heavy rule, and hands the body to the grid compositions. grid-statement sets the deck's conclusion large over the figures it rests on, and grid-figure sets one figure very large with two supporting figures beside it. image-top takes a band parameter, and "grid" sets the claim on a black rule under the photograph with the figures in columns below.

  • a380440: A content page whose theme layout would cut text a reader needs whole now goes to the plainer step-aside layout when that layout draws it whole. Hard text is the page's heading, subheading and source line, and every word a component carries except its tags. A cut kicker, stamp, tag or other label stays declared on the theme's layout, as does any cut on a page that carries a kicker, header fields, a stamp, a page tag, a ballot, a stage or years, which the plainer layout has no place for. pptwise audit reports such a page as stepped-aside, and a content-truncated finding now names the field it cut and its tier (hard or declared) in detail.

  • ec137e9: A heat grid's marked run (heatmap.bands[].icon) can carry an icon, such as a sun over the midday hours: the ordinary heat grid sets it before the run's name, the pair centred under the run.

  • 5d9b263: A heatmap runs up to 24 columns, a day of hours, and can sort its values into two to five named steps (steps, such as the valley, flat, peak and top bands of a day's tariff): every cell takes its step's colour and prints its short name, and a key under the grid names every step. A grid of many columns can print its labels every few columns (label_every: 6 labels a day's hours at 0, 6, 12 and 18), the other labels still naming their columns for bands. Validate refuses steps out of order, a step without its max or a last step with one, steps beside a domain, and a label step as wide as the grid.

  • b0833a7: A heatmap runs up to twelve columns, a year of months, and can mark a run of them (bands, such as the season a plan is built around): the ordinary heat grid frames the run across every row in a dashed outline of the accent and names it under the grid. Validate refuses a run that names a column the grid does not have, runs backwards, or shares a column with another.

  • 454bdd0: homeroom is redrawn as one lesson. Its cover sets a blackboard beside the classroom photograph with the occasion, the title over a wavy line of the correcting pen and the lesson's facts as pills; its chapter page lays each part of the lesson on a band of board, the part's name boxed in the author's own words, with what the part covers on three cards; its ending sets the homework on ruled paper with a sticky note and a stamp, the title always drawn and up to five tasks. Every content page names its step at the top left (kicker), lights its stage on the deck's course strip at the top right (course, stage), sets its claim over the pen's wavy line and hands its body to fourteen new compositions in a lesson setting: goals with boxes to tick, a class laid out by the minute, studies with the kind of study in a pill, the weaker group against the stronger, two studies with their charts, expectations against a measurement, a quiz with a box for each choice and its answers stamped, cases, a ranking with one item broken down, house rules with their grounds, levels from the most guarded down, methods under their photographs and the recap on a blackboard. The footer is homeroom's own folio, the office and the course at the left and 「N / M」 at the right.

  • 7232f98: An icon_cards item can carry a tag, a few words that place the card such as where or when it comes from. The ordinary cards print it under the card's icon, and keep every title in a row level. A bento page keeps tagged cards in their ordinary row rather than exploding them into tiles.

  • f3b7c7d: icon_cards can carry a short title over the cards (title) and say what kind of news a card is (items[].tone). The ordinary cards set the title over them as a table does and draw a toned card's icon in the theme's ink for that news; a bento grid keeps a titled set whole and draws a toned tile's icon the same way. The hand-set compositions leave such cards to the ordinary ones.

  • 919f1ba: image and image_grid items take a crop: the part of the picture to keep when it is cropped to its frame, [left, top, width, height] as fractions of the whole picture. One group photograph can now show each of its people in a frame of their own, and a cover photograph can keep a head that sits above the middle. The preview cuts the picture with a clip of one rectangle and PowerPoint crops it the same way. The ordinary picture and grid keep the part. A hand-set composition that does not steps aside for them, and a cover or chapter face that frames its own photograph centres it as before.

  • 01b4035: An image_grid picture can carry an icon before its caption, where the ordinary grid draws its short accent rule. A picture with an icon needs a caption. Faces with no place for it hand the page to the ordinary grid.

  • 5821da8: image_grid takes up to eight pictures, so a show's seven looks can stand in one row. The ordinary grid sets seven or eight in a single row, each as wide as its share.

  • 397a163: A picture in an image_grid can carry a tag (items[].tag), such as one marking an optional part. The ordinary grid sets it at the picture's top right corner on a plate of the page, outlined or filled as every tag is, and dashed while its basis is not settled. The hand-set picture compositions leave a tagged grid to it.

  • 24a8b15: ink is redrawn as a public lecture hung as a scroll. Every content page hangs between two thin edges, with the hall and the date standing upright down the right margin (the deck's organization and the footer's label, as the author writes them), the volume the page belongs to upright in cinnabar down the left margin (the page's kicker, now accepted on every content page), the claim in kaishu on one line across the page and broken at a comma or a colon only when it has to be, the source at the foot and the page number against the right edge. In a Latin deck those margins turn a quarter to read from the top instead of standing letter by letter. Its cover hangs a title slip beside a photograph with the title upright and a cinnabar seal (stamp), the subtitle, the hall with the occasion and the date in columns beside it; its quotation page stands a passage upright in columns with its source beside it; its chapter page opens each volume beside a tall painting in its mount with the volume number upright in cinnabar; and its ending signs off a clause a column with the hall, the date and the seal. Upright Chinese now sets its punctuation the way vertical type does: commas and full stops in the upper right of their cells, brackets and title marks in their vertical forms, and no column starting on a comma. Cinnabar goes to one thing a page, and nothing is slanted. The heading face is now Times New Roman with KaiTi, so figures stand on the baseline in the export.

  • dfaa3c2: An insight_panel can carry an icon, drawn before its title. Compositions with no place for it hand the page to the ordinary panel.

  • 4946aed: The shared compositions gain an invitation setting, drawn on luxe's 2026-10 board and read entirely from the theme's tokens: the claim, the chapter over it and the source placed by the composition, centred over the body, beside a photograph that runs from the page's left edge, or inside a reply card, and the accent kept for rules, letters and the one figure a page is about. It draws a programme numbered 壹 贰 叁 (I II III in English) with dotted leaders to the page each item opens on, a run of yearly bars carried on hatched where a second series continues it beside the figure the run comes to and a record line across the bars, one figure set huge beside a drawing of how it came about (a fall from a high as one easing line with last year's level dashed across it, or two quantities as pairs of bars), two quantities weighed either side of a balance and named by their figures' tag, dumbbells for a few houses in two stretches keyed by their series, closures and openings as bars that run left and right from one line with each house's period small under its name, a rule before and after as two cards, a rule's dates on a hairline with the long quiet years cut short and the date still to come hollow, a catalogue of two to four pieces under their names, two ways of doing one thing either side of a gold line, a half page photograph beside its items, and a reply card with a box to tick for each item. A page whose stamp is set is offered to the reply card alone.

  • 38c8212: An issue_tree branch can carry an icon, drawn before its label, and the tree can name its sub-points with children_column, a header the ordinary tree prints over the sub-point column in a row of its own.

  • de05ad9: journal is redrawn as a small periodical's annual letter to its readers. Every content page carries a masthead over a heavy rule and a hairline: the column's name at the left (the deck's organization), the page's section in brick red in the middle (its kicker) and the issue at the right (the footer's label), the claim in a bookish serif ending on one line, figures numbered across the deck with the editor's comment under each, the source at the foot and the page number as 「· 3 ·」 in the middle. Its cover sets the masthead large beside a photograph with the issue, the cover story in brick red and the cover lines with the pages they point to (fields), its quotation page prints the attribution exactly as written with no dash added, and its ending sets the closing words as the author broke them with the sign-off (subheading) right-aligned under a rule and the section the author wrote. The heading face is now Times New Roman with SimSun, so figures stand on the baseline.

  • e264998: The shared compositions gain a keynote setting: a talk on a dark stage, words large and bold in a warm white on the black, hairlines in a cool grey and a matte silver on the one thing a page is about. Twelve compositions come with it: hush (one sentence alone in a follow spot), giant (one figure under the claim that leads into it, with the two ends of a climb when its label is written A → B), contour (a decade as one line, only its ends labelled and the run of falls before a noted point banded), faceoff (two figures face to face), tilt (a slope chart from a from_to), podiums (two leaderboards on one scale), gulf (quantities to scale however far apart, the smallest bar drawn too), crowd (a figure written as a fraction beside a hundred dots), tower (a photograph beside two or three stacked figures), toll (two bars beside the sentence their gap says and a quote), arches (gates as round-headed doors, each with a symbol and a figure) and slate (three to six bets said one line at a time). Any face can offer them, and stage's content pages use them.

  • 46bbb7c: A kpi_cards item can say whether its move is good news with delta_good. A rise is still drawn in the theme's success colour and a fall in its danger colour by default. "delta_good": true draws the move as good news whichever way it went, such as a delivery time that fell, and false as bad news, such as a return rate that rose. The kpi cards, the bento cards, the panel and ticker figures, the four-column statistics page and the paired figures with their change capsules all read it. delta_good needs a delta of up or down, and validate says so when it has none.

  • 35cf7d3: A kpi_cards value written **4.5 万元** now sets that figure in the theme emphasis colour in the ordinary cards, and bulletin sets it in its primary. The bento panel and the big-number pages print the figure without the asterisks they used to show.

  • 5c48bfc: A headline figure can carry a tag, a few words saying what it is, such as "Binding" or "Estimate". The ordinary cards print it as a small label on a row under the figure's label, filled in the emphasis colour on the figure the page marks with **…** and outlined on the others. A layout that sets figures by hand with no place for a tag hands the page to the ordinary cards.

  • ef18d86: A kpi_cards item can carry a tone (danger, warning or success) that says what kind of news the figure is. The ordinary card paints its icon and its label in the theme's colour for the tone. Faces that set figures by hand and have no place for a tone hand the page to the ordinary cards, as they do a tagged figure.

  • 3fa3b01: Lecture has a new look, a night class at a green board. Every page stands on a blackboard in a wooden frame with a chalk ledge along its foot (a white and a yellow piece of chalk and an eraser), the deck's organization and label written on the ledge and the page's count 「3 / 18」 at the top right, its number PowerPoint's slide-number field. Every content page uses chalkboard-sheet: the page's kicker as the lesson's step small at the top left, the title in the heading serif across the whole measure, and the body drawn in the chalkboard setting, with an example's stamp (「例题 · 数字为虚构」) where the page draws it. The cover uses chalkboard-cover, the topic in yellow chalk with one stroke under it and what the class promises. A chapter uses chalkboard-chapter, the part's name with a stroke of yellow chalk under it. The ending uses chalkboard-ending: the homework with a box to tick beside each task, the next date in yellow and the dismissal, over the page's photograph. Lecture's headings now set their Latin in Times New Roman over SimSun, so an English title and its curly quotes are no longer set full width. If you copied lecture into your own theme file, its menu still names the old faces and keeps working as before.

  • f3eb5cc: Ledger has a new look, a market screen. Every page opens with a thin status bar carrying the organization after an amber dot and the date on the right. The cover sets an amber kicker, the title and a ticker row of up to four kpi_cards figures. The ending sets its kicker, the decision in a serif, the signals to watch in panels (write each bullet as "label: text") and the page's footnote, such as a disclaimer. Points, list, comparison, process, data and hierarchy pages use the new panel-sheet face, which adds numbered panels and a before-and-after dot plot in a panel to the shapes it takes, fact pages use panel-figure, and ledger now offers photo pages through the panel column of image-split. Amber is kept for the one thing a page marks, green and red only say which way a number moved, and the chart palette is amber over slate. If you copied ledger into your own theme file, its menu still names the old faces and they keep working, while poster-motif now draws the status bar.

  • 454bdd0: The shared compositions gain a lesson setting, drawn on homeroom's 2026-10 board and read entirely from the theme's tokens: handout cards rounded 10px, a 4px edge of the correcting pen on the card a page is about, the pen's wavy line, a course strip of pills, questions on ruled paper with a red margin, stamps turned a few degrees, sticky notes, a blackboard framed in wood, boxes to tick, and pills that say what kind of study a figure comes from (a journal's in the success ink, a working paper's or a vendor's in the warning ink, a law's in the pen).

  • 4abb422: A line chart can mark where a category begins (markers), up to three times, such as the ages a rule changes at. The ordinary line draws each marker as a dashed line halfway between the category and the one before it, with its label over the plot, and the hand-set compositions leave a marked line to the ordinary one.

  • 3041afb: A point of a line chart can carry a few words (data[].note), such as "Low" on its lowest year or "Rebound" on the year it recovers. The ordinary line prints an interior point's note with its value, under a point lower than its neighbours and over any other, and by the first or last point prints the note beside the value its gutter already carries.

  • d24596b: The shared compositions gain a lineup setting: a fashion show's running order, the words in the ink of the type, hairlines between rows and one drop of crimson a page. Eleven compositions come with it: order (the parts of a review as exit numbers), standfirst (a claim set large over two to four figures), duet (two figures never added), collage (a moodboard of six pictures), thread (steps along one hairline over their photographs), lengths (figures of one unit drawn as lines to scale, one of them carrying a delta), shades (a picture bracketed into grades), atelier (a sample beside the ways it was made), parade (looks in a row of tall windows), look (one look on a page of its own, its number read off an insight_panel title such as "LOOK 01") and bounds (what a piece of work did and did not do). They keep the part of a picture an author crops to. Any face can offer them; runway's content pages use them.

  • 4946aed: luxe is redrawn as a gilt invitation. Every content page sits on a card with a fine frame 24px in from its edge, the chapter it belongs to small and centred at the top between two short gold rules (the page's kicker, now accepted on every content page), the claim centred in a gold serif on one line and broken at a comma or a colon only when it has to be, a gold diamond under its last line wherever that ends, the source at the foot, the occasion and the date at the bottom left (the deck's organization and the footer's label) and the page number struck as a small gold hallmark at the bottom right. Gold goes to lines, letters and the one figure a page is about, never to a solid card. Its cover sets the invitation in a double gilt frame beside the page's photograph, its chapter pages open each part under a veil of black with the part's Roman numeral in gold, and its ending signs the card with the page's subheading as the house's sign-off. A content page with a stamp is a reply card, the stamp standing down its torn stub. The heading face is now Times New Roman with SimSun, so large figures and English titles are set in a Latin serif and an English title's quotation marks are Western. Its statement and quotation pages keep their layout inside the new frame. If you copied luxe into your own theme file, its menu still names the old faces and keeps working as before.

  • 999a81d: The shared compositions gain a manuscript setting, drawn on thesis's 2026-10 board and read entirely from the theme's tokens: cards a step lighter than the page, the primary for figures and the lead line, the accent for rules, dots and pale grounds only, and figures and tables numbered across the deck by the face that offers them. It draws a research question beside its figure with its terms, a statutory ladder stepped by birth month beside its groups, a dose against its whole with where it stood before, figures beside a trend with its turns named, a line that falls at the thresholds a rule turns on, a table of studies with its marked column tinted and its caveat, a whole and where it went as parts laid end to end, studies side by side on cards, a literature map with its empty cells framed, hypotheses with their signs and bases, survey rounds on lanes against the day a reform began, two designs each with its sketch, a threats table, a schedule with the moment it turns on, and the questions for the committee.

  • 9c9e55e: A **…** mark is drawn in the theme's emphasis in steps titles and text, icon_cards titles and text, a kpi_cards note and an insight_panel title, where it used to print its asterisks. Every component field that draws text as written now refuses a mark in validate, naming the fields that draw one, instead of printing four asterisks around the phrase. docs/ir.md lists the fields.

  • b3fcc5a: The shared compositions gain a marquee setting, drawn on rally's 2026-10 board and read entirely from the theme's tokens: cards a step lighter than the page, charts in the confetti's colours, the accent on one thing a page with the dark ink on it, and a ticket stub that names a page's section. It draws one big figure over its run of bars, two branches from one start, a year's heat with the season framed, a crowd cut into shares, where the crowd comes from, a weekend's route, touchpoints beside their photographs, a wall of peers' cases, a loop that brings results back, ticket stubs that cities honour, a plan B for each risk, a schedule by the month with its season tinted, a scoreboard still to be filled, a budget cut into shares with a run set apart, and the requests with a box for each choice.

  • dfc0128: A matrix can name its columns (columns) and its rows (rows, each with an optional icon), carry a short name over it (title), and leave a cell empty (items[].empty), such as a gap in the evidence. The ordinary grid names the columns over the cells and the rows at their left, sets the title over it as a table does, and draws an empty cell as a dashed outline with its words in the middle, in the accent with tone: "accent".

  • 0c333c2: Memo has a new look, a typed memorandum. Every content page but a statement uses memo-sheet: the section's label in red in the left margin, the point in a serif over a rule of ink, the source typed small at the foot, and eleven new shapes drawn as the memo types them (reasons with their figures beside a pasted-in photograph, slope charts, bars that run left and right, a quoted original with its meaning, a weighing with its verdict, options under their photographs, a rota, a sum on ruled paper, a calendar over its dates and a checklist of stop conditions). The cover and ending use memo-cover and memo-ending, with header lines, a stamp and sign-off lines from the page's fields and stamp. Photo and evidence pages are on memo's menu now. Titles stay on one line when they fit and break at a comma when they do not. The running head and the folio (「第 N 页 共 M 页」) are typed by the motif when the deck asks for a footer. Chart series without a mark take ink, slate and brown before the seal red. If you copied memo into your own theme file, its menu still names the old faces and keeps working as before.

  • 432e0a1: The shared compositions take a seventh setting, memo: a typed memorandum on paper. Clauses are numbered 「一、」 in the deck's own numerals beside their titles in the heading face, tables are open under a 2px rule of ink with each row's kind of source in its own outlined tag, labels, dates and sums are typed in mono, and the row a page lands on sits on a pale tint of the mark. The setting also brings the memo's paper pieces any face can use: a photograph pasted in as a turned exhibit with its typed caption (「附图 1 · …」), a stamp with its date, and a margin label beside a heading.

  • a2c76b1: A timeline milestone can say it has not come to pass (status: "pending"), such as a survey round carried out whose data is not out yet. The ordinary timeline draws its node hollow, and a face or composition that has no hollow node leaves it to the ordinary timeline or declares it.

  • 278e9d7: Museum has a new look, a darkened gallery. Every content page uses placard-sheet: the page's kicker as the hall in copper at the top left over a seam, a serif claim across the whole measure, the body drawn in the placard setting, the deck's organization and footer label at the bottom left and the page number on a door plate at the bottom right. The cover uses placard-cover, an exhibition catalogue's cover over the page's photograph with the date. A chapter uses placard-chapter: the hall's name over its title in a pool of warm light, kept when the page carries a photograph. The ending uses placard-ending, the lights going down, keeping every line you break its subheading into. Museum's heading pairs Times New Roman with SimSun, so its figures print proportionally in PowerPoint, and its new motif, museum-motif, prints the footer's marks. If you copied museum into your own theme file, its menu still names the old faces and keeps working as before.

  • a255997: A numbered_cards item can carry an icon. The ordinary cards draw it between the item's number and its title, so the number a reader refers to the card by stays where it is. Compositions with no place for it hand the page to the ordinary cards.

  • 5d51c4c: Numbered cards now paint a **…** run in their titles and texts instead of printing the asterisks, and emphasis: true on one item fills that card in the primary colour as the page answer.

  • b35543f: numbered_cards takes up to ten items, where it used to stop at eight. Past eight, the ordinary cards stand in two columns, the first half down the left and the rest down the right, so ten items, such as a work report's ten tasks, keep the height five do.

  • d4c3b38: A page can carry a ballot: the boxes a committee ticks beside each of the page's items (choices, two to four, such as 同意、不同意、弃权 or For, Against, Abstain) and an optional line left blank to sign (signature, its label). Only a face that declares a place for it draws it, and validate refuses it on any other, naming the face. Page files may fill it.

  • b65f384: A page can carry fields, one to four header lines a document form prints (a label, a value and an optional note, such as a memo's To, From, Date and Re), and a stamp pressed on the page (its words and an optional date). Both live in the page file. Like kicker, only a face that declares a place for them draws them, and validate refuses them on any other face, naming it.

  • c291471: A page may carry a kicker, a short label set over its heading, such as the occasion on a cover or what an ending asks for. A deck spec writes it on the page, beside heading and summary. Only a face with a place for it draws it, and validate refuses it on any other face, naming the face. A cover, chapter or ending face may also declare that it sets the page's footnote, such as a disclaimer at the foot of an ending; on every other boundary face a footnote is still refused.

  • e0dfd38: A page can carry a tag set with its heading, saying what the whole page rests on, such as 「RCT · NEJM 2025 · 751 例」 or "Draft for comment, June 2026", with an optional evidence kind that colours it by its source. Like kicker, fields and stamp, only a face that declares a place for it draws it, and validate refuses it on any other, naming the face. Page files may fill it.

  • 6786d42: A page can carry years: the run of years a deck follows (from, to) and the years this page is about (marked), drawn as a strip of years in the running head with the page's own years lit. At most 13 years, every marked year inside the run. Only a face that declares a place for it draws it, and validate refuses it on any other, naming the face. Page files may fill it.

  • 7744156: Two new content faces and a new image-split column, drawn from ledger's 2026-10 board. panel-sheet sets a page's evidence in dark panels, each named in a small title bar with its unit on the right: a records table, an options table, a chart beside the author's figures, a row of figures, a timeline in one or two lanes, columns or bars. panel-figure sets one figure at 200px with a comparison of bars or a few more figures beside it. The panel column of image-split lays the photograph down the left edge to edge, with the claim and a ledger of figures beside it and the photograph's caption over the source. A theme names them in its menu like any other face.

  • de05ad9: The shared compositions gain a periodical setting, drawn on journal's 2026-10 board and read entirely from the theme's tokens: the claim in a bookish serif ending on one line, every figure numbered across the deck with its title in the accent and the editor's comment under it in italic, one lead in the accent per page and no bar turned red for being the tallest. It draws an editor's note with a drop cap beside three figures, two lines over ten years from zero, bars with a symbol before each name beside a photograph, minutes against an earlier year marked on each bar, one figure huge beside the small trend it ends, a photograph over figures with a pull quote, a run of bars with dashed places for the years nobody published beside two figures, pairs of bars over the years beside a card, a run with its change bracketed and a column of discounts, shares by column beside a photograph and one share bar, two small multiples on their own scales, surveys side by side in a table, effects on one scale with the zero line, a long read in two columns under a pull quote, and plans numbered 一 to 四 with why beside a photograph.

  • fcaf63e: The shared compositions gain a pitch setting, drawn on ember's 2026-10 board and read entirely from the theme's tokens: figures set large on cards a step lighter than the page, the accent on one thing a page with the dark ink on it, and a running order of words with the page's beat underlined. It draws a whole set over a field of squares with the part a lit dot, steps that climb year by year, a funnel narrowing to its lit level, rivals with the column none has published framed, a wedge worked out as a sum with what it leaves out struck through, one figure lit beside a photograph, bets with their windows on a plan's whole stretch, two groups of figures that cannot be set against each other, gates locked in a row, a risk register, a runway with its gate and the ask with its uses as one bar.

  • 278e9d7: The shared compositions gain a placard setting: an exhibition label in a darkened gallery, warm paper words on a brown-black hall, exhibits in pools of warm light with their photographs cut round, and copper on the one thing a page is about. Eleven compositions come with it: floorplan (a visit's rooms and exhibits as a floor plan, from a roadmap), jars (two samples side by side, each as large as what it weighs), squares (quantities as squares whose areas are to scale), specimen (one exhibit beside its label, its number from a kpi_cards item's tag), decades (ranges spanning orders of magnitude on one log scale), lenses (exhibits under a microscope), halo (one figure in a pool of light under a page's claim, which lets a fact page carry both), dateline (events at their true distance in time), slice (a whole with its part cut out beside where it went), blanks (open questions on blank labels) and cabinet (a case photographed tall beside what to look for). Any face can offer them, and museum's content pages use them.

  • 1226512: A new built-in theme, proposal, sets every page as a client proposal in a ring binder: white paper with sand cards, petrol figures and one brick-red mark on what the page lands on, and the binder's tabs down the right edge naming the deck's sections (course.stages) with the page's own section lit. Its cover sets a white proposal page beside the deck's photograph, with the date, a chip naming who the proposal is for, the title and three figures. Its chapter numbers the part huge in brick red over the photograph and lists the questions the part answers. Its ending sets the decisions the client is asked to make as cards with a box for each choice, and a brick-red button in the author's own words. The deck's label stands at the top left of every content page and the page number at the bottom right. pptwise themes now lists 25 presets, and sales joins the occasions a theme can serve.

  • 283939d: A pyramid's levels can say what kind of news each is (tone on every level: danger, warning, success), and the ordinary pyramid paints each band and its legend swatch in the theme's own ink for that tone, darkened only as far as its label needs, so data graded from what must never leave to what is safe reads red, amber, green. validate refuses a tone on some levels only.

  • b3fcc5a: rally is redrawn as a campaign proposal staged as a show, one magenta lit on one thing a page and confetti thrown at the top right. Its cover lays the photograph under a darkening from the foot, a ticket stub with what the deck is and who brings it when, the title huge over the campaign's line in magenta and its facts as pills; its chapter page numbers the section on the same stub over a burst of confetti; its one-line plan sets the claim huge in two lines with the author's marked words in magenta, over a row of touchpoints; its ending recaps the next steps on a dotted line and sets a button of magenta with the author's own words. Every content page names its section on a ticket stub numbered in the order the sections first appear (kicker), sets its claim bold across the measure and hands its body to fifteen new compositions in a marquee setting. The deck's office and label stand at the bottom left and 「N / M」 at the bottom right in rally's own folio.

  • e81ced0: red-head-cover is redrawn to vermilion's 2026-10 board, a letterhead: the issuing body centred in red, bold, at 52px, its Chinese characters 12px apart (written as character spacing, so the PPTX matches the preview, and a Latin name is left unspaced), over a 4px and a 1px red rule across the page. Under them the title centred in the ink at 56px across the full measure, evened over two lines when it needs two, then the subtitle at 22px and the date with the authors at 18px in the quiet ink. The gold rules it used to draw belong to the theme's motif.

  • 06e78eb: A roadmap phase can carry an icon. The ordinary roadmap draws it in the phase's badge where its number would stand. Compositions with no place for it hand the page to the ordinary roadmap.

  • 3d59b18: A roadmap row can say what its value rests on: basis, such as pending for a budget line still to be set. The ordinary roadmap underlines a value that is not settled with a dash in the basis's ink, and the shared hand-set roadmaps leave such a page to it.

  • 90d2c95: A roadmap's phases can say how long each lasts (duration on every phase, counted in the roadmap's duration_unit), the check held as one ends (checkpoint, such as 「小测一」 or "Gate review") and what it covers (points, one to three short lines). The ordinary roadmap adds the length to the period line (「环节一 · 15 分钟」), the points under the title and the checkpoint as a tag under them, and a face that lays phases to scale draws each as long as it lasts. validate refuses a length on some phases only, lengths with no unit, and a unit with no lengths.

  • 1b210f6: A face or composition can cut a picture round: the preview clips it to the circle (or ellipse) inside its frame, cropped or not, and the export draws it as an oval picture in PowerPoint, with the same crop.

  • 03fcfa2: A row_cards item can carry a tone (danger, warning or success) that says what kind of news the row is. The ordinary cards paint its icon and its number ring in the theme's colour for the tone.

  • d24596b: Runway has a new look, a show's running order. Every content page uses lineup-sheet: a masthead across the top with the deck's organization and footer label at the left, the page's kicker and the page number at the right over a black hairline, a serif claim across the whole measure, and the body drawn in the lineup setting. The cover uses lineup-cover, a magazine cover over the page's photograph with the page's tag in crimson. A chapter uses lineup-chapter: a full-page photograph with the part's number set huge, or the part's looks in a row when the page carries an image_grid. The ending uses lineup-ending, a bow on a black stage. Runway now offers the fact kind, its heading pairs Times New Roman with SimSun so English titles take a Latin serif and Western quotation marks in PowerPoint, and its motif, runway-motif, prints the footer's marks in the masthead. If you copied runway into your own theme file, its menu still names the old show faces and keeps working as before.

  • cccf441: A scatter series can be joined as steps (steps: true), each value held until the next point and then jumping to it, such as a statutory age by date of birth. The ordinary scatter draws the staircase without dots, and the hand-set compositions leave it to the ordinary one.

  • 24a8b15: The shared compositions gain a scroll setting, drawn on ink's 2026-10 board and read entirely from the theme's tokens: the claim and the source placed by the composition, over the body or beside a photograph that runs the height of the page, a ramp of greys from the ink to the paper for whatever is told apart by depth, and the accent on one thing a page. It draws three figures over a line read aloud, a pyramid of tiers with each tier's figure in its band beside the system's other parts, a long scroll of years drawn to scale with its spans as bands, every milestone named clear of the others and of every stem and the running count as a staircase under it, a figure then and a figure now beside a photograph, countries as bars beside a card that says how they were counted, items and their sub-items as twin bars on their own scales, counts made one at a time beside a table of totals that must not be joined, a share bar of age groups with its marked run bracketed, two figures and a progress bar beside a photograph, photographs over a row of figures with their sources, a table by the day beside a photograph with the reading and an aside, findings quoted from the record with their sources, a few things to do each in one large character over its words standing upright, and a statute set upright in columns. A chart's value printed by these follows the deck's own way of grouping digits.

  • da58657: Two new content faces and a new image-split column, drawn from vermilion's 2026-10 board. seal-sheet sets every ordinary page as an official document: the claim centred and bold in the brand colour over a short accent bar, the body handed to the compositions in the seal setting, and the source at 14px at the foot. Its menu parameter cards sets numbered cards as rows (the default) or as panels ("tiles"). Five compositions are new and drawn only in that setting: roster sets six to ten short items in two columns of numbered cells, scores sets a scorecard as an open table with each verdict as a tag, targets sets an insight_panel statement in a reversed block beside a from_to table of targets, trend sets one line over its value axis with a marked range behind it, and rings sets completion rates as large rings with the amounts behind them. seal-figure sets one figure at 240px with its tag and note, and up to three supporting figures beside it. The seal column of image-split lays the photograph down one side edge to edge, with the claim and a column of figures beside it. A theme names them in its menu like any other face.

  • c02744b: The shared compositions take a fifth setting, seal, settled on vermilion's 2026-10 board: a formal report on paper. Items are numbered in the deck's own numerals (一、二、三 in a Chinese deck, 1, 2, 3 in an English one) in small squares of the emphasis colour, tables are open under a 2px rule of it, the mark is spent once a page on a reversed row, a tinted row or a figure, and the accent only draws rules, bars, arrows and outlines. rows, tiles, table, lanes, rail and columns each gain a seal form: numbered rows with the marked one reversed, numbered panels under an accent bar, an open table with tags at its right edge, a timeline on one axis with its lanes above and below, grouped columns that hang values below zero, and one line over a marked value range beside a column of figures. The headers, labels, legends and tags are the board's 14 and 15px and carry the seal-spec exemption the L1 audit knows. Nothing draws the setting until a face asks for it.

  • b2cdffe: New component sketch: a schematic, with no figures, of how a study tells its effect apart. "kind": "discontinuity" draws an outcome jumping at a cutoff, two fitted lines over scattered points with the jump's arrow and its name. "kind": "difference_in_differences" draws a treated group's trend leaving its control's after an event, the path it would have kept dashed and both groups named. The IR now has 63 components.

  • d4a62b2: A point in a stacked or percent_stacked chart can carry emphasis. It marks the column the point stands in: that column keeps its colours and the other columns step back, the way a marked bar does in a bar chart. A share bar still marks a run of its parts with series emphasis.

  • e264998: Stage has a new look, a keynote on a dark stage. Every content page but a quote uses keynote-sheet: the page's kicker as the chapter small at the top left, a bold claim across the whole measure, and the body drawn in the keynote setting. The cover uses keynote-cover, the hall's photograph darkening from the left with the occasion in silver, the title large and bold and the date. A chapter uses keynote-chapter: the act's number over its name in one huge word, over the page's photograph or on the black. The ending uses keynote-ending, the last sentence alone with its marked words in silver. Stage's first motif, stage-motif, draws the presenter's clicker along the foot of every page: the part of the talk already given in silver and the count 「5 / 18」, its number PowerPoint's slide-number field. A fact page can now set a lead-in claim and one figure together. If you copied stage into your own theme file, its menu still names the old faces and keeps working as before.

  • 482260e: A steps item can carry an icon and a tone. The ordinary steps draw the icon in the step's badge where its number would stand, and ring the badge of a step with a tone in the theme's ink for it: danger for a check that can stop the process there.

  • 0cee6c5: Swiss has a new look. Every page carries an 8px red bar along the top, and the grey ticks on the cover are gone. Content pages open with the chapter's number in red and its name, a black bold claim across the full width and a heavy black rule, with no title band and no section badge. Data is black, steps back in grey, and red marks the one thing a page is about. Points, list, comparison, process, data, evidence and hierarchy pages use grid-sheet, statement pages grid-statement, fact pages grid-figure, and photo pages image-top with its grid band. The cover, chapter and ending pages are redrawn, and a chapter page now lists the pages it holds. If you copied swiss into your own theme file, its menu still names the old faces and keeps working as before.

  • ccabae0: A tag can say what its figure or rule rests on: basis is law (a provision in force, which the tag cites), estimate (a figure worked out under a stated assumption, not published and not a forecast), pending (a figure or item still to be confirmed or filled in) or proposal (a rule proposed or still negotiated, not yet law). The ordinary tag outlines the law in the primary, an estimate and a proposal in the accent and a pending figure in the muted ink, and dashes the three that are not settled. A basis beside settled or evidence is refused, since each says the same a second time.

  • fd6805c: A tag can say what kind of source it names: evidence is trial, label, company, press, draft, official or registry. The tag is outlined in the ink the theme keeps for that kind (a journal's trial and an official document in the primary, a label and a registry in a quieter series colour, a draft in the next, a company's own figures in the warning ink, a press report in the muted ink), so a reader tells a journal's figure from a company's at a glance. The ordinary kpi_cards, data_table, comparison and icon_cards draw it that way. A theme that sets its tags in its own inks keeps them.

  • 4c2ffce: A tag can name a working paper or a preprint as its source (evidence: "preprint"), a study no journal has reviewed yet, apart from a trial or a study a peer-reviewed journal has published ("trial"). It is outlined in the ink a draft out for comment takes, and the yearbook dashes it as a source that is not final.

  • 10562c5: A tag can say its verdict is final: settled: true on 纳入, 不纳入 or "Approved", against an open or conditional one such as 暂缓 or "Case by case". The ordinary renderers fill a settled tag instead of outlining it, in the emphasis colour like the marked row's tag, or in a pale grey with muted words when it is also quiet, a final no.

  • fe0dd8d: A tag can say what kind of news it is: tone is danger, warning or success, the same words timeline, kpi_cards and row_cards already use. The ordinary renderers outline the tag in the theme's ink for that news, so 「超说明书」 or "Off-label" reads as a breach beside tags that only name a row.

  • 04ccd6c: Terminal has a new look, an incident console. Points, list, comparison, process, data, photo, evidence and hierarchy pages use console-sheet, the cover, chapter and ending pages use console-cover, console-chapter and console-ending, panels have square corners and every page sits on a flat blue-black. Statement and fact pages keep their faces. If you copied terminal into your own theme file, its menu still names the old faces and keeps working as before.

  • 999a81d: thesis is redrawn as a thesis proposal set as the pages of a manuscript. Every content page carries a running head, the deck's label at the top left and the page's section in emerald at the top right (its stage, numbered by its place in the deck's course), over a gold rule, the claim in a bookish serif bottom-aligned over the body, figures and tables numbered across the deck (「图 3」, 「表 1」), each line of the page's footnote a numbered note over the folio with the text pointing to it by a superscript, and the page number centred at the foot. Its cover is a title page beside a photograph with the report's fields on ruled lines, its chapter page lays ivory over the photograph with the section's number huge in emerald and the whole deck's contents with the section lit, and its ending lists the points the talk leaves under the author's own small title (kicker) over a large closing line. The heading face is now Times New Roman with SimSun, so figures stand on the baseline.

  • d55964b: A timeline milestone can carry an icon, drawn in a ring on the axis where its dot would be, and a tone: danger for something that broke, warning for something still being handled, success for something that recovered. The ordinary timeline paints the dot or the ring in the theme's own colour for the tone. Compositions that have no place for either hand the page to the ordinary timeline.

  • 1feb252: A timeline can now run on two tracks: give each milestone a lane, and optionally name the two lanes in order with lanes. Faces that draw lanes set the first one above the axis and the second below. The ordinary timeline prints the lane before the date.

  • 1155acb: A timeline milestone can carry a tag, a few words that say where it stands (such as 已定 or Proposal, with a basis to say how firm it is), and a source, where its date or rule comes from (such as the act that sets it). The ordinary timeline sets the source in a small line under the milestone's words and the tag under that, in either layout. The shared hand-set timeline compositions leave such a page to the ordinary timeline, and terminal's checklist close declares what it has no place for.

  • 1a6f7e6: A timeline can divide its axis into up to three named spans: periods, each a from, a to (written the way the milestones write their dates) and a label, with an optional basis such as proposal for a span that exists only if a proposal passes. The ordinary timeline names every span in a row under its milestones, a dashed swatch for a span that is not settled. A vertical timeline refuses them. The shared hand-set timeline compositions leave such a page to the ordinary timeline, and terminal's checklist close declares the spans it has no place for.

  • 3067ecd: validate now draws every content page the way render draws it, a plainer layout taking over included, and refuses a page that would leave anything off or cut its heading, its source line or a component's words. Such a page used to pass validate and only stop at render, or reach the file with a cut the audit reported. The error names the page and what would be lost: which block, how many items, which text. When one more drawing of the page finds it, the error also says what to take off: a text to shorten, how many items of a list the page holds, the blocks past the ones it draws, or a stamp or tag the layout has no place for. render, preview and inspect validate the same way, so preview now refuses such a page instead of drawing it with a note. render --allow-dropped-content (and generatePptx's allowDroppedContent) skips this check along with the export's own content-drop gate, and validateIr takes the same option.

  • f5eb97b: vermilion's motif is redrawn to its 2026-10 board: a gold double rule, 2px and 1px six pixels apart, from x64 to x1216. Content pages carry it along the head, the cover along the foot, and the ending at both. The chapter page and the sparse faces still draw their own, and the photo page's column draws it from the photograph's edge.

  • da58657: Vermilion has a new look, the page of an official document. Points, list, comparison, process, data, evidence and hierarchy pages use seal-sheet: the claim centred in red, items numbered 一、二、三 in small red squares, open tables under a red rule, red spent once a page and gold only for rules, bars and outlines. Fact pages use seal-figure, and vermilion offers photo pages for the first time, with image-split's seal column. The chart palette puts two warm greys after the red, so data nobody marked steps back. If you copied vermilion into your own theme file, its menu still names the old faces and keeps working as before.

  • bbdc54f: A waterfall bar can carry a note, a short line under its label such as the quantity it stands for ("3.187 吨"). The ordinary waterfall sets every note in a line of its own under the bars' names and gives that line's height from the plot. The shared hand-set bridges leave such a page to the ordinary waterfall.

  • 60008b8: A waterfall can carry a title, a short name printed over the bridge the way a table's title is, such as "How a private kindergarten's fee is worked out".

  • 6bab867: The shared compositions take a ninth setting, yearbook: a long-term account kept year by year, the way a board reads where a cost is heading. Figures sit on flat cards over hairlines, and years, dates and formulas are set in the mono face. Every figure or rule that is not a settled fact carries a small pill that says what it rests on: a § before a provision of law, a dashed outline in the accent around an estimate, a pending figure or a proposed rule. Fourteen compositions draw the shapes this setting adds: background beside a decision card (motion), months laid to scale (calendar), long curves over a table of years (horizon), a bridge beside its formula (formula), a wrong sum beside the right one (errata), a whole cut into amounts with a bracket (breakdown), bars against a benchmark (benchmark), paired columns beside a photograph (paired), a procedure over its table (procedure), one figure set huge (magnitude), a whole cut in two with what each part means (segments), routes under their photographs (survey), rules on a year axis (outlook) and phases with their budget lines (phases).

Patch Changes

  • 8b040b5: The architecture stack checks its layer names, items and layer numbers against the band they sit on. On a dark theme whose primary is a fill colour the layer names used to come out at about 1.2:1 and could not be read.

  • 7429a1d: The ask ending's button carries the author's words: the page's first bullet, or its paragraph. Without either it draws no button, and without a heading no heading. It used to print "We're raising." and "Let's talk" in English on every deck, Chinese ones included.

  • 943a1e4: pptwise audit no longer reports a people card's initials as low contrast. The contrast check measured every line of text as if it had descenders, a quarter of its height below the baseline, and under wide initials such as "MC" the corners of that band fell outside the round badge onto the card around it. A line now reaches below its baseline only when one of its characters does, so text that sits wholly on a badge or band is graded against it, while letters that do hang past an edge are still reported.

  • 35c389e: audit no longer counts a cover, a chapter or an ending in a run of pages that repeat their lead component. A chapter that draws its photograph from an image component used to start a run with the photo pages after it, and a run could carry across a chapter. Only content pages make a run now.

  • 02fc52f: The audit reads a word drawn as an outline only (no fill, a stroke) by its stroke, the ink a reader sees, and skips a text with neither. It used to measure the missing fill and report a large outlined numeral as unreadable.

  • 307ed98: pptwise audit now reports the parts of one line colliding as overlap: words drawn on top of a highlighted run before them, or a highlight shorter than its words.

  • 9bad77f: pptwise audit reports a block that runs over the page's source line. A layout that gave its body more height than the room above the source passed every check while a closing note's panel covered the source. The audit now compares each block with the source line under it and reports an overlap finding naming the block.

  • 2e42d7e: The audit reads a source line written as several lines as that many notes. A face that sets each note on its own line after its own number no longer reports the page's source as missing.

  • b2b14a6: pptwise audit grades text near a slanted panel against the panel's real outline. A filled path drawn in straight segments used to stand for its whole bounding box, so text on the page just past a slanted edge was graded as if it sat on the panel and reported as low contrast when it read fine.

  • 70b9bc3: pptwise audit quotes the whole line a truncation finding is about, as it stands on the page, instead of its first 24 characters, so an author can tell which of several similar lines was cut.

  • 019f2d9: pptwise audit reads a line of text turned about a point where it is drawn. A Latin name set up a binder's tab, turned a quarter, was measured as if it ran across the page and reported off its right edge on every content page. The overflow check now follows the whole transform list, so a turned line is checked along the direction it actually runs.

  • 90c03ee: A hub_spoke badge number sits centered in its disc in the exported deck, and a concept_equation's plus and equals signs sit on the line they join. Both were centered with an SVG attribute the export does not read, so in PowerPoint they rose by about a third of their height above where the preview showed them. They now state their baseline directly, so the preview and the deck agree.

  • 5a22896: A bar chart whose series cover different categories now centres each bar on its category. Before, each bar kept the place its series would have had in a full group and stood off to one side of the name printed under it. Writing each group of categories as its own series, such as full years beside half-years, is now the way to colour two groups apart, with no zeros or stacking needed.

  • 57aacc7: In a bar chart with one bar marked, every legend swatch now takes the colour its series' bars are drawn in. A series with any bar besides the marked one is named in the grey those bars step back to, not in the marked bar's colour, so its grey bars no longer read as another series' bars. A Forecast or Target entry follows the bars it names the same way.

  • 08aaf28: In a bar chart with one bar marked, the legend swatch of a series whose bars all step back to grey is now that grey too, so the legend no longer names a colour no bar on the page has.

  • 64a318f: A face's source line with Chinese in it is set upright instead of slanted, since Chinese has no italic, and a bento panel's figure cards set their glow clear of a wide figure in a serif heading face instead of on its last digit.

  • 1be0760: A figure the author marks (**…** around a kpi_cards value) now stands out in bento-panel: it takes the theme's emphasis ink and the other figures in its group take the text ink, as they do in the ordinary kpi cards. Every figure in a bento group used to take the accent, so the mark had nothing to stand out from. Groups with no marked figure keep the accent.

  • b7aa150: A bento grid keeps equal items in the order they were written. Three icon cards beside a photograph, which outrank it and take the grid's three biggest cells, now read 1, 2, the photograph, 3, not 1, 3, the photograph, 2.

  • 20e592c: On a bento page, icon cards that carry tags get a tile each like any other icon cards, each tag set beside its card's icon. Kept whole, four tagged cards used to share one tile four across and lose their titles and text to its width.

  • 78505d7: When a cover, chapter or ending face cannot draw a block because its items carry fields the face has no place for, validate now says which: what the face draws of each item, the fields to leave out, and which items carry them. A row card's text on rally's pill row, a milestone's description on rally's or ember's closing steps, an icon on a ticker figure, a picture with no caption in runway's line-up and the like used to get a refusal that said only that the face could not draw the block as written.

  • e56fee6: validate now refuses a cover, chapter or ending page whose face would leave part of a block off: a list item too long for the one-line label close-word-ending or console-ending sets it as, a button's words wider than binder-ending's pill, or a year-scale cover's timeline dated by quarter. Where words are too long, the error quotes the part that fits. binder-ending's button used to run off the page with nothing to say so, and now declares the loss.

  • 75bc01f: validate now refuses a cover, chapter or ending page whose heading takes the room its other blocks need, such as crayon's closing page, which left all three contact cards off under a two-line title. The error quotes how much of the heading the face keeps them under.

  • 407fc42: validate now refuses a block with fewer items than its cover, chapter or ending face draws, and names the floor: a ticker cover with one figure, a line-up chapter with two looks, a year-scale cover with one year. Such a block used to pass validate and be left off the page, with only the export saying so.

  • dc1034a: On a page with its own background, a theme skin's statement, pull quote or hero figure set in the theme's brand colour is lifted until it reads on that background, keeping its hue. Pages on the theme's own background are unchanged.

  • c665026: The bullet length checks in validate now count only the words a reader sees. The ** around a marked run no longer pushes an item over the limit.

  • c62d335: A callout's icon reads on its panel on every theme: where the variant's own colour would sit on the panel nearly unseen, such as an info callout's primary on a dark theme whose primary is a shadow of its page, or a pale yellow tip on a light one, the icon takes the readable ink instead.

  • 189a9d1: A centred title that breaks onto a second line now carries its gold diamond down with it. The diamond used to stay where a one-line title leaves it and ran into the second line's type on luxe pages, and on vermilion pages with a subheading.

  • dbee58c: Charts and waterfalls now group a figure's digits in threes the way the chart's language prints it. An English chart reads "2,778" and "1,500,000" where it read 2778 and 1500000, on bars, labels, axis ticks and totals alike. A Chinese chart keeps a four-digit figure whole, 「8490」, and groups from five digits, 「10,575」, which is what GB/T 15835-2011 asks of Chinese text.

  • c614755: Chart value labels on bar, horizontal bar, pie, donut, funnel and dumbbell charts now name the body font, so previews no longer fall back to a serif for them. On a dumbbell chart, a row whose end is just left of its start now prints the end value before the end dot instead of over the start dot.

  • d01dbb7: A chart legend sets every series name whole. Each name used to get 160px whatever room the header row had, about eighteen Latin characters, and lost the rest. A name now takes the width it needs, and when one row cannot hold every name the legend runs onto a second or third row, moving the plot down to make room. Only a name wider than the whole chart is cut, and it is still reported as cut. Names that do not fit in three rows are declared and the export stops, as before.

  • 5a22896: A chart and a callout under it now share a page that has room for both. A chart can draw its plot a little shorter rather than send the page to a plainer layout or leave the callout out, so on brief a two-line callout under a chart keeps the page's own layout, at spacious pacing too.

  • 5594dad: Charts print a whole value with the decimals its neighbours carry. A deck's JSON keeps no trailing zero, so an author's 1.0 reached the chart as 1 and printed as 「1」 beside 「1.3」. A whole value now prints with the fewest decimals the chart's other values carry, 「1.0」, and a value with a fraction keeps its own, so 4.4 beside 5.66 stays 「4.4」 on the hand-set plots too, where it used to print 「4.40」.

  • 9762f1e: Chinese headings and other balanced Chinese lines now break after a comma or a full stop instead of one character past it. A cover title such as 「内需缩了两成,四季度怎么打」 used to split 「四」 from 「季度」 across the lines and now breaks after the comma. A two-line Chinese heading also evens its lines when a better place to break leaves them at least as even.

  • 78dbda6: Chinese text no longer breaks a line between a number and its unit. A figure such as "1.93 亿元", "2,860 万元" or "12 个月" now stays on one line instead of leaving "亿" at the end of one line and "元" at the start of the next.

  • 1dab9ec: A Chinese line no longer breaks inside a power figure's unit. 「1.58 亿千瓦」 kept 「1.58 亿」 on one line and sent 「千瓦」 to the next, because only a magnitude before a counted thing (「亿元」) was held together. A magnitude now stays with a magnitude after it (「亿千瓦」, 「万千瓦」), 「千瓦」 and 「千瓦时」 stay whole, and a figure stays with 「瓦」.

  • b37f3f4: The Claim and Proof evidence layout, which no built-in theme's menu uses, now prints a page's subheading as a muted line under the claim, in the type it sets the source line in, and moves the evidence down under it. It used to leave the subheading off the slide without saying so. A page without a subheading looks as before.

  • bc74977: Two layouts no built-in theme uses, the Crayon Triptych list page and the Strip Grid photo page, set a page's subheading and its footnote on one closing line and printed only the subheading when a page wrote both. The footnote now follows the subheading on that line, after a middle dot, the way the statement pages join a quote's speaker and a page's footnote.

  • e32aa44: A marked line in a combo chart now prints its first and last values when the values between them would land on taller bars. It used to print none at all, so a line climbing from 45% to 96% under the cash-flow bars said nothing about where it started or ended. When every value has room, every value still prints.

  • 4c6c0d9: terminal's verdict cards take the page's closing verdict or callout as a banner under them, and cards with no icon set their title level with their number. A numbered list with a verdict banner after it used to lose the banner on terminal.

  • 40ba604: terminal's console pages draw every field they take. A table of figures with a row icon is set as a text table with its icon, a figure panel colours its icon and label by its tone, and the checklist ending marks the milestone the author highlights, draws its icon and tone, and names its lane before its date. These fields used to be left off the page without a word.

  • f224e10: A cover's top-left mark (a legal classification, or the confidentiality mark) takes its color from the band of the cover's own it stands on, not from the page's background. On runway's cover painted #777777 the mark came out black on the cover's near-black stage at 1.14:1, and on homeroom's cover painted a mid-tone it read 2.92:1 on the board. A classification on five more covers that paint their primary under the corner (fashion-masthead, header-band, left-anchor, show-headline, split-diagonal) was set in the page's dark ink on that primary. Each now reads. A mark on a cover that paints nothing under it is unchanged.

  • 03f6d0c: A crayonbox-cards page with four or more numbered cards now draws every card, as the ordinary cards the face draws for any other block. It used to set the first three on its drawing-paper sheets and leave the rest off, which validate passed and only the export refused.

  • 3d019a1: crayonbox-cards widens its section capsule to hold a long section name whole instead of cutting it at 156px.

  • 4923dea: Curly quotation marks now take the width PowerPoint gives them. Text set in Georgia measured “ ” and ‘ ’ a full em wide, more than twice their real width, so the words after an opening quote, and the highlight under a marked run, sat to the right of where PowerPoint draws them. A quote in brief's figure and chart pages now sets its marks in the line instead of hanging the opening one.

    Headings with no Chinese in them now break into even lines rather than filling the first line and leaving the rest short, and a quote set large evens its lines the same way. Chinese headings keep their current breaks unless the last line is under half as long as the first.

  • c50c148: The em dash and the middle dot now take the width PowerPoint gives them. Like the curly quotes, PowerPoint paints "—" and "·" from the run's Latin face, so in Georgia a 「——」 measured about half an em wider than drawn and a "·" about a fifth of an em wider. The words after them, and the highlight under a marked run, sat to the right of where PowerPoint draws them, and in the preview a highlight after a dash left a gap. Regular YaHei measured its "·" twice as wide as drawn, and code set in Consolas counted its em dash a full em. Lines that hold a dash or a dot may now fit a few more characters.

  • f1c0773: A table cell longer than its column now wraps onto up to three lines, and its row grows to hold them. Every cell used to be one line, so a sentence in a column of short words lost its tail and the only ways out were to cut the words or switch to a comparison. A table that would cut a word also sizes its columns from what each needs, so a column of short words keeps them on one line and the long column wraps. A box too short for the wrapped table gives back lines first, down to one line a row with the cuts reported, before it drops a row. A table whose cells all fit one line is drawn exactly as before.

  • bb00a9b: Every chart in a deck now prints its figures one way. The language of a chart's figures and the words around them (「个百分点」 or "pts", 「预测」 or "forecast") comes from the deck's headings instead of the chart's own labels, so a Chinese deck's chart of quarters no longer prints its figures the English way beside a chart of company names. A Chinese deck groups four-digit figures (「3,291」) when its author writes four-digit figures grouped anywhere in the deck, and otherwise leaves them whole (「3291」) as before. Five digits and more are grouped either way.

  • f4dc861: A page's decor corner tag that has to give way to the layout is now reported instead of vanishing. The tag sits in the top right corner behind the page's own content, and where a layout draws something there (the blackboard's frame on every lecture page, the photograph on the photo pages of brief, bulletin, ledger and swiss, ink's chapter) the tag and its words were removed without a word from validate, render or audit. They are still not painted over the layout, and the page is now reported as content-dropped and refused at export, so the author can remove the tag or move its words into the page.

  • f717a96: A device_mockup caption sets its words in an ink its band can read, and the band under it is opaque, the way a picture's caption band already was. On dark themes whose primary is a dark block colour the caption used to sit between 1.02:1 and 1.25:1 (rally, luxe, ledger, stage, terminal, museum, lecture), and crayon's at 3.96:1.

  • 8c03161: When a layout cannot set a page's stamp, footnote, heading or tag and the export refuses the deck, the error, the audit and the preview note now name what is missing ("1 stamp", "1 footnote") instead of calling it "1 content block". A memo cover whose stamp was too long for its seal sent its author looking for a missing block of the body.

  • f3ce374: The DSH plugin now works on DSH Desktop for people who never installed Node. Desktop keeps its own Node off the agent's PATH, so the preview tool's node fallback failed and the skill told the model to run a node that was not there. When no node is on PATH, both now run the CLI with Desktop's own executable in Node mode (ELECTRON_RUN_AS_NODE=1), still in a separate process.

  • 1cc28d6: A DSH plugin added from the GitHub address now says what went wrong. That source has no built engine, so the plugin installed and then every deck failed on a missing file. The skill now tells the model to stop and ask the user to remove the plugin and add it again by package name, the preview tool fails with the same message, and pptwise doctor flags the profile with the fix. On the desktop profile, doctor's fix now points at Desktop's own Add plugin instead of an npm dsh command that cannot reach that profile.

  • 1aacb90: The DSH preview card's download no longer saves a deck as name.pptx.pptx when the deck's filename already ends in .pptx.

  • a7c8a97: DSH's Plugins page now lists the plugin as pptwise with the pptwise icon, instead of the package name @liustack/pptwise beside the default artwork.

  • c809c0c: In DSH's PTC (Code Mode), pptwise_preview no longer returns every page's SVG to the model's program. Its result now carries the preview id, title, page count, finding count and draft flag, and the preview card loads the pages from the plugin's own route, as it already did in Code Mode.

  • d26798d: On DSH 0.1.7 and later, the preview card's Open button fills the window again. The viewer used to open inside the collapsible work group that holds tool calls, cropped to a small box in the chat column. It now mounts on the page body.

  • 60d5a27: A dumbbell chart now names its axes. The rows' title (axes.y_title) and the values' title and unit (axes.x_title, and axes.x_unit or axes.y_unit) print as one line under the rows, the way a horizontal bar chart names its axes, so a guidance chart in 亿美元 says what its figures count. validate no longer warns that a dumbbell's axes are ignored, except for show_grid, which it has no plot to draw on.

  • 043ed05: A marked run (**…**) always looks different from the words beside it. vermilion now marks a run in its red, where the run used to fall back to its gold, which is kept for rules and is too faint to read as text: a marked phrase in a comparison was the hardest one on the page to read. And a run whose emphasis colour is the colour of the line it sits in, such as a mark inside vermilion's red title or luxe's gold one, now takes the theme's text ink instead of vanishing into its line.

  • 58fa93f: A **…** run in a callout is now measured at the bold weight it is drawn in. Before, the highlight under it stopped short of the bold words and the text after it started on top of them, most visibly with Latin letters and figures. Callout lines now wrap to their drawn width, so a line ending in bold words stays inside the panel. Paragraphs and bullets place their highlight from the same face as their text.

  • 7e6a7e6: The space beside a marked run now survives in every renderer. A **…** run set in the theme's emphasis colour is drawn as its own text span, and rsvg-convert dropped the blank at the edge of each span, so "Added worldwide: 112 GW, up 48%" previewed as "worldwide:112 GW". Such spans now carry xml:space="preserve". Browsers and the PowerPoint export already kept the space and draw the same text as before.

  • 8037326: Four ending faces that only a theme file of your own can pick (defense-close-ending, homework-close-ending, next-lecture-ending and decision-close-ending) drew no heading at all on a page that also had bullets, and nothing said so. The heading now takes the list's first row, in the same size and place as a heading written as the list, and the bullets follow it. Such a page holds one bullet fewer, and validate says so when it has too many. action-pad-ending had no place for a subheading beside bullets, where the heading is the call to action, and validate now refuses one there instead of letting it vanish.

  • cc77ec8: Seven ending faces that set a heading written as a list in fixed rows (defense-close-ending, homework-close-ending, next-lecture-ending, decision-close-ending, action-pad-ending, care-plan-ending and reminder-list-ending) now declare the lines they have no row for. validate already refused such a heading, but a deck rendered past it, or exported with --allow-dropped-content, lost those lines with nothing to say so. The export now stops and names them as items, and audit reports them as content-dropped.

  • 4742e58: The label over an evidence page's card follows the deck's language on almanac, brief, museum, rally and vermilion. An English deck used to print a Chinese word there, such as 「案卷 · 13」 on vermilion. It now prints "File · 13", "Sample 13", "Evidence 13", "Exhibit № 13" or "Measured · 13".

  • ccb3695: exit-word-ending keeps each line you break its subheading into, where it used to run them into one line.

  • 2546633: A dashed or dotted outline exports dashed to PowerPoint from a rectangle, a rounded rectangle, a circle or a path, not only from a straight line. A dashed frame, a dashed note box or a dotted curve used to open in PowerPoint as a solid line.

  • 25b6afb: A path that carries on drawing after it closes a shape exports whole to PowerPoint: the next stroke starts from the closed shape's first point, as in SVG. The scale icon used to open in PowerPoint without its two pans.

  • b913bf8: The footnote on bento-panel, tone-adaptive-content and stacked-poster pages now fits the type area: a long source shrinks to 16px, then is cut and marked as cut, instead of running off the page. A marked run in it is painted instead of printing its asterisks.

  • 11a7e97: The source line the bento panel, tone-adaptive and stacked-poster pages set is upright by default instead of italic. A face that wants it slanted says so, and a line with Chinese in it is never slanted.

  • 16c653a: A fishbone whose effect takes three lines no longer hides the last rib's first cause behind the effect box: that rib's causes hang further out along it, clear of the box.

  • 70c1875: A picture fitted to its frame (fit: "cover" or "contain") inside a scaled or turned group now exports at the group's scale and turns round the centre of its frame, where it used to keep its unscaled size and, turned, land off its frame.

  • 98bd71d: A flowchart's node and edge labels sit centered in the exported deck, the way the preview shows them. They were centered with an SVG attribute the export does not read, so in PowerPoint every label rose by about a third of its height: node text sat high in its box, and in a long chain squeezed to the smallest type the tops of the characters crossed the node's edge onto the incoming arrow. The labels now state their baseline directly, so the preview and the deck agree.

  • 12f6d65: A flowchart node too narrow to set any of its label used to draw an empty, cut line in its place, which named no field, so the page kept its theme's layout with the label gone and validate passed it. The node now marks its label left out, the page goes to the plainer layout when that layout draws every label, and validate refuses it otherwise, naming the node.

  • 0ed3746: ember's funnel page rounds its levels' corners to the hundredth, so it draws the same markup on every Node and platform instead of printing a fractional power's last bits.

  • 61fa6a0: A heading that takes two or more lines breaks a Chinese line between words rather than inside one (「年度战略」+「回顾报告」, not 「年度战略回」+「顾报告」), and an English one after a comma or a colon where that keeps the lines even enough. A heading that fits on one line is unchanged.

  • 0eeb577: When validate refuses a cover, chapter or ending heading that is too long for its face, it now counts the heading's own characters or words and quotes the part the face holds. It used to count a stock sentence of ordinary words, so a heading of six long English words could be refused as holding "about 12 words at most".

  • 54e3712: A hub and spoke diagram set in a box too narrow for its words, such as half a page beside a row of figures, now declines instead of cutting its labels and descriptions short. The page then steps aside to a layout with room, or the drop is declared and the export refuses the deck.

  • c709413: Icon cards with tags keep their text. The tag row under each icon could take the height a row of cards had for its text, and then no line of any card's text was drawn while the audit reported a cut title. The icons now shrink first to make room, and when even the smallest icon leaves a card no line of its text the cards decline the space, so the page finds a taller one or the export says what it lost. A text cut short is reported by its own opening words.

  • 097a41e: A picture's caption paints a **…** run as a marked run on the photo pages that take the whole page (image-split, image-top, image-bottom, image-annotate and the grid and notice photo pages) and on the ordinary image. They fitted the caption as raw text and printed its asterisks. A caption with no mark draws as before.

  • 96c80c3: A photograph set to fill its box (image with fit: "cover") is cropped shorter when its page runs out of height, down to a band a fifth as tall as it is wide, instead of being dropped. A comparison page with a table and a captioned photograph lost the photograph and refused to export. A contained picture keeps its height.

  • 5f31efe: A picture's caption in an image_grid paints a run the author marks with **…** the way every other caption does, rather than printing the asterisks.

  • fd3eeff: The ink cover's and close's seal no longer cuts part of a stamp. The seal holds one character, and it used to print only the first character of a longer stamp and never its date line, without a word from validate, render or audit. A one-character stamp with no date is cut in the seal as before. Any other stamp leaves the seal on the hall's first character, as on a page with no stamp, and is reported as content-dropped and refused at export, so the author can shorten it to one character.

  • 7414912: A journey_map lays out the dip's opportunity card in the bold it paints it in. Laid out at the regular width, a Latin phrase could run past the card's right edge and under the next card.

  • 48b0ca5: A content page's kicker is now checked against what actually prints it. museum's Placard Sheet and runway's Lineup Sheet leave the kicker to their theme's motif, the hall sign and the masthead, which print it over any content layout. A theme file that put either layout under another motif lost the kicker without saying so, and validate passed it. validate now refuses it there, naming the layout, and takes a kicker on any content layout under the museum or runway motif.

  • 8ffcd3f: A headline-number card's up or down arrow now follows its figure and unit on the same line, and the figure is fitted to the room the arrow leaves. The arrow used to stand alone in the card's top right corner, where a long figure such as "600 至 640 亿" ran under it.

  • f556339: A headline figure's unit is set a space after the number, the way the rest of a deck writes it: "2 months" and 「936.70 元」, no longer "2months" and 「936.70 元」. A percent sign, a Latin magnitude ("2m", "3.4bn") and a multiplication sign stay glued to their figure. The space comes out of the unit's own room, so the number keeps the size it had.

  • 62cc5b7: A figure card no longer cuts its unit short or leaves it off without a word. When a unit does not fit beside its figure, the figure gives a few points of type first, and a unit that still cannot be set whole marks the figure's line, so audit reports it as content-truncated and the export refuses the deck until the unit is shortened. A figure such as "2.0 billion years" in a narrow column now keeps "billion years".

  • 988a164: English text no longer ends a paragraph on one word alone. A closing column that read "IEA sees coal power up 1.4% in" over "2026" now reads "IEA sees coal power up 1.4%" over "in 2026": the last word of the line before moves down to keep it company, the way CSS text-wrap: pretty sets body text. The move never adds a line, never leaves the line above a single word, and never makes the last line wider than the others, so nothing gets smaller or cut. Chinese text keeps its own rule for a lone last character.

  • 1ebfe6b: An English heading with two sentences now breaks between them when the first fits on its line. swiss's statement read "Clean power met all new" over "demand. Not settled yet." and now reads "Clean power met all new demand." over "Not settled yet.", the way a Chinese heading breaks after its comma. The break never sets a line wider than the plain wrap would, so the heading keeps its size, and the lines the break leaves are evened. A last sentence of one word does not get a line to itself, and a full stop in an initialism such as "U.S." is not read as a sentence end. Balanced quotes follow the same rule.

  • f184664: A line or area chart whose categories count evenly (2015, 2016, … or 10, 20, 30) names every second or third point when the labels do not fit the room between points even at the floor size, instead of cutting every label to a stub. A half-width chart of the years 2015 to 2025 printed 「201 201 201」 and now names 2015, 2017 and so on to 2025. Categories that do not count keep a label each, cut and marked as before.

  • ace4b01: A line or area chart draws a point that missing categories leave alone as a dot in its series' colour. The line breaks at a missing category, and a point with a gap on each side, or between the axis and a gap, had no line to sit on and was not drawn, while its start value still pointed at it.


These notes are cut short: GitHub caps a release at 125,000 characters. The full list is in CHANGELOG.md.