Autosave: 20260608-072048
This commit is contained in:
parent
7a6ff2b29f
commit
b940e647fb
@ -264,6 +264,13 @@ body.page-id-49 #wp--skip-link--target{margin-block-start:0!important}body.page-
|
||||
|
||||
.mlms-course-launch-hub{grid-template-columns:1fr}.mlms-course-page-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.mlms-course-page-card{position:relative;overflow:hidden;border-radius:26px;border:1px solid rgba(10,37,64,.09);background:rgba(255,255,255,.92);box-shadow:var(--mlms-shadow-soft);padding:22px;display:grid;gap:14px;align-content:start}.mlms-course-page-card:before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:linear-gradient(90deg,var(--mlms-primary),#21C58E);opacity:.75}.mlms-course-page-card h4{margin:0;color:var(--mlms-ink);font-size:22px;letter-spacing:-.035em}.mlms-course-page-card p{margin:0;color:var(--mlms-muted);line-height:1.5}.mlms-course-page-card .mlms-btn{width:max-content;text-decoration:none}.mlms-course-page-meta{display:flex;flex-wrap:wrap;gap:8px}.mlms-course-page-meta span{border-radius:999px;background:#F2F6FA;border:1px solid #DDE6F0;color:#4D5F75;padding:7px 10px;font-size:12px;font-weight:900}.mlms-course-standalone-page{background:var(--mlms-bg)}.mlms-course-standalone{padding:0 0 84px}.mlms-course-standalone-hero{position:relative;overflow:hidden;border-radius:34px;padding:28px;background:linear-gradient(135deg,#07182D 0%,#132747 58%,#251A56 100%);color:#fff;box-shadow:var(--mlms-shadow);margin:28px 0 24px}.mlms-course-standalone-hero h1{margin:0;color:#fff;font-size:clamp(38px,5vw,64px);line-height:.98;letter-spacing:-.06em;max-width:860px}.mlms-course-standalone-hero p{color:#D7E3F1;max-width:760px}.mlms-course-standalone-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.mlms-course-standalone-actions .mlms-btn-secondary{background:rgba(255,255,255,.11);border-color:rgba(255,255,255,.16);color:#fff;box-shadow:none}.mlms-course-route-shell{display:grid;gap:22px}.mlms-course-backlink{display:inline-flex;align-items:center;gap:8px;color:#C9C4FF!important;font-weight:900;text-decoration:none!important;margin-bottom:14px}.mlms-course-route-pill{display:inline-flex;width:max-content;border-radius:999px;background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.14);color:#E7E3FF;padding:8px 11px;font-weight:950;font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:12px}@media (max-width:900px){.mlms-course-page-grid{grid-template-columns:1fr}.mlms-course-standalone-hero{border-radius:26px;padding:22px}}
|
||||
|
||||
|
||||
.mlms-lesson-path-page{display:grid;gap:24px}.mlms-lesson-path-card{position:relative;overflow:hidden;border-radius:30px;background:rgba(255,255,255,.94);border:1px solid rgba(10,37,64,.09);box-shadow:var(--mlms-shadow-soft);padding:26px}.mlms-lesson-path-card:before{content:"";position:absolute;inset:0 0 auto 0;height:5px;background:linear-gradient(90deg,var(--mlms-primary),#A7B6FF,var(--mlms-green))}.mlms-lesson-path-head{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;flex-wrap:wrap;margin-bottom:22px}.mlms-lesson-path-head h2{margin:0;color:var(--mlms-ink);font-size:clamp(30px,3.6vw,48px);line-height:1.02;letter-spacing:-.055em}.mlms-lesson-path-head p{margin:8px 0 0;color:var(--mlms-muted);max-width:720px}.mlms-lesson-path-list{position:relative;display:grid;gap:14px;margin:0;padding:0;list-style:none}.mlms-lesson-path-list:before{content:"";position:absolute;left:25px;top:28px;bottom:28px;width:3px;border-radius:99px;background:#E2EAF3}.mlms-lesson-path-task{position:relative;display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:16px;align-items:center;border-radius:22px;border:1px solid #E2EAF3;background:#fff;padding:16px;box-shadow:0 10px 26px rgba(50,50,93,.06)}.mlms-lesson-path-marker{position:relative;z-index:1;width:52px;height:52px;border-radius:18px;display:grid;place-items:center;background:#F2F6FA;color:var(--mlms-muted);font-weight:950;border:1px solid #E2EAF3}.mlms-lesson-path-task.is-complete .mlms-lesson-path-marker{background:#ECFBF6;color:#08785B;border-color:rgba(33,197,142,.28)}.mlms-lesson-path-task.is-current{border-color:rgba(99,91,255,.28);background:linear-gradient(135deg,#fff,#F8F7FF);box-shadow:0 16px 36px rgba(99,91,255,.10)}.mlms-lesson-path-task.is-current .mlms-lesson-path-marker{background:var(--mlms-primary);color:#fff;border-color:transparent;box-shadow:0 0 0 7px rgba(99,91,255,.12)}.mlms-lesson-path-task.is-quiz{border-color:rgba(10,37,64,.16);background:linear-gradient(135deg,#07182D,#132747);color:#fff}.mlms-lesson-path-task.is-quiz .mlms-lesson-path-marker{background:#fff;color:var(--mlms-primary);border-color:rgba(255,255,255,.24)}.mlms-lesson-path-task h3{margin:0;color:var(--mlms-ink);font-size:21px;letter-spacing:-.03em}.mlms-lesson-path-task p{margin:5px 0 0;color:var(--mlms-muted);line-height:1.45}.mlms-lesson-path-task.is-quiz h3{color:#fff}.mlms-lesson-path-task.is-quiz p{color:#D7E3F1}.mlms-lesson-path-status{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:#F2F6FA;color:#56657D;padding:8px 11px;font-size:12px;font-weight:950;text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}.mlms-lesson-path-task.is-complete .mlms-lesson-path-status{background:#ECFBF6;color:#08785B}.mlms-lesson-path-task.is-current .mlms-lesson-path-status{background:#EFEDFF;color:var(--mlms-primary)}.mlms-lesson-path-task.is-quiz .mlms-lesson-path-status{background:rgba(255,255,255,.12);color:#E7E3FF}.mlms-lesson-content-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.mlms-lesson-task-card{border-radius:24px;background:rgba(255,255,255,.94);border:1px solid rgba(10,37,64,.09);box-shadow:var(--mlms-shadow-soft);padding:22px}.mlms-lesson-task-card h3{margin:0 0 8px;color:var(--mlms-ink);font-size:23px;letter-spacing:-.035em}.mlms-lesson-task-card p{margin:0;color:var(--mlms-muted);line-height:1.55}.mlms-lesson-task-card ul{margin:12px 0 0;padding-left:20px;color:var(--mlms-muted)}.mlms-lesson-task-card li+li{margin-top:6px}@media (max-width:780px){.mlms-lesson-path-task{grid-template-columns:46px 1fr;align-items:start}.mlms-lesson-path-marker{width:46px;height:46px;border-radius:16px}.mlms-lesson-path-status,.mlms-lesson-path-task .mlms-btn{grid-column:2;justify-self:start}.mlms-lesson-content-grid{grid-template-columns:1fr}.mlms-lesson-path-list:before{left:23px}}
|
||||
|
||||
|
||||
|
||||
.mlms-proof-modal{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;padding:24px}.mlms-proof-modal.open{display:flex}.mlms-proof-backdrop{position:absolute;inset:0;background:rgba(7,24,45,.62);backdrop-filter:blur(8px)}.mlms-proof-dialog{position:relative;z-index:1;width:min(640px,100%);max-height:92vh;overflow:auto;background:#fff;border:1px solid rgba(10,37,64,.10);border-radius:30px;box-shadow:0 28px 80px rgba(7,24,45,.28);padding:26px}.mlms-proof-dialog:before{content:"";position:absolute;inset:0 0 auto 0;height:5px;background:linear-gradient(90deg,var(--mlms-primary),var(--mlms-green));border-radius:30px 30px 0 0}.mlms-proof-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px}.mlms-proof-head h3{margin:0;color:var(--mlms-ink);font-size:28px;letter-spacing:-.04em;line-height:1.08}.mlms-proof-head p{margin:7px 0 0;color:var(--mlms-muted);line-height:1.45}.mlms-proof-close{width:42px;height:42px;border:0;border-radius:15px;background:#F2F6FA;color:var(--mlms-ink);font-size:24px;line-height:1;cursor:pointer}.mlms-proof-close:hover{background:#E7EDF5}.mlms-proof-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.mlms-proof-dialog .mlms-field.full{grid-column:1/-1}.mlms-proof-file{border:1px dashed #C9D6E5;border-radius:18px;background:#F8FAFD;padding:14px}.mlms-proof-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:18px}.mlms-proof-status{margin:0;color:#08785B;font-weight:850}.mlms-portfolio-card.proof-attached{border-color:rgba(33,197,142,.36);box-shadow:0 18px 42px rgba(33,197,142,.12)}.mlms-portfolio-card.proof-attached:after{content:"Proof attached";position:absolute;top:14px;right:14px;border-radius:999px;background:#ECFBF6;color:#08785B;border:1px solid rgba(33,197,142,.26);padding:7px 10px;font-size:12px;font-weight:950}.mlms-portfolio-link.is-attached{color:#08785B}@media (max-width:640px){.mlms-proof-dialog{padding:22px;border-radius:24px}.mlms-proof-grid{grid-template-columns:1fr}.mlms-proof-actions{display:grid}.mlms-proof-actions .mlms-btn{width:100%;justify-content:center}.mlms-proof-head h3{font-size:24px}}
|
||||
|
||||
CSS;
|
||||
}
|
||||
|
||||
@ -1057,10 +1064,111 @@ function matthew_lms_mvp_js(): string {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function initWaxProofModal(){
|
||||
var modal=document.getElementById('mlms-proof-modal');
|
||||
var triggers=[].slice.call(document.querySelectorAll('[data-proof-trigger]'));
|
||||
if(!modal || !triggers.length){return;}
|
||||
var form=modal.querySelector('[data-proof-form]');
|
||||
var artifactInput=modal.querySelector('#mlms-proof-artifact');
|
||||
var title=modal.querySelector('#mlms-proof-title');
|
||||
var copy=modal.querySelector('#mlms-proof-copy');
|
||||
var status=modal.querySelector('[data-proof-status]');
|
||||
var url=modal.querySelector('#mlms-proof-url');
|
||||
var notes=modal.querySelector('#mlms-proof-notes');
|
||||
var file=modal.querySelector('#mlms-proof-file');
|
||||
var storageKey='waxPortfolioProofs:v1';
|
||||
var activeTrigger=null;
|
||||
|
||||
function readProofs(){
|
||||
try{return JSON.parse(window.localStorage.getItem(storageKey)||'{}')||{};}catch(error){return {};}
|
||||
}
|
||||
function writeProofs(proofs){
|
||||
try{window.localStorage.setItem(storageKey, JSON.stringify(proofs));}catch(error){}
|
||||
}
|
||||
function markAttached(trigger, proof){
|
||||
if(!trigger){return;}
|
||||
var card=trigger.closest('.mlms-portfolio-card');
|
||||
if(card){card.classList.add('proof-attached');}
|
||||
trigger.classList.add('is-attached');
|
||||
trigger.textContent='Edit proof →';
|
||||
if(proof && proof.url){trigger.setAttribute('data-proof-url', proof.url);}
|
||||
}
|
||||
function restoreProofState(){
|
||||
var proofs=readProofs();
|
||||
triggers.forEach(function(trigger){
|
||||
var artifact=trigger.getAttribute('data-artifact')||'';
|
||||
if(artifact && proofs[artifact]){markAttached(trigger, proofs[artifact]);}
|
||||
});
|
||||
}
|
||||
function openModal(trigger){
|
||||
activeTrigger=trigger;
|
||||
var artifact=trigger.getAttribute('data-artifact')||'Portfolio artifact';
|
||||
var proofs=readProofs();
|
||||
var saved=proofs[artifact]||{};
|
||||
if(artifactInput){artifactInput.value=artifact;}
|
||||
if(title){title.textContent='Attach proof for '+artifact;}
|
||||
if(copy){copy.textContent='Add a public source, short evidence notes, or an optional local reference for this portfolio artifact.';}
|
||||
if(url){url.value=saved.url||'';}
|
||||
if(notes){notes.value=saved.notes||'';}
|
||||
if(file){file.value='';}
|
||||
if(status){status.textContent=saved.url ? 'Existing proof loaded. Update it or save again.' : '';}
|
||||
modal.classList.add('open');
|
||||
modal.setAttribute('aria-hidden','false');
|
||||
document.body.style.overflow='hidden';
|
||||
setTimeout(function(){if(url){url.focus();}},80);
|
||||
}
|
||||
function closeModal(){
|
||||
var returnFocus=activeTrigger;
|
||||
if(returnFocus){try{returnFocus.focus({preventScroll:true});}catch(error){returnFocus.focus();}}
|
||||
modal.classList.remove('open');
|
||||
modal.setAttribute('aria-hidden','true');
|
||||
document.body.style.overflow='';
|
||||
if(status){status.textContent='';}
|
||||
}
|
||||
|
||||
triggers.forEach(function(trigger){
|
||||
trigger.addEventListener('click',function(event){
|
||||
event.preventDefault();
|
||||
openModal(trigger);
|
||||
});
|
||||
});
|
||||
modal.querySelectorAll('[data-proof-close]').forEach(function(close){
|
||||
close.addEventListener('click',function(event){event.preventDefault();closeModal();});
|
||||
});
|
||||
document.addEventListener('keydown',function(event){
|
||||
if(event.key==='Escape' && modal.classList.contains('open')){closeModal();}
|
||||
});
|
||||
if(form){
|
||||
form.addEventListener('submit',function(event){
|
||||
event.preventDefault();
|
||||
if(!form.checkValidity()){
|
||||
form.reportValidity();
|
||||
return;
|
||||
}
|
||||
var artifact=(artifactInput && artifactInput.value) || (activeTrigger && activeTrigger.getAttribute('data-artifact')) || 'Portfolio artifact';
|
||||
var proofs=readProofs();
|
||||
proofs[artifact]={
|
||||
type:(modal.querySelector('#mlms-proof-type')||{}).value||'',
|
||||
url:(url && url.value.trim())||'',
|
||||
notes:(notes && notes.value.trim())||'',
|
||||
file_name:(file && file.files && file.files[0]) ? file.files[0].name : '',
|
||||
saved_at:new Date().toISOString()
|
||||
};
|
||||
writeProofs(proofs);
|
||||
markAttached(activeTrigger, proofs[artifact]);
|
||||
if(status){status.textContent='Proof saved for '+artifact+'.';}
|
||||
setTimeout(closeModal,900);
|
||||
});
|
||||
}
|
||||
restoreProofState();
|
||||
}
|
||||
|
||||
function initAll(){
|
||||
initWaxOnboarding();
|
||||
initWaxCourseDashboard();
|
||||
initWaxTutor();
|
||||
initWaxProofModal();
|
||||
}
|
||||
if(document.readyState==='loading'){
|
||||
document.addEventListener('DOMContentLoaded', initAll);
|
||||
@ -1411,7 +1519,6 @@ function matthew_lms_mvp_render_course_route_page(string $view): string {
|
||||
<section class="mlms-section"><div class="mlms-shell">
|
||||
<?php if ($view === 'course'): ?>
|
||||
<div class="mlms-course-route-shell">
|
||||
<a class="mlms-course-backlink" href="<?php echo esc_url(matthew_lms_mvp_course_url()); ?>">← Back to profile</a>
|
||||
<?php echo matthew_lms_mvp_render_course_dashboard($profile); ?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
@ -1424,9 +1531,9 @@ function matthew_lms_mvp_render_course_route_page(string $view): string {
|
||||
<p>Complete the quiz on its own page. Your score is saved to your profile and unlocks the build task when you pass.</p>
|
||||
<div class="mlms-course-standalone-actions"><a class="mlms-btn mlms-btn-secondary" href="<?php echo esc_url(matthew_lms_mvp_course_url('course') . '#mlms-lesson-view'); ?>">Open course dashboard</a></div>
|
||||
<?php else: ?>
|
||||
<h1>Lesson: build a practical AI workflow brief.</h1>
|
||||
<p>Read the lesson on a focused page, use the tutor if you get stuck, then move to the quiz page when you’re ready.</p>
|
||||
<div class="mlms-course-standalone-actions"><a class="mlms-btn mlms-btn-primary" href="<?php echo esc_url(matthew_lms_mvp_course_url('quiz')); ?>" data-mlms-open-quiz>Take quiz on separate page →</a><a class="mlms-btn mlms-btn-secondary" href="<?php echo esc_url(matthew_lms_mvp_course_url('course')); ?>">Open course dashboard</a></div>
|
||||
<h1>Lesson path: build a practical AI workflow brief.</h1>
|
||||
<p>Follow the lesson tasks as a path. The final unfinished task is the quiz, and its Start Quiz button opens a separate quiz page.</p>
|
||||
<div class="mlms-course-standalone-actions"><a class="mlms-btn mlms-btn-secondary" href="<?php echo esc_url(matthew_lms_mvp_course_url('course')); ?>">Open course dashboard</a></div>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
<div class="mlms-course-route-shell">
|
||||
@ -1434,12 +1541,7 @@ function matthew_lms_mvp_render_course_route_page(string $view): string {
|
||||
<?php echo matthew_lms_mvp_render_course_quiz_component(); ?>
|
||||
<?php else: ?>
|
||||
<section id="mlms-course-workspace" class="mlms-course-workspace launched" data-mlms-course-workspace aria-labelledby="mlms-course-workspace-heading">
|
||||
<div class="mlms-course-workspace-head">
|
||||
<div><p class="mlms-kicker">Lesson page</p><h3 id="mlms-course-workspace-heading">Focused lesson and build task</h3><p>The quiz opens on a separate page, so this page stays focused on reading, examples, and the final deliverable.</p></div>
|
||||
<span class="mlms-course-status-pill" data-mlms-course-status><?php echo esc_html($runtime['progress_status']); ?></span>
|
||||
</div>
|
||||
<?php echo matthew_lms_mvp_render_course_lesson_component($context, $progress); ?>
|
||||
<?php echo matthew_lms_mvp_render_course_build_component($context); ?>
|
||||
<?php echo matthew_lms_mvp_render_lesson_path_component($context, $progress); ?>
|
||||
</section>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@ -1492,7 +1594,7 @@ function matthew_lms_mvp_render_course_dashboard(array $profile): string {
|
||||
<h3>Course Overview</h3>
|
||||
<p>Phase 1 builds the practical AI workflow pattern: source inputs, prompt structure, review rubric, and human handoff.</p>
|
||||
<div class="mlms-dashboard-meta"><span>Lesson 2 of 5</span><span data-mlms-course-step>Step <?php echo esc_html((string) $progress['step']); ?> of 5</span><span>+20 skill points</span></div>
|
||||
<div class="mlms-phase-actions"><a class="mlms-btn mlms-btn-secondary mlms-phase-launch" href="#mlms-lesson-view" data-mlms-launch-course>Start lesson view</a></div>
|
||||
<div class="mlms-phase-actions"><a class="mlms-btn mlms-btn-secondary mlms-phase-launch" href="<?php echo esc_url($lesson_url); ?>" data-mlms-launch-course>Start lesson</a></div>
|
||||
</article>
|
||||
<article class="mlms-dashboard-phase locked" role="listitem" aria-disabled="true">
|
||||
<div class="mlms-dashboard-phase-top"><span class="mlms-dashboard-phase-number">2</span><span class="mlms-dashboard-lock">Next</span><span class="mlms-dashboard-skill-node" aria-label="Next skill node"></span></div>
|
||||
@ -1625,6 +1727,84 @@ function matthew_lms_mvp_render_course_lesson_component(array $context, array $p
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
|
||||
function matthew_lms_mvp_render_lesson_path_component(array $context, array $progress): string {
|
||||
$quiz_url = matthew_lms_mvp_course_url('quiz');
|
||||
ob_start();
|
||||
?>
|
||||
<div class="mlms-lesson-path-page">
|
||||
<article class="mlms-lesson-path-card" aria-labelledby="mlms-course-workspace-heading">
|
||||
<div class="mlms-lesson-path-head">
|
||||
<div>
|
||||
<p class="mlms-kicker">Lesson path</p>
|
||||
<h2 id="mlms-course-workspace-heading">Complete each lesson task in order.</h2>
|
||||
<p>Use this path to move from concept to practice. The quiz is intentionally the final unfinished task, and it opens on its own page.</p>
|
||||
</div>
|
||||
<div class="mlms-lesson-progress" aria-label="Progress within this lesson">
|
||||
<div class="mlms-lesson-progress-label"><span data-mlms-course-step>Step <?php echo esc_html((string) $progress['step']); ?> of 5</span><span data-mlms-course-percent><?php echo esc_html((string) $progress['percent']); ?>%</span></div>
|
||||
<div class="mlms-lesson-progress-track"><span style="width:<?php echo esc_attr((string) $progress['percent']); ?>%"></span></div>
|
||||
</div>
|
||||
</div>
|
||||
<ol class="mlms-lesson-path-list" aria-label="Lesson tasks path">
|
||||
<li class="mlms-lesson-path-task is-complete">
|
||||
<span class="mlms-lesson-path-marker" aria-hidden="true">✓</span>
|
||||
<div><h3>1. Understand the workflow goal</h3><p>Learn how AI workflow fluency turns messy work inputs into a repeatable process.</p></div>
|
||||
<span class="mlms-lesson-path-status">Complete</span>
|
||||
</li>
|
||||
<li class="mlms-lesson-path-task is-complete">
|
||||
<span class="mlms-lesson-path-marker" aria-hidden="true">✓</span>
|
||||
<div><h3>2. Review your <?php echo esc_html($context['role_label']); ?> example</h3><p><?php echo esc_html($context['example']); ?></p></div>
|
||||
<span class="mlms-lesson-path-status">Complete</span>
|
||||
</li>
|
||||
<li class="mlms-lesson-path-task is-current">
|
||||
<span class="mlms-lesson-path-marker" aria-hidden="true">3</span>
|
||||
<div><h3>3. Map the prompt and review loop</h3><p>Connect source inputs, AI drafting, human review, and the final handoff.</p></div>
|
||||
<span class="mlms-lesson-path-status">In progress</span>
|
||||
</li>
|
||||
<li class="mlms-lesson-path-task is-current" id="mlms-lesson-task-practice">
|
||||
<span class="mlms-lesson-path-marker" aria-hidden="true">4</span>
|
||||
<div><h3>4. Prepare your mini build task</h3><p>Choose one real work process and define the input, output, owner, and review checklist.</p></div>
|
||||
<span class="mlms-lesson-path-status">Task</span>
|
||||
</li>
|
||||
<li class="mlms-lesson-path-task is-quiz">
|
||||
<span class="mlms-lesson-path-marker" aria-hidden="true">5</span>
|
||||
<div><h3>5. Quiz checkpoint</h3><p>This is the last uncompleted task. Start the quiz when you are ready to check understanding on a separate page.</p></div>
|
||||
<a class="mlms-btn mlms-btn-primary" href="<?php echo esc_url($quiz_url); ?>" data-mlms-open-quiz>Start Quiz</a>
|
||||
</li>
|
||||
</ol>
|
||||
</article>
|
||||
|
||||
<div class="mlms-lesson-content-grid" aria-label="Lesson task details">
|
||||
<article class="mlms-lesson-task-card">
|
||||
<p class="mlms-kicker">Lesson 1</p>
|
||||
<h3>Source inputs</h3>
|
||||
<p>Start with <?php echo esc_html($context['source']); ?>. Good inputs make the AI output easier to trust and review.</p>
|
||||
</article>
|
||||
<article class="mlms-lesson-task-card">
|
||||
<p class="mlms-kicker">Lesson 2</p>
|
||||
<h3>Prompt structure</h3>
|
||||
<p>Ask AI for structure, assumptions, a first draft, and clear gaps instead of asking for a finished answer immediately.</p>
|
||||
</article>
|
||||
<article class="mlms-lesson-task-card">
|
||||
<p class="mlms-kicker">Lesson 3</p>
|
||||
<h3>Human review</h3>
|
||||
<ul>
|
||||
<li>Check accuracy against the source.</li>
|
||||
<li>Flag risks, tone issues, and missing context.</li>
|
||||
<li>Decide what needs human approval before sharing.</li>
|
||||
</ul>
|
||||
</article>
|
||||
<article class="mlms-lesson-task-card">
|
||||
<p class="mlms-kicker">Lesson 4</p>
|
||||
<h3>Handoff</h3>
|
||||
<p>Your finished lesson task is <?php echo esc_html($context['handoff']); ?>. After the quiz, use the build section to package it as evidence.</p>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
function matthew_lms_mvp_render_course_quiz_component(): string {
|
||||
ob_start();
|
||||
?>
|
||||
@ -1893,15 +2073,9 @@ add_shortcode('matthew_user_profile', function () {
|
||||
<div>
|
||||
<p class="mlms-kicker">Profile</p>
|
||||
<h1 class="mlms-h2">Your WAX profile and skill proof.</h1>
|
||||
<p class="mlms-section-copy">This page is now profile-only: profile header, five-node skill indicator, course progress, portfolio artifacts, and external skills feed.</p>
|
||||
</div>
|
||||
<div class="mlms-profile-status">
|
||||
<span class="mlms-share-chip">Profile layer</span>
|
||||
<span class="mlms-pill">Course dashboard separated</span>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo matthew_lms_mvp_profile_notice(); ?>
|
||||
<div class="mlms-profile-proof-heading"><div><p class="mlms-kicker">Profile header</p><h2>Credential evidence and course progress in one profile view.</h2><p>Use the course progress card to jump into the separate course dashboard.</p></div><span class="mlms-pill">Profile Header · Skills · Progress</span></div>
|
||||
<div class="mlms-profile-dashboard">
|
||||
<article class="mlms-credential-card" aria-label="WAX profile header credential card">
|
||||
<div class="mlms-credential-top">
|
||||
@ -1977,9 +2151,9 @@ add_shortcode('matthew_user_profile', function () {
|
||||
<span class="mlms-pill">Showcase-ready</span>
|
||||
</div>
|
||||
<div class="mlms-portfolio-grid">
|
||||
<article class="mlms-portfolio-card"><h4>AI Brief Builder</h4><p>Turns messy campaign notes into structured briefs, acceptance criteria, and review prompts.</p><div class="mlms-tool-tags"><span>ChatGPT</span><span>Sheets</span><span>Notion</span></div><a class="mlms-portfolio-link" href="#external-skills">Attach proof →</a></article>
|
||||
<article class="mlms-portfolio-card"><h4>Persona Synthesizer</h4><p>Combines research snippets into reusable buyer personas with documented assumptions.</p><div class="mlms-tool-tags"><span>Claude</span><span>Docs</span><span>Perplexity</span></div><a class="mlms-portfolio-link" href="#external-skills">Attach proof →</a></article>
|
||||
<article class="mlms-portfolio-card"><h4>Weekly Ops Agent</h4><p>Automates recurring updates, flags blockers, and drafts stakeholder-ready summaries.</p><div class="mlms-tool-tags"><span>Zapier</span><span>Gemini</span><span>Slack</span></div><a class="mlms-portfolio-link" href="#external-skills">Attach proof →</a></article>
|
||||
<article class="mlms-portfolio-card" data-proof-card="AI Brief Builder"><h4>AI Brief Builder</h4><p>Turns messy campaign notes into structured briefs, acceptance criteria, and review prompts.</p><div class="mlms-tool-tags"><span>ChatGPT</span><span>Sheets</span><span>Notion</span></div><a class="mlms-portfolio-link" href="#" data-proof-trigger data-artifact="AI Brief Builder">Attach proof →</a></article>
|
||||
<article class="mlms-portfolio-card" data-proof-card="Persona Synthesizer"><h4>Persona Synthesizer</h4><p>Combines research snippets into reusable buyer personas with documented assumptions.</p><div class="mlms-tool-tags"><span>Claude</span><span>Docs</span><span>Perplexity</span></div><a class="mlms-portfolio-link" href="#" data-proof-trigger data-artifact="Persona Synthesizer">Attach proof →</a></article>
|
||||
<article class="mlms-portfolio-card" data-proof-card="Weekly Ops Agent"><h4>Weekly Ops Agent</h4><p>Automates recurring updates, flags blockers, and drafts stakeholder-ready summaries.</p><div class="mlms-tool-tags"><span>Zapier</span><span>Gemini</span><span>Slack</span></div><a class="mlms-portfolio-link" href="#" data-proof-trigger data-artifact="Weekly Ops Agent">Attach proof →</a></article>
|
||||
</div>
|
||||
</article>
|
||||
</div></section>
|
||||
@ -2011,6 +2185,30 @@ add_shortcode('matthew_user_profile', function () {
|
||||
</div>
|
||||
</article>
|
||||
</div></section>
|
||||
|
||||
|
||||
<div class="mlms-proof-modal" id="mlms-proof-modal" aria-hidden="true">
|
||||
<div class="mlms-proof-backdrop" data-proof-close></div>
|
||||
<div class="mlms-proof-dialog" role="dialog" aria-modal="true" aria-labelledby="mlms-proof-title">
|
||||
<div class="mlms-proof-head">
|
||||
<div><p class="mlms-kicker">Attach proof</p><h3 id="mlms-proof-title">Add artifact evidence</h3><p id="mlms-proof-copy">Link a public source, upload a local reference, or add notes that explain what this artifact proves.</p></div>
|
||||
<button class="mlms-proof-close" type="button" aria-label="Close proof modal" data-proof-close>×</button>
|
||||
</div>
|
||||
<form class="mlms-proof-form" data-proof-form novalidate>
|
||||
<input type="hidden" name="artifact" id="mlms-proof-artifact" value="">
|
||||
<div class="mlms-proof-grid">
|
||||
<div class="mlms-field"><label for="mlms-proof-type">Proof type</label><select id="mlms-proof-type" name="proof_type" required><option value="github">GitHub / repo</option><option value="doc">Document / case study</option><option value="automation">Automation run</option><option value="community">Community proof</option><option value="ai-platform">AI platform artifact</option></select></div>
|
||||
<div class="mlms-field"><label for="mlms-proof-url">Public proof URL</label><input id="mlms-proof-url" name="proof_url" type="url" placeholder="https://github.com/yourname/project" required></div>
|
||||
<div class="mlms-field full"><label for="mlms-proof-notes">Evidence notes</label><textarea id="mlms-proof-notes" name="proof_notes" placeholder="What did you build, what tools did you use, and what result does this prove?" required></textarea></div>
|
||||
<div class="mlms-field full"><label for="mlms-proof-file">Optional local reference</label><input class="mlms-proof-file" id="mlms-proof-file" name="proof_file" type="file" accept="image/*,.pdf,.txt,.md,.doc,.docx"></div>
|
||||
</div>
|
||||
<div class="mlms-proof-actions">
|
||||
<p class="mlms-proof-status" data-proof-status aria-live="polite"></p>
|
||||
<div class="mlms-actions"><button class="mlms-btn mlms-btn-secondary" type="button" data-proof-close>Cancel</button><button class="mlms-btn mlms-btn-primary" type="submit">Save proof →</button></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user