:root{font-family:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#1d312c;background:#f7f8f4;font-size:14px;--green:#215c4c;--deep:#163b32;--line:#dce3da;--muted:#5c6d64}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button{cursor:pointer;color:inherit}button:disabled{opacity:.45;cursor:default}button:focus-visible,input:focus-visible,select:focus-visible,a:focus-visible{outline:3px solid #80a539;outline-offset:2px}[hidden]{display:none!important}button{background:white;border:1px solid var(--line);border-radius:7px;padding:8px 12px;font-weight:580}button:hover:not(:disabled){border-color:#819786}button.primary{background:var(--green);border:1px solid var(--green);color:white;min-height:42px;padding:10px 17px}.primary:hover:not(:disabled){background:#174c3e}.primary span{margin-left:14px}#shell{display:grid;grid-template-columns:210px minmax(0,1fr);min-height:100vh}aside{background:var(--deep);color:#f0f4ea;display:flex;flex-direction:column;padding:32px 16px 20px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:11px;font-weight:750;letter-spacing:-1.4px;font-size:29px}.mark{font-family:system-ui;font-style:normal;font-size:29px;display:grid;place-items:center;line-height:1;width:38px;height:38px;background:#d7ef9e;color:#1d4237;border-radius:11px 11px 11px 3px}.brand{padding:0 9px}aside nav{margin-top:52px;display:grid;gap:7px}aside nav button{border:none;background:transparent;color:#cdd9d0;text-align:left;display:flex;align-items:center;gap:14px;padding:13px 15px}aside nav button span{font-size:21px;line-height:1}aside nav button.on{background:#2c5448;color:white}aside nav button:hover{background:#24483e}.user{border-top:1px solid #416055;margin-top:auto;padding:21px 4px 0;display:flex;gap:11px;align-items:center}.user i,.icon{background:#e1ecd8;color:#375b41;border-radius:9px;width:35px;height:35px;display:inline-grid;place-items:center;font-style:normal;font-weight:700}.user button{display:block;color:#cbdacb;padding:2px 0;font-size:12px;background:none;border:0}.user strong{word-break:break-word}main{max-width:1570px;width:100%;padding:35px clamp(22px,4vw,66px) 50px}.crumb{color:var(--muted);font-size:12px}.crumb b{margin:0 9px;font-weight:400;color:#9aa69d}header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:32px 0 25px}h1,h2,p{margin:0}h1{font-size:clamp(32px,4vw,47px);letter-spacing:-.055em;font-weight:650;line-height:1.1}header p{color:var(--muted);margin-top:10px;font-size:15px}#stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:24px}.stat{padding:17px 21px;border:1px solid var(--line);border-radius:11px;background:#fff}.stat:first-child{background:#e9efdF;border-color:#d4dfc5}.stat span{display:block;color:var(--muted);font-size:13px}.stat strong{display:block;font-weight:570;font-size:32px;letter-spacing:-.06em;margin-top:7px}.board{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden}.boardHead,.filters,footer{padding:18px 22px;display:flex;align-items:center;gap:9px}.boardHead{padding-bottom:0}h2{font-size:20px;letter-spacing:-.045em}.boardHead>span{font-size:12px;border-radius:100px;padding:3px 8px;background:#edf1e9}.filters{justify-content:space-between}.search{border:1px solid var(--line);border-radius:7px;display:flex;align-items:center;gap:8px;padding:0 10px;min-width:190px;color:var(--muted)}.search>span{font-size:22px}.search input{border:0;padding:10px 0;width:min(250px,35vw);background:none}select,input:not([type=checkbox]){border:1px solid var(--line);border-radius:6px;padding:10px;background:white;color:inherit}.search input:not([type=checkbox]){border:0}.scroll{overflow-x:auto}table{width:100%;border-collapse:collapse;text-align:left;font-size:13px}th{background:#f3f6f0;color:#596960;font-size:11px;letter-spacing:.025em;font-weight:600}th,td{padding:12px 13px;border-block:1px solid #e8ece5}th:first-child,td:first-child{padding-left:20px}td:first-child input,th:first-child input{width:16px;height:16px}input[type=checkbox]{accent-color:var(--green)}.siteName{font-weight:630;text-decoration:none;color:#263e32;display:inline-flex;align-items:center;gap:9px;background:none;border:0;padding:3px 0;text-align:left}.domain{font-size:12px;color:var(--muted);display:block;margin-top:4px;overflow-wrap:anywhere}.badge{display:inline-block;border-radius:100px;padding:4px 8px;background:#ecf1e8;color:#435e46;font-size:12px;white-space:nowrap}.badge.ok{color:#246044;background:#e4f2e6}.badge.warn{background:#fff0d6;color:#82551a}.badge.bad{background:#fae7df;color:#96442b}.badge.dim{background:#efefed;color:#626560}.muted,small{color:var(--muted)}.minor{display:block;font-size:11px;color:var(--muted);margin-top:4px}.textBtn{color:var(--green);background:transparent;border:0;padding:5px 0;text-decoration:underline;text-underline-offset:3px}.ops{display:flex;gap:10px;flex-wrap:wrap}#selection:not(:empty){padding:10px 22px;background:#f1f6e9;display:flex;flex-wrap:wrap;align-items:center;gap:13px;font-size:12px}#selection .primary{margin-left:auto;min-height:32px;padding:6px 10px}.empty{padding:34px 22px;text-align:center;color:var(--muted)}footer{justify-content:space-between;color:var(--muted);font-size:12px}footer button{margin-left:6px;padding:4px 10px}dialog{border:1px solid var(--line);border-radius:14px;width:min(670px,95vw);color:#22382e;padding:28px;max-height:88vh;box-shadow:0 20px 70px #173d322f}dialog::backdrop{background:#12251ece}.x{position:absolute;right:13px;top:12px;font-size:21px;border:0;background:none}dialog h2{margin:2px 26px 15px 0;font-size:26px}dialog h3{font-size:14px;margin:20px 0 8px}dialog p{color:var(--muted);line-height:1.6}dialog label:not(.choice),.loginCard label{display:grid;gap:6px;margin:14px 0;font-weight:580}.choiceList,.details{max-height:240px;overflow:auto;border:1px solid var(--line);border-radius:7px;margin:8px 0}.choice,.detailRow{display:flex;align-items:center;gap:9px;padding:10px;border-bottom:1px solid #eef1e9;overflow-wrap:anywhere}.choice:last-child,.detailRow:last-child{border:0}.choice span{flex:1}.detailRow{display:block}.fieldRow{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.actionFoot{margin-top:20px;display:flex;align-items:center;justify-content:space-between}.danger{color:#993f2e}.error{color:#9a3d2b;margin-top:9px}code{background:#f0f4eb;padding:8px;border-radius:5px;word-break:break-all}.loginCard{border:1px solid var(--line);padding:36px;border-radius:15px;width:min(390px,92vw);background:#fff}.loginCard h1{font-size:33px;margin:28px 0 20px}.loginCard .brand{padding:0}.loginCard .primary{width:100%;margin-top:10px}#login{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,#e6ecd9, #f7f8f4 56%)}#loginError{color:#9a3d2b}#toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);padding:12px 18px;max-width:90vw;background:#163b32;color:white;border-radius:8px;z-index:9}
@media(max-width:890px){#shell{grid-template-columns:155px minmax(0,1fr)}aside{padding-inline:8px}.brand{font-size:24px}.boardHead,.filters,footer{padding-inline:15px}main{padding-inline:18px}.stat{padding:12px}}
@media(max-width:650px){#shell{display:block}aside{position:static;height:auto;display:flex;flex-direction:row;align-items:center;gap:10px;padding:12px;flex-wrap:wrap}aside nav{display:flex;margin:0;gap:0}aside nav button{padding:7px;font-size:12px}aside nav span,.user i,.user strong{display:none!important}.user{margin:0 0 0 auto;padding:0;border:0}.brand{padding:0;font-size:21px}.mark{width:28px;height:28px;font-size:22px}main{padding:18px 12px}header{margin:22px 0;align-items:flex-start}header p{font-size:13px}.filters{flex-wrap:wrap}.stat strong{font-size:25px}#stats{gap:6px}.stat{padding:10px}td,th{white-space:nowrap}dialog{padding:20px}.icon{display:none}}

#softwareBoard[hidden],#oldBoard[hidden],#stats[hidden]{display:none} #releaseMetadata{display:block} #releaseMetadata p{margin:.5rem 0} #releaseMetadata code{display:inline-block;max-width:100%;white-space:normal}
:root {
    --deep: #153c34;
    --green: #205b49;
    --line: #d7e1d9;
    background: #f5f7f4;
}
aside nav a {
    display: flex;
    align-items: center;
    gap: 10px;
    min-height: 46px;
    padding: 11px 12px;
    border: 1px solid transparent;
    border-radius: 9px;
    color: #cfdfd5;
    font-size: 14px;
    font-weight: 560;
    text-decoration: none;
    line-height: 1.35;
}
aside nav a span {width: 23px; text-align: center; font-size: 20px; flex-shrink: 0}
aside nav a:hover {background: #234a40; color: white}
aside nav a.on {background: #31584b; color: white; border-color: #4a6e5d; box-shadow: inset 3px 0 #d2ee9c}
.headingLine {display: flex; align-items: center; gap: 10px}
.help {
    display: inline-grid;
    place-items: center;
    vertical-align: middle;
    min-width: 24px;
    height: 24px;
    padding: 0;
    border: 1px solid #b6c9bc;
    border-radius: 50%;
    background: #f7faf5;
    color: #406851;
    font-size: 13px;
    font-weight: 700;
    line-height: 1;
}
.headingLine .help {flex-shrink: 0; width: 29px; height: 29px; font-size: 15px}
.help:hover {background: #dfeddf}
th .help {margin-left: 2px}
#helpDialog {width: min(440px, 92vw); padding: 28px}
#helpDialog p {font-size: 15px}
.stat {border-radius: 13px}
.stat:first-child {background: #e7f1df}
.stat strong {font-variant-numeric: tabular-nums}
.board {box-shadow: 0 4px 14px #233c2d08; border-radius: 15px}
.boardHead {padding-top: 21px}
tbody tr:hover {background: #f9fbf7}
.siteName:hover {color: var(--green); text-decoration: underline; text-underline-offset: 3px}
.ops {gap: 6px}
.ops button {border: 1px solid #d6e3d9; border-radius: 7px; padding: 7px 10px; text-decoration: none; font-size: 12px; white-space: nowrap}
.ops button:hover {background: #edf5ed}
.ops [data-action="delete"] {color: #973e37; border-color: #ebd9d5}
.ops [data-action="delete"]:hover {background: #fff2ed; border-color: #b16655}
#shell[data-view="links"] .domain {max-width: 65ch}
#releaseMetadata {color: var(--muted); line-height: 1.5}
#releaseMetadata summary {cursor: pointer; color: var(--green)}
#softwareBoard .filters {flex-wrap: wrap}
@media (min-width: 891px) {
    #shell {grid-template-columns: 225px minmax(0,1fr)}
    aside nav {margin-top: 42px}
}
@media (max-width: 650px) {
    aside {display: grid; grid-template-columns: 1fr auto; row-gap: 12px; padding: 15px}
    aside nav {grid-column: 1 / -1; grid-row: 2; gap: 4px; display: grid; grid-template-columns: auto auto 1fr}
    aside nav a {min-height: 40px; justify-content: center; padding: 7px 5px; font-size: 12px; text-align: center}
    aside nav a.on {box-shadow: inset 0 -2px #cee5a4}
    .user {grid-column: 2; grid-row: 1}
    header {flex-wrap: wrap; gap: 14px}
    .headingLine h1 {font-size: 31px}
    #stats {gap: 6px}
    .stat span {font-size: 12px}
    #shell[data-view="links"] #oldBoard thead {position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); visibility: hidden}
    #shell[data-view="links"] #rows, #shell[data-view="links"] #rows tr, #shell[data-view="links"] #oldBoard table {display: block}
    #shell[data-view="links"] #rows tr {border-top: 1px solid var(--line); padding: 11px 15px}
    #shell[data-view="links"] #rows td {display: block; border: 0; padding: 3px 0; white-space: normal; overflow-wrap: anywhere}
    #shell[data-view="links"] #rows td:nth-child(2) {color: var(--muted); font-size: 12px}
    #shell[data-view="links"] #rows td:nth-child(2)::before {content: "Atanan site · "}
    #shell[data-view="links"] .ops {margin-top: 5px}
    .ops button {min-height: 38px}
    table th {white-space: normal}
    #toast {width: max-content; text-align: center}
}
.brandIcon {flex: none; border-radius: 10px; box-shadow: 0 0 0 1px #64866e}
.navIcon {width: 21px; height: 21px; flex: none; color: #afd0b9}
aside a.on .navIcon {color: #dcf4ab}
@media (max-width: 650px) {
    .brandIcon {width: 30px; height: 30px; border-radius: 8px}
    aside nav a {flex-direction: column; gap: 4px}
    .navIcon {width: 19px; height: 19px}
}

dialog.campaignDialog {
    width: min(740px, calc(100vw - 32px)); padding: 0; border-radius: 18px;
    max-height: min(90dvh, 820px); overflow: hidden;
}
.campaignDialog #modalContent {display: flex; flex-direction: column; max-height: inherit}
.editorHead {padding: 22px 58px 16px 24px; border-bottom: 1px solid var(--line)}
.editorHead h2 {font-size: clamp(22px, 3vw, 28px); line-height: 1.2; margin: 0}
.campaignDialog > .x {width: 36px; height: 36px; padding: 0; z-index: 1}
#editor {display: flex; flex-direction: column; min-height: 0; margin: 0}
.editorBody {padding: 20px 24px; overflow-y: auto; overscroll-behavior: contain; min-height: 0}
.editorFields {display: grid; grid-template-columns: 1.15fr 1fr; gap: 16px; margin-bottom: 18px}
.campaignDialog .editorFields label {margin: 0; align-content: start; gap: 7px}
.editorFields input {min-width: 0; width: 100%; min-height: 42px}
.editorFields small, .publisherHint {font-size: 13px; font-weight: 400; color: var(--muted)}
.campaignSummary {margin-bottom: 16px; overflow-wrap: anywhere}
.campaignSummary span {display: block; color: var(--muted); margin: 5px 0}
.publisherBox {min-width: 0; padding: 0; border: 0; margin: 0}
.publisherBox legend {font-weight: 680; font-size: 17px; padding: 0}
.publisherHint {margin: 4px 0 12px}
.publisherTools {display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 9px}
.publisherTools input {flex: 1 1 170px; min-width: 0}
.scopeButtons,.editorCommands {display: flex; gap: 6px}
.scopeButtons button,.publisherRow button {font-size: 12px; min-height: 36px}
.publisherList {border: 1px solid var(--line); border-radius: 10px; overflow-y: auto; max-height: min(32vh,250px)}
.publisherRow {display: flex; padding: 3px 10px; gap: 6px; align-items: center; border-bottom: 1px solid #e6ece7}
.publisherRow:last-child {border-bottom: 0}
.publisherRow:has(input:checked) {background: #eef6ed}
.publisherRow .choice {margin: 0; padding: 8px 1px; border: 0; flex: 1; min-width: 0; cursor: pointer; font-weight: 560}
.publisherRow input {width: 17px; height: 17px; margin: 0 3px 0 0; flex: none}
.publisherRow button {border: 0; background: transparent; color: var(--green); padding: 5px 8px; white-space: nowrap; text-decoration: underline; text-underline-offset: 3px}
.noPublishers {padding: 18px; text-align: center}
.editorFoot {flex: none; display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; justify-content: space-between; border-top: 1px solid var(--line); padding: 13px 24px; background: #f5f8f3}
#editor .error:not(:empty) {width: 100%; margin: 0 0 4px; color: #91392b}
#editor .error:empty {display: none}
#total {font-weight: 600; font-size: 13px}
@media (max-width: 650px) {
    dialog.campaignDialog {width: calc(100vw - 16px); max-height: calc(100dvh - 18px); border-radius: 14px}
    .editorHead {padding: 16px 50px 14px 16px}
    .editorBody {padding: 16px}
    .editorFields {grid-template-columns: 1fr; gap: 12px}
    .publisherTools input {flex-basis: 100%}
    .publisherList {max-height: 210px}
    .editorFoot {padding: 10px 15px}
    .publisherRow button {min-height: 40px}
}
