test / test (push) Canceled after 0s
Header. The navbar carries the wordmark instead of the stamp - at nav size the stamp dissolves into the brick bar - and under the bar runs the stamp's paper margin with the perforation along its outer edge: round holes, flat teeth, ink hairline, 8px under a 60px bar as on the mark. docs/assets/selfpost-wordmark.svg and -ink are the stamp's own outlines; the header comparison sheet is removed. Type and tables. About 40 % of the text measured under 13px. Body is 16px with two tokens under it, 14px for supporting text and 13px for upper-case mono labels and tags; Bulma's small sizes are overridden or dropped (sp-small replaces is-size-7, is-small only on a progress bar). Every table sits in a table-container, addresses break after the @, and all screens fit without scrolling at 1280px and up. Contrast. A sweep of every text node against its real ground found the solid red button at 3:1, the muted grey at 4.1:1, the amber postmark and Bulma's menu labels just under 4.5. All 33 screens now measure 4.5:1 or better. The sweep is kept as panel/audit.js and its clean output joins the evidence a restyle step must show. Account and roles. A user's e-mail is its own field (users.email in the 2.0 baseline), edited under Account and seen by the global user on the user form and list. The DMARC default report address is a user's setting, not the server's: it moves to Account with its authorization record, and a domain follows the default of a named user. Roles are labelled by reach - global, domain - and each assignment list gains All, a per-user flag that covers domains added later. Account gains Notifications for the new roadmap candidate panel-notifications; password-reset is added as a candidate too. Also: the inbound spam filter is visible where a domain user looks (a box on each inbound domain, a tag on the list, its socket on Health); the health row is compact again and splits 6/3/2; a read-only value is as tall as its Copy button; Preflight and Account lose boxes that only filled space, and the plan's layout rule and contract now forbid them. check.py gains the type floor, the table-container rule and the is-small rule, and no longer counts min-width: 0 as setting a width. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
148 lines
9.3 KiB
HTML
148 lines
9.3 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en" data-theme="light">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Settings · example.org · SelfPost</title>
|
||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css">
|
||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@3/dist/tabler-icons.min.css">
|
||
<link rel="stylesheet" href="../shared/brand.css">
|
||
<link rel="stylesheet" href="theme.css">
|
||
</head>
|
||
<body>
|
||
<nav class="navbar is-primary" aria-label="main navigation">
|
||
<div class="container">
|
||
<div class="navbar-brand"><a class="navbar-item" href="overview.html"><img src="../../selfpost-wordmark.svg" alt="SelfPost"></a></div>
|
||
<div class="navbar-menu is-active">
|
||
<div class="navbar-start">
|
||
<a class="navbar-item" href="overview.html">Overview</a>
|
||
<div class="navbar-item has-dropdown is-hoverable sp-current">
|
||
<a class="navbar-link" href="out-domains.html">Outbound</a>
|
||
<div class="navbar-dropdown">
|
||
<a class="navbar-item is-active" href="out-domains.html"><i class="ti ti-world-upload"></i>Domains</a>
|
||
<a class="navbar-item" href="out-log.html"><i class="ti ti-list-details"></i>Log</a>
|
||
<a class="navbar-item" href="out-queue.html"><i class="ti ti-stack-2"></i>Queue</a>
|
||
<a class="navbar-item" href="dmarc.html"><i class="ti ti-report-analytics"></i>DMARC reports</a>
|
||
</div>
|
||
</div>
|
||
<div class="navbar-item has-dropdown is-hoverable">
|
||
<a class="navbar-link" href="in-domains.html">Inbound</a>
|
||
<div class="navbar-dropdown">
|
||
<a class="navbar-item" href="in-domains.html"><i class="ti ti-world-download"></i>Domains</a>
|
||
<a class="navbar-item" href="in-log.html"><i class="ti ti-list-details"></i>Log</a>
|
||
<a class="navbar-item" href="in-queue.html"><i class="ti ti-stack-2"></i>Queue</a>
|
||
<a class="navbar-item" href="in-quarantine.html"><i class="ti ti-mail-pause"></i>Quarantine</a>
|
||
<a class="navbar-item" href="in-filter-lists.html"><i class="ti ti-filter"></i>Filter lists</a>
|
||
</div>
|
||
</div>
|
||
<div class="navbar-item has-dropdown is-hoverable">
|
||
<a class="navbar-link" href="health.html">Server</a>
|
||
<div class="navbar-dropdown">
|
||
<a class="navbar-item" href="health.html"><i class="ti ti-heartbeat"></i>Health</a>
|
||
<a class="navbar-item" href="preflight.html"><i class="ti ti-checklist"></i>Preflight</a>
|
||
<a class="navbar-item" href="system-log.html"><i class="ti ti-file-text"></i>System log</a>
|
||
<a class="navbar-item" href="backup.html"><i class="ti ti-archive"></i>Backup</a>
|
||
<a class="navbar-item" href="users.html"><i class="ti ti-users"></i>Users</a>
|
||
<a class="navbar-item" href="settings.html"><i class="ti ti-settings"></i>Settings</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="navbar-end">
|
||
<div class="navbar-item has-dropdown is-hoverable">
|
||
<a class="navbar-link" href="account.html"><i class="ti ti-user-circle"></i>admin</a>
|
||
<div class="navbar-dropdown is-right">
|
||
<a class="navbar-item" href="account.html"><i class="ti ti-key"></i>Account</a>
|
||
<a class="navbar-item" href="help.html"><i class="ti ti-help"></i>Help</a>
|
||
<hr class="navbar-divider">
|
||
<a class="navbar-item" href="login.html"><i class="ti ti-logout"></i>Sign out</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
<div class="sp-perf" aria-hidden="true"></div>
|
||
<div class="sp-subnav"><div class="container"><a href="out-domains.html" aria-current="page"><i class="ti ti-world-upload"></i>Domains</a><a href="out-log.html"><i class="ti ti-list-details"></i>Log</a><a href="out-queue.html"><i class="ti ti-stack-2"></i>Queue</a><a href="dmarc.html"><i class="ti ti-report-analytics"></i>DMARC reports</a></div></div>
|
||
<main>
|
||
<div class="container sp-page">
|
||
<div class="sp-head">
|
||
<div class="sp-grow">
|
||
<p class="sp-kicker"><a href="out-domains.html">Outbound domains</a> / <a href="out-domain.html">example.org</a> /</p>
|
||
<h1 class="title is-3">Domain settings</h1>
|
||
<p class="sp-lead">The things set once and rarely touched: where DMARC reports go, the sending ceiling, moving the domain elsewhere.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="columns">
|
||
<div class="column is-6">
|
||
<div class="box" id="reports">
|
||
<div class="sp-box-head"><span class="sp-no">01</span><h2>DMARC report address</h2></div>
|
||
<div class="sp-box-body">
|
||
<form class="sp-form" method="post" action="#">
|
||
<div class="field"><label class="label" for="rua">Aggregate reports (rua=)</label>
|
||
<div class="control"><div class="select is-fullwidth"><select id="rua" name="dmarc_rua_mode">
|
||
<option selected>admin's default — mix@example.org</option>
|
||
<option>SelfPost hosted (example.org@dmarc.mail.example.org)</option>
|
||
<option>My default instead — (you are admin)</option>
|
||
<option>No aggregate reports</option>
|
||
<option>Custom address</option>
|
||
</select></div></div>
|
||
<p class="help">A default belongs to a user and is set under their <a href="account.html#dmarc">Account</a>; a domain follows one named user, so two people sharing a domain never pull it two ways. Changing this changes the DMARC record to publish.</p></div>
|
||
<button type="submit" class="button is-primary">Save report address</button>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box" id="export">
|
||
<div class="sp-box-head"><span class="sp-no">03</span><h2>Export domain</h2></div>
|
||
<div class="sp-box-body">
|
||
<p class="mb-3">One file with the DKIM key and every application's password hash — import it on another SelfPost and the published DNS needs no change. <strong>The file is a secret.</strong></p>
|
||
<form class="sp-form" method="post" action="#">
|
||
<div class="field"><label class="checkbox"><input type="checkbox" name="encrypt" checked> Encrypt with a password (<code>.spde</code>)</label></div>
|
||
<div class="sp-pair">
|
||
<div class="field"><label class="label" for="encpw">Password</label><div class="control"><input class="input" id="encpw" type="password" placeholder="at least 12 characters"></div></div>
|
||
<div class="field"><label class="label" for="encpw2">Repeat password</label><div class="control"><input class="input" id="encpw2" type="password"></div></div>
|
||
</div>
|
||
<p class="help mb-3">Keep this password: SelfPost does not store it, and the file cannot be opened without it.</p>
|
||
<button type="submit" class="button"><i class="ti ti-download"></i>Export domain</button>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="column is-6">
|
||
<div class="box" id="limit">
|
||
<div class="sp-box-head"><span class="sp-no">02</span><h2>Rate limit</h2><div class="sp-end"><span class="tag is-success is-light">active</span></div><a class="sp-help" href="help.html#limits" title="Levels 1 and 2"><i class="ti ti-help-circle"></i></a></div>
|
||
<div class="sp-box-body">
|
||
<form class="sp-form" method="post" action="#">
|
||
<div class="field"><label class="label" for="mode">Limit mode</label>
|
||
<div class="control"><div class="select is-fullwidth"><select id="mode" name="mode"><option>Manual</option><option selected>Auto (from statistics)</option></select></div></div></div>
|
||
<div class="field"><label class="label" for="mult">Multiplier (1.5–10, default 3)</label>
|
||
<div class="control"><input class="input" id="mult" name="auto_multiplier" type="number" min="1.5" max="10" step="0.1" value="3"></div>
|
||
<p class="help">Computed limit: <strong>288</strong> messages / 3600 s. Peak was 96 msg/h. Last recalculated yesterday 03:00 UTC.</p></div>
|
||
<div class="buttons">
|
||
<button type="submit" class="button is-primary">Save limit</button>
|
||
<button type="submit" class="button" formaction="#recalc">Recalculate now</button>
|
||
<button type="submit" class="button is-danger is-light" formaction="#clear">Remove limit</button>
|
||
</div>
|
||
</form>
|
||
<p class="sp-muted mt-4">Applies to every sender on this domain and cannot exceed level 1 (600 messages / 3600 s per client IP, set in <code>.env</code>). An application may carry its own limit above or below this one.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="box sp-danger-zone">
|
||
<div class="sp-box-head"><span class="sp-no">04</span><h2>Delete domain</h2></div>
|
||
<div class="sp-box-body">
|
||
<p class="mb-3">Removes the DKIM key and both applications. Asks once more before doing it.</p>
|
||
<a class="button is-danger is-light" href="out-domain-delete.html"><i class="ti ti-trash"></i>Delete example.org…</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<footer class="sp-foot">SelfPost 1.8.0 · © 2026 Mix · <a href="#">License (AGPL-3.0)</a> · <a href="#">Source</a> · No warranty</footer>
|
||
</div>
|
||
</main>
|
||
</body>
|
||
</html>
|