getreadystack's picture
Upload index.html with huggingface_hub
a56f570 verified
Raw History Blame Contribute Delete
47.6 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>CRediT authorship statement — check your manuscript online</title>
<meta name="description" content="This free tool checks a manuscript for AI-use disclosure, data availability, funding and grant IDs, CRediT, competing interests, ethics, and ORCID statements.">
<style>
:root{color-scheme:light}body{margin:0;font:15px/1.55 system-ui,-apple-system,"Segoe UI",sans-serif;background:#faf9f5;color:#1a1512}
.wrap{max-width:960px;margin:0 auto;padding:28px 18px 60px}h1{font-size:26px;margin:0 0 6px}.lede{color:#4a403a;margin:0 0 16px}
textarea{width:100%;min-height:260px;font:13px/1.45 ui-monospace,Menlo,Consolas,monospace;padding:12px;border:1px solid #d9d0c4;border-radius:8px;box-sizing:border-box}
.bar{display:flex;gap:10px;align-items:center;margin:12px 0}button{font:600 15px system-ui;padding:10px 18px;border:0;border-radius:8px;background:#1a1512;color:#fff;cursor:pointer}
input[type=date]{font:14px system-ui;padding:8px;border:1px solid #d9d0c4;border-radius:6px}
table{border-collapse:collapse;width:100%;font-size:14px;margin-top:10px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid #eee;vertical-align:top}th{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#7a6e65}
.sev.error{color:#a8551f;font-weight:700}.sev.warn,.sev.warning{color:#96691f}.ok{color:#2a6446;font-weight:600}.sum{font-weight:600}
.note{font-size:13px;color:#7a6e65;margin-top:18px}a.cta{display:inline-block;margin:10px 0 6px;font:600 15px system-ui;padding:10px 18px;border-radius:8px;background:#a8551f;color:#fff;text-decoration:none}
.terms{display:block;font-size:12.5px;color:#7a6e65}
#paid{margin-top:22px;padding:14px 16px;border:1px solid #e2d8cb;border-radius:10px;background:#fffdfa}
</style>
<script data-grow-initializer="">!(function(){window.growMe||((window.growMe=function(e){window.growMe._.push(e);}),(window.growMe._=[]));var e=document.createElement("script");(e.type="text/javascript"),(e.src="https://faves.grow.me/main.js"),(e.defer=!0),e.setAttribute("data-grow-faves-site-id","U2l0ZTphZjljMzgyMC0yMmU5LTRhYjgtYTIxNS03OTRhMGY1N2ExYzM=");var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t);})();</script>
<!--yj-canon-s101--><link rel="canonical" href="https://getreadystack.com/tools/manuscript-disclosure-lint"></head>
<body>
<div class="wrap">
<h1>CRediT authorship statement — check your manuscript online</h1>
<p class="lede">Checks a manuscript before submission for the statements journals and funders now require: AI-use disclosure, data availability, funding and grant IDs, CRediT, competing interests, ethics, ORCID. Runs entirely in your browser — nothing is uploaded.</p>
<textarea id="src" spellcheck="false">\documentclass[11pt]{article}
\usepackage{graphicx}
\title{Remote titration of inhaled corticosteroids in adult asthma:
a pragmatic randomised controlled trial}
\author{A. Ruiz \and M. Okafor \and ChatGPT (OpenAI)}
\date{September 2026}
\begin{document}
\maketitle
\begin{abstract}
We compared nurse-led remote titration with usual care in 412 adult patients
recruited from six primary care practices between March 2024 and May 2026.
The primary endpoint was the annualised rate of severe exacerbations.
\end{abstract}
\section{Methods}
Patients were randomised 1:1 by a central web service, stratified by practice
and by baseline exacerbation rate. Nurses reviewed weekly symptom scores and
adjusted the inhaled dose within a pre-agreed range.
\section{Results}
The exacerbation rate was 0.41 per patient-year in the remote arm and 0.58 in
usual care. Adherence measured by dose counter was higher in the remote arm.
\section{Discussion}
Remote titration appears to reduce exacerbations without additional visits.
\section*{Acknowledgements}
Supported by the National Institutes of Health. We thank the practice nurses
at the six sites. The accepted manuscript will be deposited in PubMed Central
with a 12-month embargo after publication.
\section*{Data availability}
The datasets generated during the current study are available from the
corresponding author on reasonable request.
\end{document}</textarea>
<div class="bar"><button id="go">Check</button><label>as of <input type="date" id="today"></label></div>
<div id="out" aria-live="polite"></div>
<div id="paid"><strong>Free here and in the editor:</strong> Check the manuscript open in your editor against all 16 statement rules — uncapped, no watermark, no run limit.<br><strong>The paid part:</strong> Sweep every manuscript in the workspace and write a dated submission-readiness report you keep<br><a class="cta" href="https://getreadystack.com/api/buy/cl/polar_cl_ZRgsG5E9wpjfw710CyEFUGgArfwIGQv523UDB4HGC2G">Get the full version — $29</a><span class="terms">$29 once · one licence key per person or team seat · Commercial manuscript formatting and submission-compliance services are priced at $150-$400 per paper.</span></div>
<p class="note">Same engine as the VS Code extension, byte for byte.</p>
</div>
<script>var MDL_RULES = [
{
"check": "ai_disclosure_missing",
"sev": "error",
"msg": "No AI-use disclosure. Journals following the ICMJE Recommendations ask authors to state whether generative AI was used in writing, and to name the tool and the task.",
"need": "(declaration of generative ai|generative ai (and ai-assisted|in the writing|was used|were used|was not used)|ai[- ]?(use|assisted)[^\\n]{0,30}(disclosure|statement|technolog)|no generative ai|did not use (any )?generative ai)",
"fix": "add a short 'Declaration of generative AI in the writing process' section, even to say none was used"
},
{
"check": "ai_listed_as_author",
"sev": "error",
"msg": "A generative-AI tool appears on the author line. Under the ICMJE Recommendations an AI tool cannot be an author, because it cannot take responsibility or declare interests.",
"ban": "(\\\\author\\{|^\\s*\\*{0,2}authors?\\*{0,2}\\s*:|^\\s*#+\\s*authors?\\b)[^\\n]*\\b(chatgpt|gpt-[0-9o]|claude|gemini|copilot|llama|bard)\\b",
"fix": "move the tool out of the author list and into the AI disclosure section"
},
{
"check": "nih_embargo_stale",
"sev": "error",
"msg": "This manuscript still promises a 12-month embargo. The 2024 NIH Public Access Policy ({since:2026-07-01}) applies to papers accepted for publication on or after that date: the Author Accepted Manuscript goes to PubMed Central and is public on the official date of publication, with no embargo option.",
"ban": "((12|twelve)[\\s-]*months?[^\\n]{0,25}(embargo|after publication|of publication|following publication)|embargo[^\\n]{0,25}(12|twelve)[\\s-]*months?|within (12|twelve) months of[^\\n]{0,20}publication)",
"fix": "say the accepted manuscript is deposited in PMC and released on the publication date"
},
{
"check": "data_availability_missing",
"sev": "error",
"msg": "No data availability statement. Most publishers and every major funder now require one, even when the answer is that no new data were created.",
"need": "(data availability|availability of data|data sharing statement|data and code availability|code availability)",
"fix": "add a 'Data availability' section naming the repository and the accession or DOI"
},
{
"check": "data_on_request_only",
"sev": "warn",
"msg": "The data availability statement says the data are available from the authors on request. Funder open-access policies and a growing number of journals no longer accept that as the only route.",
"scope": "(data availability|availability of data|data sharing statement|data and code availability)",
"ban": "available[\\s\\S]{0,60}?(from\\s+the\\s+(corresponding\\s+)?authors?|(on|upon)\\s+(reasonable\\s+)?request)",
"fix": "deposit in a repository and cite the accession or DOI, or state the legal reason access is restricted"
},
{
"check": "data_locator_missing",
"sev": "error",
"msg": "The data availability statement carries no locator. A reviewer cannot follow a promise; the statement needs a repository name plus an accession number or a DOI.",
"scope": "(data availability|availability of data|data sharing statement|data and code availability)",
"need": "(10\\.\\d{4,9}/|https?://|accession|\\b(zenodo|dryad|figshare|osf|genbank|geo|sra|pride|dataverse|github)\\b)",
"fix": "add the repository and the accession/DOI, e.g. Zenodo, doi:10.5281/zenodo.0000000"
},
{
"check": "funding_statement_missing",
"sev": "error",
"msg": "No labelled funding statement. Publishers index funding separately from the acknowledgements, and a funder that cannot find its award in the record counts the paper as unreported.",
"need": "(funding statement|\\bfunding\\b|financial (support|disclosure)|funder)",
"fix": "add a 'Funding' section, or state that the work received no specific funding"
},
{
"check": "grant_number_missing",
"sev": "error",
"msg": "A funder is named but no award or grant number is given. Funder reporting systems match on the award ID, not the funder name.",
"when": "\\b(nih|national institutes of health|nsf|national science foundation|erc|european research council|wellcome|ukri|horizon europe|dfg|nsfc|cihr|arc\\b)",
"need": "(grant|award|agreement|contract)[^\\n]{0,20}(no\\.?|number|#|id|:)?\\s*[A-Z0-9][A-Z0-9/._-]{4,}",
"fix": "add the award ID exactly as the funder issued it"
},
{
"check": "competing_interests_missing",
"sev": "error",
"msg": "No competing interests statement. The ICMJE disclosure is required from every author, and 'none' has to be written down rather than left out.",
"need": "(competing interest|conflict of interest|conflicts of interest|declaration of interest|disclosure statement)",
"fix": "add 'Competing interests: the authors declare none.' if that is the case"
},
{
"check": "author_contributions_missing",
"sev": "warn",
"msg": "No author contributions statement. CRediT (ANSI/NISO Z39.104-2022) is now collected at submission by most large publishers.",
"need": "(author contribution|credit|contributor roles)",
"fix": "add an 'Author contributions' section using the 14 CRediT roles"
},
{
"check": "credit_roles_nonstandard",
"sev": "warn",
"msg": "The author contributions are written in free prose rather than CRediT roles, so the publisher cannot map them to the taxonomy (ANSI/NISO Z39.104-2022).",
"scope": "author contributions?",
"need": "(conceptualization|conceptualisation|data curation|formal analysis|funding acquisition|investigation|methodology|project administration|supervision|validation|visualization|visualisation|writing\\s*[-–—]\\s*(original draft|review))",
"fix": "rewrite as 'A.B.: Conceptualization, Methodology; C.D.: Formal analysis, Writing - original draft'"
},
{
"check": "orcid_missing",
"sev": "warn",
"msg": "No ORCID iD appears anywhere. Several publishers and funders require a verified ORCID for at least the corresponding author at submission.",
"need": "(orcid|0000-000[0-3]-\\d{4}-\\d{3}[\\dxX])",
"fix": "add the corresponding author's ORCID iD next to their name"
},
{
"check": "ethics_approval_missing",
"sev": "error",
"msg": "The manuscript reports work on people or animals but names no ethics approval. Editors desk-reject on this before the paper reaches a reviewer.",
"when": "\\b(participants?|patients?|human subjects?|volunteers?|mice|rats|rodents?|animals?)\\b",
"need": "(ethic|institutional review board|\\birb\\b|research ethics committee|\\biacuc\\b|helsinki)",
"fix": "name the approving committee and the protocol number"
},
{
"check": "consent_statement_missing",
"sev": "warn",
"msg": "People took part but no informed-consent statement is present. Consent to participate and, where images or case details appear, consent to publish are separate statements.",
"when": "\\b(participants?|patients?|volunteers?|human subjects?)\\b",
"need": "(informed consent|consent to participate|consent to publish|written consent)",
"fix": "state how consent was obtained, and add consent to publish if any individual is identifiable"
},
{
"check": "trial_registration_missing",
"sev": "error",
"msg": "A trial is described but no registration identifier is given. ICMJE member journals will not consider an unregistered trial, and registration must predate enrolment.",
"when": "(randomi[sz]ed|randomi[sz]ation|clinical trial|\\brct\\b)",
"need": "(nct\\d{8}|isrctn\\d{8}|chictr|actrn\\d{5}|drks\\d{5}|trial registration|registered (at|with|on|in)[^\\n]{0,60}\\d)",
"fix": "add the registry and the identifier, e.g. ClinicalTrials.gov NCT00000000"
},
{
"check": "oa_licence_missing",
"sev": "warn",
"msg": "No open-access licence is stated. Plan S, UKRI, Horizon Europe and the 2026 NIH policy all expect the accepted manuscript to carry a CC BY or equivalent licence, applied by the author at submission.",
"need": "(cc[\\s-]?by|creative commons|\\bcc0\\b|open[- ]access licen[cs]e|public copyright licen[cs]e)",
"fix": "add the funder-required licence line, e.g. 'For the purpose of open access, a CC BY public copyright licence is applied to this submission.'"
}
]
;</script>
<script>// Manuscript Disclosure Lint — the brain. Same file runs in Node (VS Code) and in the browser (free web page).
'use strict';
var RULES = (typeof module !== 'undefined' && module.exports) ? require('./rules.json') : window.MDL_RULES;
function rx(p) { return new RegExp(p, 'i'); }
function lineOf(lines, re) { for (var i = 0; i < lines.length; i++) { if (re.test(lines[i])) return i + 1; } return 0; }
function slice(text, re, n) { var m = re.exec(text); return m ? text.slice(m.index, m.index + (n || 400)) : null; }
function days(from, to) { return Math.round((Date.parse(to + 'T00:00:00Z') - Date.parse(from + 'T00:00:00Z')) / 86400000); }
// {since:YYYY-MM-DD} -> "in force since 2026-07-01, 75 days ago" / "takes effect 2027-01-01, in 109 days"
function fmt(msg, today) {
return String(msg).replace(/\{since:(\d{4}-\d{2}-\d{2})\}/g, function (_, d) {
var n = days(d, today);
return n >= 0 ? ('in force since ' + d + ', ' + n + ' day' + (n === 1 ? '' : 's') + ' ago')
: ('takes effect ' + d + ', in ' + (-n) + ' day' + (n === -1 ? '' : 's'));
});
}
function check(text, opts) {
opts = opts || {};
var today = /^\d{4}-\d{2}-\d{2}$/.test(String(opts.today || '')) ? opts.today : new Date().toISOString().slice(0, 10);
var src = String(text == null ? '' : text);
var lines = src.split(/\r?\n/);
var findings = [];
function hit(r, line) {
findings.push({ check: r.check, sev: r.sev || 'error', line: line || 1,
msg: fmt(r.msg, today) + (r.fix ? ' → ' + r.fix : '') });
}
for (var i = 0; i < RULES.length; i++) {
var r = RULES[i], anchor = 1, hay = src, whenRe;
if (r.when) {
whenRe = rx(r.when);
if (!whenRe.test(src)) continue;
anchor = lineOf(lines, whenRe) || 1;
}
if (r.scope) {
var scopeRe = rx(r.scope);
var s = slice(src, scopeRe, r.scope_chars || 400);
if (s === null) continue;
hay = s;
anchor = lineOf(lines, scopeRe) || anchor;
}
if (r.ban) {
var banRe = rx(r.ban);
if (banRe.test(hay)) hit(r, lineOf(lines, banRe) || anchor);
continue;
}
if (r.need && !rx(r.need).test(hay)) hit(r, anchor);
}
findings.sort(function (a, b) { return (a.line || 0) - (b.line || 0); });
return { findings: findings, rule_count: RULES.length, today: today };
}
var MDLENGINE = { engine: { check: check }, RULES: RULES, RULE_COUNT: RULES.length };
if (typeof module !== 'undefined' && module.exports) module.exports = MDLENGINE;
else window.MDLENGINE = MDLENGINE;
</script>
<script>// ⛔뼈대 — kit/scaffold.py 가 찍는다 (s143). findings [{check,sev,msg,line?}] → 글/HTML. 같은 파일이 Node 와 브라우저에서 산다.
'use strict';
function escapeHtml(s) { return String(s == null ? '' : s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); }
function summaryLine(res) {
const f = (res && res.findings) || []; const e = f.filter(function (x) { return String(x.sev || 'error').toLowerCase().startsWith('err'); }).length;
return f.length ? (f.length + ' finding' + (f.length === 1 ? '' : 's') + ' (' + e + ' error' + (e === 1 ? '' : 's') + ')') : 'Clean — no findings.';
}
function toText(res, label) {
const f = (res && res.findings) || [];
const lines = ['== ' + (label || '') + ' — ' + summaryLine(res)];
f.forEach(function (x) { lines.push(' ' + String(x.sev || 'error').toUpperCase().slice(0, 4) + ' ' + (x.line ? 'L' + x.line + ' ' : '') + (x.check || x.id || '') + ' ' + (x.msg || x.message || '')); });
return lines.join('\n');
}
function toHtml(res) {
const f = (res && res.findings) || [];
if (!f.length) return '<p class="ok">' + escapeHtml(summaryLine(res)) + '</p>';
const rows = f.map(function (x) { return '<tr><td class="sev ' + escapeHtml(String(x.sev || 'error')) + '">' + escapeHtml(String(x.sev || 'error')) + '</td><td>' + (x.line ? 'L' + escapeHtml(x.line) : '') + '</td><td><code>' + escapeHtml(x.check || x.id || '') + '</code></td><td>' + escapeHtml(x.msg || x.message || '') + '</td></tr>'; }).join('');
return '<p class="sum">' + escapeHtml(summaryLine(res)) + '</p><table><thead><tr><th>Level</th><th>Line</th><th>Check</th><th>What</th></tr></thead><tbody>' + rows + '</tbody></table>';
}
var MDLREPORT = { escapeHtml: escapeHtml, summaryLine: summaryLine, toText: toText, toHtml: toHtml };
if (typeof module !== 'undefined' && module.exports) module.exports = MDLREPORT;
else window.MDLREPORT = MDLREPORT;
</script>
<script>
(function(){
var src=document.getElementById('src'), out=document.getElementById('out'), go=document.getElementById('go'), today=document.getElementById('today');
today.value=new Date().toISOString().slice(0,10);
function run(){ try { var res=window.MDLENGINE.engine.check(src.value,{today:today.value}); out.innerHTML=window.MDLREPORT.toHtml(res); } catch(e){ out.innerHTML='<p class="sev error">Could not run: '+String(e.message||e)+'</p>'; } }
go.onclick=run; if (src.value.trim()) run();
})();
</script>
<section data-yj-install="free" style="margin:2rem auto 1rem;max-width:46rem;padding:1.25rem 1.25rem;border:1px solid #cfe3d6;border-radius:12px;background:#f6fbf8;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .4rem;font-size:1.2rem">Install free</h2><p style="margin:0 0 .8rem;color:#41505f">Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.</p><a href="https://marketplace.visualstudio.com/items?itemName=ReadyStack.manuscript-disclosure-lint" rel="noopener" data-yj-install-door="mp" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'manuscript-disclosure-lint',src:'mp',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">VS Code Marketplace</a><a href="https://open-vsx.org/extension/readystack/manuscript-disclosure-lint" rel="noopener" data-yj-install-door="ovsx" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'manuscript-disclosure-lint',src:'ovsx',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Open VSX (Cursor, VSCodium)</a><a href="https://www.npmjs.com/package/@readystack/manuscript-disclosure-lint" rel="noopener" data-yj-install-door="npm" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'manuscript-disclosure-lint',src:'npm',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">npm</a><a href="https://hub.docker.com/r/getreadystack/manuscript-disclosure-lint" rel="noopener" data-yj-install-door="docker" onclick="try{navigator.sendBeacon('/api/ev',new Blob([JSON.stringify({t:'install',slug:'manuscript-disclosure-lint',src:'docker',path:location.pathname})],{type:'application/json'}))}catch(e){}" style="display:inline-block;margin:0 .5rem .5rem 0;padding:.6rem 1rem;border-radius:8px;background:#0f7b3f;color:#fff;text-decoration:none;font-weight:600">Docker Hub</a><pre style="margin:.5rem 0 0;padding:.6rem .8rem;background:#f3f5f8;border-radius:8px;font-size:.9rem;overflow:auto">ext install ReadyStack.manuscript-disclosure-lint
npx @readystack/manuscript-disclosure-lint &lt;file&gt;
docker run --rm -v &quot;$PWD:/w&quot; getreadystack/manuscript-disclosure-lint /w</pre><p style="margin:.6rem 0 0;font-size:.92rem;color:#41505f"><a href="https://getreadystack.com/api/buy/cl/polar_cl_l6iN1uWt0FwWu7tBsczD0jWpP2vxFM54Wdwqb3KPi1G" rel="nofollow" style="color:#0f7b3f;text-decoration:underline">Team? One key for every ReadyStack linter, 5 seats, $149 once</a></p></section>
<section data-yj-alert="rule" style="margin:1rem auto 1.5rem;max-width:46rem;padding:1.1rem 1.25rem;border:1px solid #d9dee6;border-radius:12px;background:#fbfcfd;font:15px/1.55 system-ui,-apple-system,Segoe UI,sans-serif"><b style="font-size:1.05rem">Get the full rule table as a PDF</b><div style="opacity:.78;margin:.35rem 0 .8rem">All 16 rules Manuscript Disclosure Lint checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.</div><div style="display:flex;gap:8px;flex-wrap:wrap"><input id="yjae" type="email" placeholder="you@example.com" style="flex:1;min-width:210px;padding:11px 13px;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:#fff;color:inherit"><button id="yjab" style="padding:11px 18px;border-radius:8px;border:0;cursor:pointer;background:#0f7b3f;color:#fff;font:600 15px system-ui,sans-serif">Email me the PDF</button></div><div id="yjao" hidden style="margin-top:.6rem;color:#0f7b3f">Sent. It arrives within the hour - check spam too.</div><script>(function(){var b=document.getElementById("yjab"),e=document.getElementById("yjae");if(!b||!e)return;b.addEventListener("click",function(){var v=e.value.trim();if(!/.+@.+\..+/.test(v))return;try{localStorage.setItem("yj_em","1");}catch(_){}fetch(location.origin+"/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:v,slug:"manuscript-disclosure-lint",lang:"en",source:"rule_table"+((b.closest&&b.closest("section")&&b.closest("section").getAttribute("data-yj-moved"))?"_at_result":"")})}).then(function(r){var o=document.getElementById("yjao");o.hidden=false;if(!r.ok){o.textContent="Could not save - please try again.";}}).catch(function(){var o=document.getElementById("yjao");o.hidden=false;o.textContent="Could not save - please try again.";});});})();</script><script>(function(){var e=document.getElementById("yjae"),s=e&&e.closest?e.closest("section"):null,o=document.getElementById("out");if(!s||!o)return;var d=false;function mv(ev){if(d)return;if(ev&&ev.target&&s.contains(ev.target))return;d=true;var b=o;while(b.parentNode&&b.parentNode!==document.body&&b.parentNode.tagName!=="MAIN"&&b.parentNode.tagName!=="ARTICLE")b=b.parentNode;if(!b.parentNode||b===s||b.contains(s))return;try{b.parentNode.insertBefore(s,b.nextSibling);s.setAttribute("data-yj-moved","1");}catch(_){}}document.addEventListener("input",mv,true);document.addEventListener("change",mv,true);})();</script></section>
<section data-yj-cta="paid" style="margin:3rem auto;max-width:46rem;padding:1.5rem 1.25rem;border:1px solid #d8dee9;border-radius:12px;background:#fbfcfe;font:16px/1.6 system-ui,-apple-system,Segoe UI,sans-serif"><h2 style="margin:0 0 .5rem;font-size:1.25rem">Get the complete version <span class="yj-price">$29</span></h2><p style="margin:.25rem 0 1rem;color:#41505f">This page is the working piece. The full pack has everything below.</p><p style="margin:0 0 1rem;color:#41505f">16 rules that catch the statements a journal desk-rejects you for — in your .tex or .md, before you submit</p><p style="margin:0 0 1rem;color:#5b6b7c;font-size:.94rem">Commercial manuscript formatting and submission-compliance services are priced at $150-$400 per paper; this is the same checklist as a file you run yourself.</p><a href="https://getreadystack.com/api/buy/cl/polar_cl_ZRgsG5E9wpjfw710CyEFUGgArfwIGQv523UDB4HGC2G" rel="nofollow" style="display:inline-block;padding:.7rem 1.3rem;border-radius:8px;background:#1b64f2;color:#fff;text-decoration:none;font-weight:600">Buy the full version — $29</a></section>
<!--yj-share-s101--><div style="margin:28px 0 8px;text-align:center"><button id="yjcp" type="button" style="font:inherit;padding:10px 18px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Copy link</button><button id="yjimg" type="button" style="font:inherit;padding:10px 18px;margin-left:8px;border:1px solid #8884;border-radius:10px;background:transparent;cursor:pointer">Save result as image</button></div><script>(function(){var b=document.getElementById("yjimg");if(!b)return;b.addEventListener("click",function(){var o=document.getElementById("out");var txt=(o&&(o.innerText||o.textContent)||"").trim();if(!txt){b.textContent="(no result yet)";setTimeout(function(){b.textContent="Save result as image";},1500);return;}var lines=txt.split(String.fromCharCode(10)).filter(function(x){return x.trim();}).slice(0,10);var W=1200,P=56,c=document.createElement("canvas");c.width=W;var lh=38,H=P*2+70+lines.length*lh+60;c.height=H;var x=c.getContext("2d");x.fillStyle="#1a1512";x.fillRect(0,0,W,H);x.fillStyle="#f3e9d2";x.font="600 34px system-ui,Segoe UI,Arial";var t=(document.title||"").split("|")[0].trim();x.fillText(t.slice(0,54),P,P+34);x.font="22px ui-monospace,Menlo,Consolas,monospace";x.fillStyle="#e8dcc4";for(var i=0;i<lines.length;i++){x.fillText(lines[i].slice(0,88),P,P+70+i*lh+22);}x.font="600 22px system-ui,Segoe UI,Arial";x.fillStyle="#c9a227";var d=location.hostname.replace("www.","");x.fillText(d,W-P-x.measureText(d).width,H-P+6);c.toBlob(function(bl){var u=URL.createObjectURL(bl),a=document.createElement("a");a.href=u;a.download=(t||"result").replace(/[^a-z0-9]+/gi,"-").toLowerCase()+"-"+d+".png";document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(u);a.remove();},2000);},"image/png");});})();</script><script>(function(){var b=document.getElementById("yjcp");if(!b)return;var t=b.textContent;b.addEventListener("click",function(){var u=location.href.split("#")[0];function d(){b.textContent="Link copied";setTimeout(function(){b.textContent=t;},1800);}if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(u).then(d,function(){prompt("",u);});}else{prompt("",u);}});})();</script><div class="yj-home-find"><div class="yj-lgbar"><a href="/" class="yj-lg on">EN</a><a href="/de/" class="yj-lg">DE</a><a href="/ja/" class="yj-lg">JA</a><a href="/es/" class="yj-lg">ES</a><a href="/pt/" class="yj-lg">PT</a></div><section class="yj-find"><h2>Find a tool</h2><input id="yjq" type="search" autocomplete="off" placeholder="Type a product name, format or task"><div id="yjr"></div></section><style>.yj-lgbar{position:absolute;top:14px;right:18px;display:flex;gap:6px;z-index:60}.yj-lg{font:600 12px/1 system-ui,sans-serif;padding:6px 9px;border-radius:4px;text-decoration:none;color:#8b96a3;border:1px solid rgba(140,150,165,.28)}.yj-lg:hover{color:#e8eaed;border-color:rgba(160,175,195,.6)}.yj-lg.on{color:#0e1116;background:#cfd6de;border-color:#cfd6de}.yj-find{max-width:760px;margin:34px auto 8px;padding:0 20px}.yj-find h2{font:600 20px/1.3 system-ui,sans-serif;margin:0 0 10px}#yjq{width:100%;box-sizing:border-box;padding:13px 15px;font:400 15.5px system-ui,sans-serif;border:1px solid rgba(140,150,165,.34);border-radius:8px;background:rgba(255,255,255,.04);color:inherit}#yjq:focus{outline:none;border-color:#7FD1C4}#yjr{margin-top:10px;display:flex;flex-direction:column;gap:6px}#yjr a{display:flex;justify-content:space-between;gap:12px;padding:11px 14px;border:1px solid rgba(140,150,165,.22);border-radius:6px;text-decoration:none;font:400 14.5px/1.4 system-ui,sans-serif;color:inherit}#yjr a:hover{border-color:#7FD1C4}#yjr .pr{font:600 13px system-ui,sans-serif;color:#5fbf9a;white-space:nowrap}</style><script>(function(){var q=document.getElementById("yjq"),r=document.getElementById("yjr"),D=null;function load(){if(D)return Promise.resolve(D);return fetch("/search-index.json").then(function(x){return x.json();}).then(function(j){D=j;return j;}).catch(function(){D=[];return D;});}function esc(t){return String(t).replace(/[&<>"]/g,function(c){return {"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"}[c];});}function run(){var v=q.value.trim().toLowerCase();if(v.length<2){r.innerHTML="";return;}load().then(function(j){var w=v.split(/\s+/),o=[];for(var i=0;i<j.length&&o.length<12;i++){var t=j[i].t.toLowerCase();var ok=true;for(var k=0;k<w.length;k++){if(t.indexOf(w[k])<0){ok=false;break;}}if(ok)o.push(j[i]);}r.innerHTML=o.length?o.map(function(x){return "<a href=\""+esc(x.u)+"\">"+"<span>"+esc(x.t)+"</span>"+(x.p?"<span class=\"pr\">$"+x.p+"</span>":"")+"</a>";}).join(""):"";});}q.addEventListener("input",run);q.addEventListener("focus",load);})();</script></div>
<script data-yj="yj-view-beacon">(function(){try{var p=location.pathname;var k='yjv:'+p;if(sessionStorage.getItem(k))return;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",ref:(document.referrer||''),src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}catch(e){}})();</script>
<script data-yj="yj-use-beacon">(function(){try{var o=document.getElementById('out');if(!o)return;var p=location.pathname,k='yju:'+p,sent=false;function fire(){if(sent||sessionStorage.getItem(k))return;if(!(o.textContent||'').replace(/\s+/g,'').length)return;sent=true;sessionStorage.setItem(k,'1');fetch('/api/ev',{method:'POST',keepalive:true,headers:{'Content-Type':'application/json'},body:JSON.stringify({path:p,lang:"en",t:'use',src:(function(){try{return (new URLSearchParams(location.search).get('ref')||'').replace(/[^a-z_]/g,'').slice(0,12)}catch(e){return ''}})()})}).catch(function(){});}var mo=new MutationObserver(function(){fire();if(sent)mo.disconnect();});mo.observe(o,{childList:true,characterData:true,subtree:true});}catch(e){}})();</script>
<section data-yj="yj-facts-v1" style="max-width:920px;margin:48px auto 0;padding:0 20px;font-family:system-ui,sans-serif"><style>.yj-article p{font:400 15.5px/1.7 system-ui,sans-serif;color:#26313b;margin:0 0 12px;max-width:72ch}.yj-article h2,.yj-article h3,.yj-article h4{font:600 17px/1.35 system-ui,sans-serif;color:#1b1f24;margin:22px 0 8px}.yj-article table{border-collapse:collapse;margin:10px 0 16px;font:14px/1.45 system-ui,sans-serif}.yj-article th,.yj-article td{border:1px solid #e2e6ea;padding:6px 10px;text-align:left}.yj-article th{background:#f4f6f8}.yj-article pre{background:#0f1720;color:#e6edf3;padding:12px 14px;border-radius:8px;overflow:auto;font:13px/1.5 ui-monospace,Menlo,monospace}.yj-article code{font:13px ui-monospace,Menlo,monospace;background:#f1f3f5;padding:1px 4px;border-radius:3px}.yj-article pre code{background:none;padding:0}.yj-article ul,.yj-article ol{font:15px/1.6 system-ui,sans-serif;color:#26313b}</style><p style="font:400 13px/1.5 system-ui,sans-serif;color:#6b7680;margin:0 0 14px"><time datetime="2026-09-17">Updated 2026-09-17</time> · ReadyStack</p><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","dateModified":"2026-09-17","author":{"@type":"Organization","name":"ReadyStack"}}</script><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Worked example</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 16px;color:#5b6570">Real numbers from this tool, line by line.</p><div class="yj-article"><p><img src="https://getreadystack.com/img/promo/sku64951_result_card.jpg" alt="Manuscript Disclosure Lint" loading="lazy" style="max-width:100%;border-radius:6px"></p>
<p>Six required submission statements are missing from this finished manuscript - postdocs and research fellows in UK primary-care groups who submit to ICMJE journals.</p>
<p>== _fixtures/dirty.tex - 14 findings (9 errors) ERROR L1 ai_disclosure_missing No AI-use disclosure: name the tool and what it was used for. ERROR L6 ai_listed_as_author A generative-AI tool sits on the author line; an AI tool cannot be an author. ERROR L13 ethics_approval_missing Patients, but no ethics committee and no protocol number. ERROR L31 grant_number_missing A funder is named with no award identifier. ERROR L33 nih_embargo_stale A 12-month embargo is promised; that option ended on 2026-07-01. ERROR L35 data_locator_missing The data availability statement has no repository, accession or DOI.</p>
<p>Those six errors are what an editorial office bounces a paper for, and the research fellow who wrote the file would have heard about them from an editorial assistant rather than from a reviewer.</p>
<p>The paper was real work: 412 adult asthma patients, six practices, a clean primary endpoint. The submission form was going to ask its file questions the file could not answer. Manuscript Disclosure Lint applies 16 rules to the .tex or .md open in your editor; on this sample manuscript it returns 14 findings, 9 of them errors, each pinned to a line with the wording to paste.</p>
<p>Line 6 read \author{A. Ruiz \and M. Okafor \and ChatGPT (OpenAI)}. Under the ICMJE Recommendations a generative-AI tool cannot be an author: it cannot take responsibility or declare an interest. It belongs in a disclosure paragraph, and that paragraph was absent too, which is the finding on line 1.</p>
<p>Line 33 promised that the accepted manuscript would go to PubMed Central with a 12-month embargo. That sentence describes a policy that no longer exists. The 2024 NIH Public Access Policy applies to papers accepted for publication on or after 2026-07-01: the Author Accepted Manuscript is deposited in PubMed Central and made public on the official date of publication, with no embargo option at all. This is the rule a chatbot gets wrong, because models trained before mid-2026 learned the old window and will write it into your cover letter.</p>
<p>Line 35 said the datasets were available from the corresponding author on reasonable request. Funder open-access conditions and a growing number of journals no longer accept that as the only route, and the statement carried no repository, no accession number and no DOI, so a reviewer had nothing to follow.</p>
<p>Line 31 was the funding: supported by the National Institutes of Health. Publishers index funding as a separate field, and funder reporting systems match on the award identifier, not on the funder name. No award number appeared anywhere in the file. Line 13 is the Methods, where patients were randomised 1:1 with no ethics committee, no protocol number and no consent sentence, which for an ICMJE member journal ends the conversation.</p>
<p>None of that is hard to fix. All of it is easy to forget in a file you have been editing for months, where the science is the part you are actually thinking about. The extension marks each finding on its own line and prints the wording to paste. Nothing is uploaded: an unpublished manuscript under review is confidential, and most institutions and most journals do not permit pasting one into a hosted chat model.</p>
<p>Checking the file open in your editor is free and uncapped: all 16 rules, every finding, the paste-ready lines, with no watermark, no run limit and no locked results. The paid part is a different axis, scope and ownership - sweeping every .tex and .md in a workspace at once and writing a dated report file you keep, for a whole thesis or a lab&#x27;s back catalogue. That is $29 once with a 7-day full refund, against manuscript formatting and submission-compliance services priced at $150-$400 per paper.</p></div><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:30px 0 10px;color:#1b1f24">15 seconds — what it actually does</h2><video controls muted playsinline preload="none" poster="/img/promo/sku64951_result_card.jpg" style="width:100%;max-width:360px;border-radius:10px;display:block;margin:0 auto"><source src="/media/sku64951_short.mp4" type="video/mp4"></video><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:34px 0 6px;color:#1b1f24">Questions people ask</h2><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What does Manuscript Disclosure Lint actually do?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">It reads the .tex or .md manuscript open in VS Code and applies 16 rules for the statements journals collect at submission: generative-AI disclosure, data availability with a real locator, funding and award ID, competing interests, CRediT author contributions, ethics approval, informed consent, trial registration, ORCID and an open-access licence. Each finding names the line and the wording to paste.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Who is it for?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Researchers and postdocs who draft papers in LaTeX or Markdown inside VS Code, clinical trialists who must show a registration identifier, and research-office or lab staff who sign off submissions. If you write in Word and submit through a publisher portal that fills these fields for you, you do not need it.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Why not just ask a chatbot?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Two reasons. An unpublished manuscript under review is confidential, and most institutions and journals forbid pasting it into a hosted model. And chatbots are stale here: models trained before mid-2026 still describe the retired 12-month NIH embargo rather than the policy in force since 2026-07-01. This runs offline and carries that date as a rule.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What is free and what costs money?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Checking the file open in your editor is free and uncapped: all 16 rules, every finding, the paste-ready wording, forever. The paid part is scope and ownership — sweeping every manuscript in a workspace at once and writing a dated report file you keep. $29 once, one key per person or CI seat.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">What would this cost otherwise?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">Commercial manuscript formatting and submission-compliance services are priced at $150-$400 per paper. A desk rejection costs no money but roughly 2 to 6 weeks before the paper reaches a reviewer at the next journal, and the resubmission starts the queue again.</p></details><details style="border-bottom:1px solid #e6e9ed;padding:10px 0"><summary style="cursor:pointer;font:600 15px/1.4 system-ui,sans-serif;color:#1b1f24">Why not just ask ChatGPT or another AI chat?</summary><p style="margin:8px 0 2px;font:400 14.5px/1.6 system-ui,sans-serif;color:#33404b">A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Manuscript Lint - journal disclosure statements (COI, fundin checks the file you open against 16 rules from a rule set dated 2026-09-20, and points at the exact line with the fix. For a filing, an audit or a client you need that dated result on your own files.</p></details><script type="application/ld+json" data-yj="yj-faq-ld">{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What does Manuscript Disclosure Lint actually do?", "acceptedAnswer": {"@type": "Answer", "text": "It reads the .tex or .md manuscript open in VS Code and applies 16 rules for the statements journals collect at submission: generative-AI disclosure, data availability with a real locator, funding and award ID, competing interests, CRediT author contributions, ethics approval, informed consent, trial registration, ORCID and an open-access licence. Each finding names the line and the wording to paste."}}, {"@type": "Question", "name": "Who is it for?", "acceptedAnswer": {"@type": "Answer", "text": "Researchers and postdocs who draft papers in LaTeX or Markdown inside VS Code, clinical trialists who must show a registration identifier, and research-office or lab staff who sign off submissions. If you write in Word and submit through a publisher portal that fills these fields for you, you do not need it."}}, {"@type": "Question", "name": "Why not just ask a chatbot?", "acceptedAnswer": {"@type": "Answer", "text": "Two reasons. An unpublished manuscript under review is confidential, and most institutions and journals forbid pasting it into a hosted model. And chatbots are stale here: models trained before mid-2026 still describe the retired 12-month NIH embargo rather than the policy in force since 2026-07-01. This runs offline and carries that date as a rule."}}, {"@type": "Question", "name": "What is free and what costs money?", "acceptedAnswer": {"@type": "Answer", "text": "Checking the file open in your editor is free and uncapped: all 16 rules, every finding, the paste-ready wording, forever. The paid part is scope and ownership — sweeping every manuscript in a workspace at once and writing a dated report file you keep. $29 once, one key per person or CI seat."}}, {"@type": "Question", "name": "What would this cost otherwise?", "acceptedAnswer": {"@type": "Answer", "text": "Commercial manuscript formatting and submission-compliance services are priced at $150-$400 per paper. A desk rejection costs no money but roughly 2 to 6 weeks before the paper reaches a reviewer at the next journal, and the resubmission starts the queue again."}}, {"@type": "Question", "name": "Why not just ask ChatGPT or another AI chat?", "acceptedAnswer": {"@type": "Answer", "text": "A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Manuscript Lint - journal disclosure statements (COI, fundin checks the file you open against 16 rules from a rule set dated 2026-09-20, and points at the exact line with the fix. For a filing, an audit or a client you need that dated result on your own files."}}]}</script><div id="yj-ask" style="margin:36px 0 0;padding:18px 18px 16px;border:1px solid #e2e6ea;border-radius:10px;background:#fbfbfc"><h2 style="font:600 19px/1.3 system-ui,sans-serif;margin:0 0 4px;color:#1b1f24">Ask about this tool</h2><p style="font:400 13.5px/1.5 system-ui,sans-serif;margin:0 0 12px;color:#5b6570">One question, answered by the person who built it. Your email only if you want the answer sent.</p><form onsubmit="return yjAsk(event)" style="display:grid;gap:8px"><textarea name="question" required minlength="10" maxlength="2000" rows="3" placeholder="Your question" style="font:14px/1.5 system-ui,sans-serif;padding:10px;border:1px solid #cfd6dd;border-radius:6px"></textarea><div style="display:flex;gap:8px;flex-wrap:wrap"><input type="email" name="email" placeholder="Email (optional)" style="flex:1;min-width:200px;font:14px system-ui,sans-serif;padding:9px 10px;border:1px solid #cfd6dd;border-radius:6px"><button type="submit" style="font:600 14px system-ui,sans-serif;padding:9px 18px;border:0;border-radius:6px;background:#1b1f24;color:#fff;cursor:pointer">Send</button></div><p id="yj-ask-msg" style="font:13px system-ui,sans-serif;margin:2px 0 0;color:#0a6238;min-height:1em"></p></form><script>function yjAsk(e){e.preventDefault();var f=e.target,m=document.getElementById("yj-ask-msg");m.style.color="#0a6238";fetch(location.origin+"/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sku:64951,slug:"manuscript-disclosure-lint",lang:"en",question:f.question.value,email:f.email.value,page:location.pathname})}).then(function(r){if(!r.ok)throw 0;m.textContent="Thanks \u2014 noted. Answers land on this page and, if you left an email, in your inbox.";f.question.value="";}).catch(function(){m.style.color="#a8551f";m.textContent="Could not send. Please try again in a minute.";});return false;}</script></div></section><section class="yj-related" style="max-width:920px;margin:56px auto 40px;padding:0 20px"><h2 style="font:600 21px/1.3 system-ui,sans-serif;margin:0 0 6px;color:#1b1f24">Same job, next tool</h2><p style="font:400 14.5px/1.5 system-ui,sans-serif;margin:0 0 20px;color:#5b6570">Free in the browser. The full version is a one-time licence.</p><div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px"><a class="yj-rel-c" href="https://getreadystack.com/tools/bulk-sender-lint"><span class="yj-rel-t">Bulk Sender Lint - the Gmail, Yahoo and Outlook.com rules, checked in your mai</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/latex-submission-lint"><span class="yj-rel-t">LaTeX Submission Lint: Desk-Reject Check</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/teacher-svg-bundle-cricut"><span class="yj-rel-t">Teacher &amp; School Staff SVG Bundle — 24 Classroom Sign, Tee &amp; Tumbler Cut Files</span><span class="yj-rel-p">$14.99</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/n8n-social-media-workflow-agency-content-approval"><span class="yj-rel-t">n8n Social Media Workflow for Agency Content Approval — 6 Client Sign-Off Auto</span><span class="yj-rel-p">$59</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/robots-txt-ai-crawler-audit"><span class="yj-rel-t">AI Crawler Rules - robots.txt Audit for AI Search</span><span class="yj-rel-p">$29</span></a><a class="yj-rel-c" href="https://getreadystack.com/tools/ai-disclosure-lint-sb942"><span class="yj-rel-t">AI Output Disclosure Lint SB 942</span><span class="yj-rel-p">$29</span></a></div><style>.yj-rel-c{display:flex;flex-direction:column;gap:8px;padding:15px 16px;border:1px solid #e2e6ea;border-radius:6px;text-decoration:none;background:#fff}.yj-rel-c:hover{border-color:#b9c2cb;background:#fafbfc}.yj-rel-t{font:500 14.5px/1.42 system-ui,sans-serif;color:#1b1f24}.yj-rel-p{font:600 13px system-ui,sans-serif;color:#0a6238}</style></section></body>
</html>