{"componentChunkName":"component---src-templates-post-jsx","path":"/blog/polypane-24-recording-3-d-view-custom-tab-colors-and-html-editing/","result":{"data":{"mdx":{"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nconst _frontmatter = {\n  \"title\": \"Polypane 24: Recording, 3D view, Custom tab colors and HTML editing\",\n  \"cover\": \"/img/mail/icon.svg\",\n  \"date\": \"2025-04-23\",\n  \"type\": [\"announcement\"]\n};\nconst layoutProps = {\n  _frontmatter\n};\nconst MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  let {\n    components\n  } = _ref,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, `This is a jam packed release. We're introducing a new recording feature, a 3D stacking context visualization, you can customize tab titles and colors so you never confuse local and production again, the elements panel lets you edit HTML while preserving events, and we've updated Chromium to version 136.`), mdx(PolypaneIntro, {\n    mdxType: \"PolypaneIntro\"\n  }), mdx(\"p\", null, `We took a little longer than usual to get this release out and the resulting changelog is `, mdx(\"em\", {\n    parentName: \"p\"\n  }, `massive`), ` because of it. Make sure to `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"#polypane-24-changelog\"\n  }), `go through it`), ` to not miss anything!`), mdx(\"h2\", {\n    \"id\": \"new-record-panes-and-annotate-the-resulting-video\"\n  }, `New: Record panes and annotate the resulting video`), mdx(\"p\", null, `Joining our extensive screenshotting capabilities, you can now record a pane and annotate the resulting video.`), mdx(\"video\", {\n    src: video1,\n    muted: true,\n    controls: true,\n    preload: \"auto\",\n    loading: \"lazy\",\n    playsInline: true,\n    className: \"imgshadow\",\n    style: {\n      maxWidth: '100%'\n    }\n  }), mdx(\"p\", null, `When recording a video, we show a custom cursor that highlights links and shows clicks with a quick animation, to make it easy to follow along.`), mdx(\"p\", null, `We do this because we record directly from the web contents as they get painted, which gives us good performance but doesn't include the rendered cursor. Plus we get to highlight those clicks!`), mdx(\"p\", null, `When you're done recording, you can annotate and trim the video in our built-in video editor, powered by `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://pqina.nl/pintura/?aff=xLXrx&ref=polypane\"\n  }), `Pintura`), `, the same powerful editor we use for screenshots.`), mdx(\"p\", null, `That means the same tools like text, emoji, arrows and other annotations can be added to your video as well. The new Trim plugin lets you trim the start and end of your video, or cut out parts you don't like.`), mdx(\"video\", {\n    src: video2,\n    muted: true,\n    controls: true,\n    preload: \"auto\",\n    loading: \"lazy\",\n    playsInline: true,\n    className: \"imgshadow\",\n    style: {\n      maxWidth: '100%'\n    }\n  }), mdx(\"p\", null, `more about the video editor in our `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/recording/\"\n  }), `recording documentation`), `.`), mdx(\"h2\", {\n    \"id\": \"stacking-context-3d-view\"\n  }, `Stacking context 3D view`), mdx(\"p\", null, `The new stacking context 3D view debug tool shows your page in 3D, with the stacking context and z-index of each element visualized.`), mdx(\"video\", {\n    src: threedview,\n    loop: true,\n    controls: true,\n    className: \"imgshadow\",\n    style: {\n      margin: '2rem auto',\n      maxWidth: '100%'\n    }\n  }), mdx(\"p\", null, `This is a great way to understand how elements are layered on top of each other, and to debug z-index issues.`), mdx(\"p\", null, `The debug tool is very intuitive: simply drag and drop to rotate the 3d view. Drag and drop will always rotate around the center of the pane, so you'll never lose sight of the element you're inspecting.`), mdx(\"p\", null, `More on our `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/debug-tools/#stacking-context-3d-view\"\n  }), `stacking context 3d view debug tool`), `.`), mdx(\"h2\", {\n    \"id\": \"design-updates\"\n  }, `Design updates`), mdx(\"p\", null, `We're also continuing the design updates we started a few releases ago, slowly iterating on the design of Polypane to make it more modern and consistent.`), mdx(\"h3\", {\n    \"id\": \"tab-and-address-bar-customization\"\n  }, `Tab and address bar customization`), mdx(\"p\", null, `Did you ever waste a bunch of time refreshing the tab because you didn't see the changes you `, mdx(\"em\", {\n    parentName: \"p\"\n  }, `are certain`), ` you just saved, only to find out embarrassingly late that you were looking at production rather than your dev server?`), mdx(\"p\", null, `...me neither. 😬`), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, `Totaly unrelated`), `, right-click on a tab to customize it and set a custom title and color for both the tab and address bar.`), mdx(\"img\", {\n    src: customize2,\n    alt: \"\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"p\", null, `The tab customisation can be configured just for a tab, or for all tabs with the same domain. That will automatically apply the color and/or title overwrite whenever you open a page on that domain.`), mdx(\"p\", null, `I've been using this for a while now and it's small, but such a game changer. I can now easily see which tab is which server, even when they are all the same page.`), mdx(\"p\", null, `More on our `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/tab-customization/\"\n  }), `tab customization`), `.`), mdx(\"h3\", {\n    \"id\": \"pane-resizing\"\n  }, `Pane resizing`), mdx(\"p\", null, `The pane resize indicators have been the same since before the 1.0 release, and it was high time we made them more modern.`), mdx(\"p\", null, `The new pane resize indicators are more subtle and less intrusive, while still being easy to see and use. Rather than a `, mdx(\"em\", {\n    parentName: \"p\"\n  }, `blue bulge`), `, we now have a small resize indicator that appears when you hover the side, bottom or corner of a pane.`), mdx(\"video\", {\n    src: resizepane,\n    muted: true,\n    controls: true,\n    preload: \"auto\",\n    loading: \"lazy\",\n    playsInline: true,\n    className: \"imgshadow\",\n    style: {\n      maxWidth: '100%'\n    }\n  }), mdx(\"h3\", {\n    \"id\": \"pane-focus-style\"\n  }, `Pane focus style`), mdx(\"p\", null, `Rather than a thin blue bar at the top of a pane, a focused pane now has a full outline around it, making it easier to see which pane is currently focused and interactive.`), mdx(\"img\", {\n    src: focusstyle,\n    alt: \"\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"h3\", {\n    \"id\": \"integrations-are-hidden-by-default\"\n  }, `Integrations are hidden by default`), mdx(\"p\", null, `Our `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/integrations/\"\n  }), `Marker.io integration`), ` is very useful, but not used by everyone. In order to make the UI less busy, we've hidden the integrations by default. To re-enable them go to the global settings in the top right and enable \"Show pane integrations\"`), mdx(\"h3\", {\n    \"id\": \"pane-rotation-button\"\n  }, `Pane rotation button`), mdx(\"p\", null, `The pane rotation button is back! It was removed in a previous release but it turns out having a dedicated button is just a much better interaction. We hide it until you hover the pane header though, so it's still out of the way.`), mdx(\"h3\", {\n    \"id\": \"copy-link-to-highlight\"\n  }, `Copy link to highlight`), mdx(\"p\", null, `After selecting some text and right-clicking it you can now create a URL that links to, and highlights, that selected text. This is a great way to share a specific part of a page with someone else, and it also works in other browsers like Chromium and Firefox.`), mdx(\"p\", null, `While you're in that context menu, you can also find information on the text you just selected, like the number of characters and words: `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/measure-text-length/\"\n  }), `measure text length`), `.`), mdx(\"h3\", {\n    \"id\": \"sortable-workspaces\"\n  }, `Sortable workspaces`), mdx(\"p\", null, `You can now sort your custom workspaces to switch around which workspace uses which shortcut. Simply drag and drop a workspace to its prefered position in the list.`), mdx(\"video\", {\n    src: sortingWorkspaces,\n    muted: true,\n    controls: true,\n    preload: \"auto\",\n    loading: \"lazy\",\n    playsInline: true,\n    className: \"imgshadow\",\n    style: {\n      maxWidth: '100%'\n    }\n  }), mdx(\"h3\", {\n    \"id\": \"invisible-improvements\"\n  }, `'Invisible' improvements`), mdx(\"p\", null, `Some improvements aren't immediately noticeable that make the browser just that little but more usable: the type of details we want to get right.`), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, `When the address bar is too narrow to show the entire URL, you can hover it to see the URL in a tooltip.`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, `Whenever you change the position of the panel, the new position is automatically set for new tabs as well without it affecting existing tabs.`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, `You can now drag and drop non-active tabs without first activating them. This is a small but very useful change that makes it easier to manage your tabs.`)), mdx(\"p\", null, `When using Polypane it means that it just `, mdx(\"em\", {\n    parentName: \"p\"\n  }, `feels right`), `.`), mdx(\"h2\", {\n    \"id\": \"elements-panel-updates\"\n  }, `Elements panel updates`), mdx(\"h3\", {\n    \"id\": \"edit-as-html\"\n  }, `Edit as HTML`), mdx(\"p\", null, `A feature that until now was missing from the Polypane elements panel is editing the HTML of an element. It took me a while to crack this because I didn't want editing the HTML to have the side-effect of removing the event listeners elements or their children have. (some browsers preserve these, some don't)`), mdx(\"video\", {\n    src: edithtml,\n    muted: true,\n    controls: true,\n    preload: \"auto\",\n    loading: \"lazy\",\n    playsInline: true,\n    className: \"imgshadow\",\n    style: {\n      maxWidth: '100%'\n    }\n  }), mdx(\"p\", null, `The Edit HTML feature in the Polypane elements panel preserves the event listeners of child elements even if you edit their contents or attributes, by carefully looping over the children and updating them in place, rather than rebuilding the entire DOM tree. `, mdx(\"em\", {\n    parentName: \"p\"\n  }, `It just works`), `.`), mdx(\"p\", null, `Add to that we use the existing non-modal text-editing UI and support code hightlighting, and editing HTML in the Polypane Elements panel is miles ahead of other browsers. It's a joy to use.`), mdx(\"h3\", {\n    \"id\": \"containing-block-information-in-the-debug-tab\"\n  }, `Containing block information in the debug tab`), mdx(\"p\", null, `Along with information on the offsetParent and Stacking context, the debug tab in the Elements panel now shows the containing block of an element, and whether it is a containing block itself. Thanks James for the suggestion!`), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, `The containing block determines how elements get their dimensions (e.g. which element percentages are based on) so this is a very useful piece of information to have.`)), mdx(\"img\", {\n    src: debugpanel2,\n    alt: \"\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"h3\", {\n    \"id\": \"accessibility-warnings\"\n  }, `Accessibility warnings`), mdx(\"p\", null, `The A11y tab now looks at the role of an element to determine if it's allowed to have an accessible name and gives a warning when you try to set one.`), mdx(\"img\", {\n    src: accnamewarning,\n    alt: \"\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"p\", null, `For example, adding an `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `aria-label`), ` attribute on an element with a `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `generic`), ` role like a `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `div`), ` does nothing, and so the A11y tab will warn you about it. This is a great way to learn about the different roles and their implications.`), mdx(\"h3\", {\n    \"id\": \"layout-debugging-clearing\"\n  }, `Layout debugging clearing`), mdx(\"p\", null, `While debugging a layout, you might have added layout debugging overlays to a large number of elements. While you can easily find those thanks to the indicators in the tree view, removing them one-by-one is annoying.`), mdx(\"p\", null, `You can now middle-click the layout debugging icon in the elements panel to remove all layout debugging overlays from the page. (note that middle-clicking also works for the debug tools active on panes!)`), mdx(\"h3\", {\n    \"id\": \"newly-supported-css\"\n  }, `Newly supported CSS`), mdx(\"p\", null, `There's a whole bunch of new CSS. in this release. We've updated the autocomplete for many CSS properties that recently got updates and added autocomplete for new ones like `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `corner-shape`), ` (which, yes, you can test out in Polypane!).`), mdx(\"p\", null, `We've also added support for inspecting the styles of new pseudo classes like `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `::checkmark`), `, `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `::picker-icon`), `, and carousel-related `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `::column`), `, `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `::scroll-button`), `, `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `::scroll-marker`), `, and `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `::scroll-marker-group`), `. Lastly, you can now force the `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `:open`), ` pseudo state for elements that support it (like `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `details`), ` and `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `dialog`), `).`), mdx(\"h2\", {\n    \"id\": \"meta-panel-updates\"\n  }, `Meta panel updates`), mdx(\"h3\", {\n    \"id\": \"sorting-and-hiding-social-media-previews\"\n  }, `Sorting and hiding social media previews`), mdx(\"p\", null, `The list of social medias previews can now be sorted, and you can hide individual previews. If there's some social media you just don't care about anymore or you want to see a specific one first, you can now do that!`), mdx(\"video\", {\n    src: sortableSocials,\n    muted: true,\n    controls: true,\n    preload: \"auto\",\n    loading: \"lazy\",\n    playsInline: true,\n    className: \"imgshadow\",\n    style: {\n      maxWidth: '100%'\n    }\n  }), mdx(\"h3\", {\n    \"id\": \"author-info-in-mastodon-previews\"\n  }, `Author info in Mastodon previews`), mdx(\"p\", null, `Mastodon cards can show an associated Mastodon author if you define a `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `fediverse:author`), ` meta property. Polypane will now fetch that information when it detects that an author is available:`), mdx(\"img\", {\n    src: mastodonauthor,\n    alt: \"\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"p\", null, `No all Mastodon instances allow this access, so we show a warning when the author information is not available.`), mdx(\"h3\", {\n    \"id\": \"more-robust-handling-of-fallback-and-html-in-slack-and-discord-card-previews\"\n  }, `More robust handling of fallback and HTML in Slack and discord card previews`), mdx(\"p\", null, `Rather than encode HTML in titles, Slack and Discord just remove anything that looks remotely like HTML. Polypane now emulates this accurately:`), mdx(\"img\", {\n    src: slackhtml,\n    alt: \"\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"p\", null, `Should be useful for that blog post about the `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `<select>`), ` element that now can be customized with CSS ;)`), mdx(\"h2\", {\n    \"id\": \"screenshotting-updates\"\n  }, `Screenshotting updates`), mdx(\"h3\", {\n    \"id\": \"quality-fixes\"\n  }, `Quality Fixes`), mdx(\"p\", null, `In Chromium 122, the graphics team working on Chromium made some changes to how web contents are rendered on the screen, resulting in screenshot capturing not using the correct page scale. Fixing this issue in Chromium isn't feasible so we changed the way we make screenshots.`), mdx(\"p\", null, `When you take a screenshot of a pane, we'll quickly \"blink\" the pane to make sure we capture it correctly. The end result is much sharper screenshots!`), mdx(\"h3\", {\n    \"id\": \"default-action\"\n  }, `Default action`), mdx(\"p\", null, `The default action for screenshots is now configurable in the screenshot settings, rather than the global settings, to make it easier to change. You can choose to open the editor, save to disk or copy to clipboard.`), mdx(\"img\", {\n    src: screenshotdefaultaction,\n    alt: \"\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"h3\", {\n    \"id\": \"screenshot-editing-updates\"\n  }, `Screenshot editing updates`), mdx(\"p\", null, `The screenshot editor (powered by `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://pqina.nl/pintura/?aff=xLXrx&ref=polypane\"\n  }), `Pintura`), `) got some additional configuration to make the default style of arrows, lines and paths more in line with the rest of Polypane, so they should look much better now.`), mdx(\"h2\", {\n    \"id\": \"outline-panel-updates\"\n  }, `Outline panel updates`), mdx(\"p\", null, `We made a ton of small improvements to the outline panel to deal with weird edge cases and improve the overall experience.`), mdx(\"p\", null, `For example, we've improved our own accessibility name calculation for images and complex nesting of elements, which has some tricky edge cases for specific element types.`), mdx(\"p\", null, `Another fun thing we fixed is that the Focus order now handles negative tabindices `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `tabindex=\"-4\"`), ` correctly, which is a totally weird and useless thing to do but happens in the real world, so we need to be able to handle it.`), mdx(\"h3\", {\n    \"id\": \"radio-group-focus-handling\"\n  }, `Radio group focus handling`), mdx(\"p\", null, `Turns out, radio groups are a bit more complex than I thought. The focus order now follows the browser logic for radio button groups, meaning the first radio button in a group is focused, unless a radio button in the group is checked and then that is focused. That was fun to build!`), mdx(\"h3\", {\n    \"id\": \"links-outline\"\n  }, `Links outline`), mdx(\"p\", null, `The links outline now also shows `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `<a>`), ` elements if they lack a `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `href`), ` attribute (for example because it's mistyped, or because it only has an onclick handler). These are broken links so having them in the overview should help you find and fix them.`), mdx(\"h2\", {\n    \"id\": \"accessibility-panel-wording-update\"\n  }, `Accessibility panel wording update`), mdx(\"p\", null, `A source of confusion for many people has been that when the accessibility panel finds issues, we show the version of WCAG that a rule was `, mdx(\"em\", {\n    parentName: \"p\"\n  }, `introduced`), ` in.`), mdx(\"p\", null, `For a rule that was introduced in 2.0, it would say \"WCAG 2.0\", and for a rule that was introduced in 2.1 it would say \"WCAG 2.1\". This is useful for people that have a legal obligation to test strictly 2.0 or 2.1 rules: much of the current world-wide web accessibility legislation is based on WCAG 2.0 or 2.1.`), mdx(\"p\", null, `Unfortunately it frequently caused people to think that Polypane used outdated rules, not realizing that rules introduced in 2.0 and 2.1 are still part of 2.2.`), mdx(\"img\", {\n    src: accpanelwording,\n    alt: \"\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"p\", null, `To help communicate this better, we now say \"WCAG 2\" for rules that are part of 2.0, 2.1 and 2.2, we show \"2.1 and up\" for rules that are part of 2.1 and 2.2, and \"2.2\" for rules that are only part of 2.2.`), mdx(\"p\", null, `If there ever is a 2.3, we'll update the wording again to make it clear which rules are part of which version.`), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, `There is one success criterion that is in 2.0 and 2.1 but not in 2.2: `, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `4.1.1 Parsing`), `. The accessibility panel will not test for this rule. If you need to check validation errors still, use the built-in validation in the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/source-panel/\"\n  }), `source panel`), `.`)), mdx(\"h2\", {\n    \"id\": \"video-element-context-menu\"\n  }, `Video element context menu`), mdx(\"p\", null, `The context menu for video elements has been improves to allow you to easily play/pause and show the controls of a video.`), mdx(\"p\", null, `Polypane already had saving and copying options for video elements, and this makes it even easier to manage videos when inspecting sites. Thanks Eric for the suggestion!`), mdx(\"video\", {\n    src: videocontext,\n    muted: true,\n    controls: true,\n    preload: \"auto\",\n    loading: \"lazy\",\n    playsInline: true,\n    className: \"imgshadow\",\n    style: {\n      maxWidth: '100%'\n    }\n  }), mdx(\"p\", null, `Polypane has a ton of custom context menu options for specific elements like images, links, headings and SVGs. Make sure to try right-clicking on elements to learn the options that are available!`), mdx(\"h2\", {\n    \"id\": \"debug-tools-updates\"\n  }, `Debug tools updates`), mdx(\"p\", null, `We made a few updates to the debug tools in this release.`), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `The target size`), ` debug tools now have a recheck button and an option to check targets in paragraphs. The recheck button will let you quickly validate if your changes solved the issue, and while targets in paragraphs are excluded from the WCAG rules, often times you'll still want to check them.`), mdx(\"img\", {\n    src: rescantargetsize,\n    alt: \"\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"p\", null, `In addition to this, we've updated the logic of our target size debug tools. It can now handle many more edge cases where measuring the target size is tricky.`), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `The track focus`), ` debug tool has a small indicator that shows the role and accessible name of the element that currently has focus. Previously this was in the lower left corner, where it was partially obscured by the status bar. It's now in the bottom right corner, where it won't be obscured by anything.`), mdx(\"p\", null, `Thanks Eric for requesting these changes and helping make test cases!`), mdx(\"h2\", {\n    \"id\": \"emulation-updates\"\n  }, `Emulation updates`), mdx(\"p\", null, `In this release we improved the handling of userAgentData, a chromium-only 'successor' to the userAgent. userAgentData now more closely follows other emulated properties to prevent situations where the userAgent and userAgent data return different values. Thanks Stuart and Stephanie for the suggestions!`), mdx(\"p\", null, `We also improved the handling of mobile page zoom logic and resetting. This is a small but important change that makes automatic zoom behavior more in line with actual mobile devices.`), mdx(\"h2\", {\n    \"id\": \"not-in-this-release-manifest-v3-\"\n  }, `Not in this release: Manifest v3 😟`), mdx(\"p\", null, `I planned Manifest v3 support for this release since that landed in Electron 35. Unfortunately, we found issues with its support with multiple sessions, particularly on Windows and Linux. This means we had to postpone it to a later release. I hope to land it soon.`), mdx(\"h2\", {\n    \"id\": \"chromium-136\"\n  }, `Chromium 136`), mdx(\"p\", null, `Polypane 24 runs on Chromium 136 Beta, the upcoming release. For all the experimental features enabled in this release, check out the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/experimental-web-platform-features/\"\n  }), `experimental web platform features overview`), `.`), mdx(\"h2\", {\n    \"id\": \"get-polypane-24\"\n  }, `Get Polypane 24`), mdx(\"p\", null, `Polypane is available for Windows, Mac and Linux (.deb or AppImage) in both 64 bit and ARM versions.`), mdx(\"p\", null, `Polypane automatically updates on Mac, Windows and on Linux when using the AppImage. Otherwise, go to `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/download/\"\n  }), `the download page`), ` to download the latest version!`), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `Don't have Polypane yet? There is a 14 day trial available. `, mdx(\"a\", _extends({\n    parentName: \"strong\"\n  }, {\n    \"href\": \"https://dashboard.polypane.app/register\"\n  }), `Try it for free`), `.`), ` No credit card needed.`)), mdx(\"h2\", {\n    \"id\": \"polypane-2402-changelog\"\n  }, `Polypane 24.0.2 Changelog`), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `Improvements`)), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Meta panel: show humans.txt and ai.txt in authored dimensions`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: Improve element selection performance`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Outline panel: Improved performance for gathering outlines`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Touch emulation logic interactions`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Chromium 136.0.7103.49`)), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `Fixes`)), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Prevent redirection to broken URL after accepting permission requests`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Title bar background color on Windows`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Bus messages weren't filtered by tab`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Hover sync would stop working when hard refresing panes`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Device metric emulation bug causing cut off content (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Prevent devtools from occassionaly opening undocked (Thanks Matthias!)`)), mdx(\"h2\", {\n    \"id\": \"polypane-2401-changelog\"\n  }, `Polypane 24.0.1 Changelog`), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `New`)), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Elements panel: Support @import layer() in the style editor (Thanks Manuel!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Presets: added a new KaiOS mobile phone preset (Thanks Declan!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Links opened in new tabs will use the same session as the tab you clicked from (Thanks Devan!)`)), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `Improvements`)), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: Improve bottom-aligned layout`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Outline panel: Lower the threshold for manual link testing to 50 links`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Reference image: Middle click the icon to remove the reference image`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Workspaces: Improve bottom-aligned layout for large workspaces`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Handling of tab dragging`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Panes now maintain a consistent border radius regardless of the zoom level`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Live reload: improved icon clarity`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Automatically replace crashed panes on reload`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Mac users can now also grant access to camera and microphone in Polypane (Thanks Ruben!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Chromium 136.0.7103.48`)), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `Fixes`)), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Reference image would be removed on initialisation (Thanks Ayaan!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Recording: pages without explicit background color now get a color-scheme aware default background color (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Color picker in elements panel would close when selecting a full red color`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Color picker could reset it's hue to 0 when saturation or lightness was set to 0`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Workspaces: Allow unnamed workspaces to be dragged`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Highly zoomed in panes would have incorrect device metrics (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Middle-clicking navigational buttons would result in incorrect URL showing in the address bar`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Elements panel: update accessible name for elements who's accessible names are only calculated on focus (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Elements panel: issue where the style editor would not show suggestions while typing`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Live reloading: reinstate support for globs in the ignorepatterns.txt file (Thanks Matt!)`)), mdx(\"h2\", {\n    \"id\": \"polypane-24-changelog\"\n  }, `Polypane 24 Changelog`), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `New`)), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Record panes and annotate the resulting video`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Debug tools: Stacking context 3d visualisation (Thanks Ollie!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Custom tab title and color`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Custom tab and address bar colors based on domain`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Elements panel: Support for event-preserving HTML editing`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Copy link to highlight`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Meta panel: Mastodon preview now includes author information`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `New`), ` Chromium 136.0.7103.33`)), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `Improvements`)), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: show warnings for elements/roles that should not have an aria-label or accessible name`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: Show information on an elements status as containing block and the containing block it's in (Thanks James!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: middle-click layout debugging icon to turn it off across the page (Thanks Paulo!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: support for forcing the `, mdx(\"code\", _extends({\n    parentName: \"li\"\n  }, {\n    \"className\": \"language-text\"\n  }), `:open`), ` pseudo state`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: inspect and edit styles for new pseudo classes like ::checkmark, ::picker-icon, and carousel-related ::column, ::scroll-button, ::scroll-marker, and ::scroll-marker-group.`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: support for `, mdx(\"code\", _extends({\n    parentName: \"li\"\n  }, {\n    \"className\": \"language-text\"\n  }), `corner-shape`)), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: support for newly added CSS properties and associated values`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Elements panel: Show explainer warning when you double-click to edit in the tree view`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Meta panel: Order and hide social media previews (Thanks Bailey!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Meta panel: Improve handling of HTML in Slack card previews`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Outline panel: Now also knows how to handle tabindices lower than -1 (Thanks Jules!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Outline panel: Add warning for links with the word \"continue\"`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Outline panel: visual content is normalised before comparing to prevent false positives`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Outline panel: Shows links with missing href attribute and warns about them`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Outline panel: Focus order now follow browser logic for radio button groups (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Design: New pane resizing indicator designs`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Design: New focused pane indicator style`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Design: Address bar now shows full URL as title when truncated`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Design: Add the pane rotation button back again`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Design: Integrations are hidden by default`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Design: Latest set panel position is applied to new tabs to bring it in line with other browsers`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Debug tools: Track focus infobox is now in the bottom right, no longer obcured by status bar (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Debug tools: Target size is now even more accurate for edge cases (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Debug tools: Target size checks now have a recheck button, and an option to check targets in paragraphs`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Rename cache disable option for clarity around sessions`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Right-click context menu options for video elements (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` JSON viewer: Opening JSON files from disk now automatically uses the full layout`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` More performant address bar suggestions`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Workspace panel: Re-order custom workspaces (Thanks Sam!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Screenshots: Default screenshot handling action is now configured in screenshot settings`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Screenshots: Better defaults for arrows and other annotation shapes`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Screenshots: refactored to be at the correct scale to improve quality`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Color picker: Show pickers for fore- and background and improve design`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Tabs: Allow dragging non-active tabs without first activating them (Thanks Sander!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Emulation: improved handling of mobile page zoom logic and resetting`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Extensions: When switching tabs, the first pane is automatically set as the extension target`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Additional notifications during autoupdate download process`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Accessibility panel: Improve wording around which versions of WCAG 2 are being used`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Console panel: Use the right mac shortcut on mac (Thanks Livio!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Improve userAgentData emulation (Thanks Stephanie!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Updated set of accessibility rules`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Improved`), ` Updated list of known Google fonts`)), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, `Fixes`)), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Allow workspace imports that are missing a title (Thanks Masana!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Prevent issue where the reload button would keep spinning even after the page has finished loading (Thanks Steve!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Backdrop filters didn't work in some cases (Thanks Matthias!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` The Storage panel not updating correctly (Thanks David!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Clearing stored data now works across all sessions`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Browse panel: correctly hide status bar on context menu`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Opening files from disk on Windows and Linux`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` update navigator.userAgentData platform information (Thanks Stuart!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Pane title blinking when switching between tabs`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Outline panel: Prevent accessibility tree from other active tabs from showing`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Outline panel: only run checks for title attribute if it is defined (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Outline panel: Prevent error for images with invalid URLs as src.`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Outline panel: Headings overview now correctly handles headings with explicit roles (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Outline panel: Prevent duplicate elements from appearing in the outline panel (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Improved accessibility name calculation for images`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Improved accessibility name calculation for complex nesting (Thanks Eric!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Command bar: Lorem ipsum generator always returned 3 sentences`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Allow pages without favicon to also be available as suggestion in the Address bar`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Context-menu being temporarily unopenable after form input on macos`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Elements panel: Fix background of dropdown with panes (Thanks Qton!)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Elements panel: Better handling of tab key in style editor`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Rulers: Column overlay didn't update on browser resize in the Full layout`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Meta panel: Return correct attribute copy when copying an undefined language`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Meta panel: Prevent showing double errors for non-existent languages`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, `Fix`), ` Polypane no longer marks link elements without an href as focusable`)));\n}\n;\nMDXContent.isMDXComponent = true;","timeToRead":14,"tableOfContents":{"items":[{"url":"#new-record-panes-and-annotate-the-resulting-video","title":"New: Record panes and annotate the resulting video"},{"url":"#stacking-context-3d-view","title":"Stacking context 3D view"},{"url":"#design-updates","title":"Design updates","items":[{"url":"#tab-and-address-bar-customization","title":"Tab and address bar customization"},{"url":"#pane-resizing","title":"Pane resizing"},{"url":"#pane-focus-style","title":"Pane focus style"},{"url":"#integrations-are-hidden-by-default","title":"Integrations are hidden by default"},{"url":"#pane-rotation-button","title":"Pane rotation button"},{"url":"#copy-link-to-highlight","title":"Copy link to highlight"},{"url":"#sortable-workspaces","title":"Sortable workspaces"},{"url":"#invisible-improvements","title":"'Invisible' improvements"}]},{"url":"#elements-panel-updates","title":"Elements panel updates","items":[{"url":"#edit-as-html","title":"Edit as HTML"},{"url":"#containing-block-information-in-the-debug-tab","title":"Containing block information in the debug tab"},{"url":"#accessibility-warnings","title":"Accessibility warnings"},{"url":"#layout-debugging-clearing","title":"Layout debugging clearing"},{"url":"#newly-supported-css","title":"Newly supported CSS"}]},{"url":"#meta-panel-updates","title":"Meta panel updates","items":[{"url":"#sorting-and-hiding-social-media-previews","title":"Sorting and hiding social media previews"},{"url":"#author-info-in-mastodon-previews","title":"Author info in Mastodon previews"},{"url":"#more-robust-handling-of-fallback-and-html-in-slack-and-discord-card-previews","title":"More robust handling of fallback and HTML in Slack and discord card previews"}]},{"url":"#screenshotting-updates","title":"Screenshotting updates","items":[{"url":"#quality-fixes","title":"Quality Fixes"},{"url":"#default-action","title":"Default action"},{"url":"#screenshot-editing-updates","title":"Screenshot editing updates"}]},{"url":"#outline-panel-updates","title":"Outline panel updates","items":[{"url":"#radio-group-focus-handling","title":"Radio group focus handling"},{"url":"#links-outline","title":"Links outline"}]},{"url":"#accessibility-panel-wording-update","title":"Accessibility panel wording update"},{"url":"#video-element-context-menu","title":"Video element context menu"},{"url":"#debug-tools-updates","title":"Debug tools updates"},{"url":"#emulation-updates","title":"Emulation updates"},{"url":"#not-in-this-release-manifest-v3-","title":"Not in this release: Manifest v3 😟"},{"url":"#chromium-136","title":"Chromium 136"},{"url":"#get-polypane-24","title":"Get Polypane 24"},{"url":"#polypane-2402-changelog","title":"Polypane 24.0.2 Changelog"},{"url":"#polypane-2401-changelog","title":"Polypane 24.0.1 Changelog"},{"url":"#polypane-24-changelog","title":"Polypane 24 Changelog"}]},"excerpt":"This is a jam packed release. We're introducing a new recording feature, a 3D stacking context visualization, you can customize tab titles and colors so you…","frontmatter":{"title":"Polypane 24: Recording, 3D view, Custom tab colors and HTML editing","cover":"/img/mail/icon.svg","date":"2025-04-23","updated":null},"fields":{"slug":"/blog/polypane-24-recording-3-d-view-custom-tab-colors-and-html-editing/","date":"2025-04-22T22:00:00.000Z","ogFileName":"polypane-24-recording-3-d-view-custom-tab-colors-and-html-editing"}}},"pageContext":{"slug":"/blog/polypane-24-recording-3-d-view-custom-tab-colors-and-html-editing/"}},"staticQueryHashes":["4164364741","425175329"]}