<!-- strike>(full-width)</strike><br / --><div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVjObMDTLl297cJpKmOd56uO-YPxcq47rPIDIwFeQzdy8jpEEW_vOuvtwiyoRCdlarJkLxlJZwyhlk4RYsUlwLLFWYbDEm0F-ZBy1pJ60SxdUfMdOUWZy0Q4YRDPYgMobFb0xuhWL29rdq5aLfABkG4Cy11f2yOfDkKfbbxbsDBuLxkhZuWIURSp_3X70/s400/unnamed.webp" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="400" data-original-width="400" hidden="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVjObMDTLl297cJpKmOd56uO-YPxcq47rPIDIwFeQzdy8jpEEW_vOuvtwiyoRCdlarJkLxlJZwyhlk4RYsUlwLLFWYbDEm0F-ZBy1pJ60SxdUfMdOUWZy0Q4YRDPYgMobFb0xuhWL29rdq5aLfABkG4Cy11f2yOfDkKfbbxbsDBuLxkhZuWIURSp_3X70/s200/unnamed.webp" width="200" /></a></div>
<strike>(full-width)</strike><div id="solver-root"><style>#solver-root{font-family:'Segoe UI',system-ui,sans-serif;color:#e0e0e0;display:flex;justify-content:center;padding:12px;min-height:0;background-image:radial-gradient(circle at 50% 20%,rgba(20,20,20,0.5) 0%,transparent 100%)}#solver-root *{box-sizing:border-box;margin:0;padding:0}#solver-root button{border:none;cursor:pointer;font-family:'Consolas','Courier New',monospace;user-select:none;-webkit-tap-highlight-color:transparent}#solver-root .app{display:flex;gap:0;max-width:900px;width:100%;border-radius:14px;overflow:hidden;box-shadow:0 0 50px rgba(0,255,170,0.05),0 20px 40px rgba(0,0,0,0.5);border:1px solid #2a2a2a;align-self:flex-start}#solver-root .calc-col{width:560px;min-width:560px;background:#111;padding:12px;display:flex;flex-direction:column;gap:7px;position:relative}#solver-root .top-bar{display:flex;justify-content:space-between;align-items:center;padding:0 2px}#solver-root .version{font-size:10px;color:#555;font-family:monospace;letter-spacing:1px}#solver-root .mem-led{width:8px;height:8px;border-radius:50%;background:#222;box-shadow:inset 0 1px 2px rgba(0,0,0,0.8);transition:0.3s}#solver-root .mem-led.on{background:#ffcc00;box-shadow:0 0 8px #ffcc00,inset 0 -1px 2px rgba(0,0,0,0.3)}#solver-root .screen{background:#050508;border:2px solid #2a2a2a;border-radius:8px;box-shadow:inset 0 0 20px #000;overflow:hidden;position:relative;display:flex;flex-direction:column}#solver-root .screen::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:5;background:repeating-linear-gradient(0deg,transparent,transparent 3px,rgba(0,0,0,0.04) 3px,rgba(0,0,0,0.04) 4px)}#solver-root #plot-canvas{display:none;width:100%;height:230px;cursor:crosshair;border-bottom:1px solid #1a1a1a}#solver-root #steps-box{display:none;background:#080810;color:#00ffaa;padding:8px 10px;border-bottom:1px solid #1a1a1a;font-family:'Courier New',monospace;font-size:12px;max-height:110px;overflow-y:auto}#solver-root #steps-box::-webkit-scrollbar{width:4px}#solver-root #steps-box::-webkit-scrollbar-thumb{background:#333;border-radius:2px}#solver-root .step{border-bottom:1px solid #151515;padding:3px 0;white-space:pre-wrap;word-break:break-all}#solver-root .step-t{color:#55efc4;font-weight:700}#solver-root #math-view{display:none;background:#fff;color:#000;padding:16px;flex-direction:column;align-items:center;gap:6px;border-bottom:2px solid #00ffaa;min-height:30px;position:relative}#solver-root .rpt-label{font-family:'Courier New',monospace;font-weight:700;color:#666;font-size:10px;margin:3px 0;border-bottom:1px dashed #ccc;width:100%;text-align:center;text-transform:uppercase;letter-spacing:2px}#solver-root .wmark{position:absolute;bottom:2px;right:6px;font-size:8px;color:#ccc}#solver-root .result{background:#000;color:#00ffaa;padding:10px 14px;font-family:'Courier New',monospace;font-size:18px;text-align:right;height:46px;display:flex;align-items:center;justify-content:flex-end;border-top:1px solid #1a1a1a;box-shadow:inset 0 0 10px rgba(0,255,170,0.12);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#solver-root .result.flash{animation:solvrf 0.3s ease-out}@keyframes solvrf{0%{color:#fff;text-shadow:0 0 10px #00ffaa}100%{color:#00ffaa;text-shadow:none}}#solver-root math-field{--font-family:'Courier New',monospace;--background-color:#000;--text-color:#fff;--caret-color:#00ffaa;--selection-background-color:#333;--border-color:#333;--border-radius:8px;background:#000;color:#fff;border:1px solid #333;font-size:20px;padding:7px 10px;width:100%;box-shadow:inset 0 2px 5px rgba(0,0,0,0.5);border-radius:8px;outline:none;display:block}#solver-root math-field:focus-within{border-color:#00ffaa;box-shadow:inset 0 2px 5px rgba(0,0,0,0.5),0 0 8px rgba(0,255,170,0.12)}#solver-root .tabs{display:flex;gap:3px}#solver-root .tab{flex:1;padding:4px 0;text-align:center;font-size:10px;font-weight:700;font-family:monospace;letter-spacing:1px;border-radius:4px;background:#0d0d0d;color:#555;transition:0.15s}#solver-root .tab:hover{color:#999}#solver-root .tab.on{color:#00ffaa;background:rgba(0,255,170,0.12)}#solver-root .tab-content{display:none}#solver-root .tab-content.on{display:flex;flex-direction:column;gap:3px}#solver-root .num-row{display:grid;grid-template-columns:repeat(6,1fr);gap:3px}#solver-root .extra-row{display:grid;grid-template-columns:repeat(6,1fr);gap:3px}#solver-root .action-bar{display:grid;grid-template-columns:repeat(5,1fr);gap:3px}#solver-root .sep-line{height:1px;background:#1a1a1a;margin:2px 0}#solver-root button:not(.r-tab):not(.menu button):not(.hist-foot button):not(.theme-rst):not(.hist-print-btn):not(.diag-row){padding:10px 2px;font-size:12px;border-radius:4px;transition:0.08s;font-weight:700;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 0 rgba(0,0,0,0.3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#solver-root button:not(.r-tab):not(.menu button):not(.hist-foot button):not(.theme-rst):not(.hist-print-btn):not(.diag-row):active{transform:translateY(2px);box-shadow:none;filter:brightness(0.8)}#solver-root button:not(.r-tab):not(.menu button):not(.hist-foot button):not(.theme-rst):not(.hist-print-btn):not(.diag-row):hover{filter:brightness(1.2)}#solver-root .num-btn{background:var(--c-num,#1a1a2a);color:var(--c-num-fg,#ddd)}#solver-root .op{background:var(--c-op,#1e1e1e);color:var(--c-op-fg,#aaa)}#solver-root .sci{background:var(--c-fn,#14142a);color:var(--c-fn-fg,#a29bfe);border:1px solid rgba(255,255,255,0.05)}#solver-root .math-b{background:var(--c-fn,#14142a);color:var(--c-math-fg,#81ecec);border:1px solid rgba(255,255,255,0.05)}#solver-root .calc-btn{background:var(--c-eq,#005f8a);color:var(--c-eq-fg,#74b9ff)}#solver-root .solve{background:var(--c-solve,#005a00);color:var(--c-solve-fg,#55efc4);border:1px solid rgba(255,255,255,0.05)}#solver-root .clr{background:var(--c-clr,#5a0000);color:var(--c-clr-fg,#ff6b6b)}#solver-root .plot-b{background:var(--c-plot,#2a0030);color:var(--c-plot-fg,#fd79a8);border:1px solid rgba(255,255,255,0.05)}#solver-root .mem-b{background:var(--c-mem,#4a4a2d);color:var(--c-mem-fg,#ffffaa);border:1px solid rgba(255,255,255,0.05)}#solver-root .act-btn{background:var(--c-cmd,#1a1a2a);color:var(--c-cmd-fg,#777)}#solver-root .right-panel{width:320px;min-width:280px;background:#0a0a0a;border-left:1px solid #2a2a2a;display:flex;flex-direction:column;overflow:hidden}#solver-root .right-tabs{display:flex;border-bottom:1px solid #2a2a2a;background:#0d0d0d;flex-shrink:0}#solver-root .r-tab{flex:1;padding:9px 0;text-align:center;font-size:10px;font-weight:700;font-family:monospace;letter-spacing:1px;background:transparent;color:#555;border:none;border-bottom:2px solid transparent;transition:0.15s}#solver-root .r-tab:hover{color:#aaa}#solver-root .r-tab.on{color:#00ffaa;border-bottom-color:#00ffaa;background:#080808}#solver-root .r-tab-body{flex:1;overflow:hidden;position:relative}#solver-root .r-tab-content{display:none;position:absolute;inset:0;overflow-y:auto;padding:10px;font-size:13px;line-height:1.6}#solver-root .r-tab-content.on{display:block}#solver-root .r-tab-content::-webkit-scrollbar{width:5px}#solver-root .r-tab-content::-webkit-scrollbar-track{background:#0a0a0a}#solver-root .r-tab-content::-webkit-scrollbar-thumb{background:#333;border-radius:3px}#solver-root .r-tab-content::-webkit-scrollbar-thumb:hover{background:#555}#solver-root .hist-item{padding:8px;border-radius:5px;cursor:pointer;margin-bottom:4px;border:1px solid transparent;transition:0.15s;background:#111;position:relative}#solver-root .hist-item:hover{background:#1a1a2e;border-color:#2a2a40}#solver-root .hist-expr{font-size:11px;color:#666;font-family:'Courier New',monospace;word-break:break-all;margin-bottom:2px;padding-right:42px}#solver-root .hist-res{font-size:13px;color:#00ffaa;font-family:'Courier New',monospace;word-break:break-all}#solver-root .hist-time{font-size:9px;color:#444;font-family:monospace;margin-top:2px}#solver-root .hist-empty{color:#444;text-align:center;padding:40px 10px;font-size:12px}#solver-root .hist-foot{padding:6px 10px;flex-shrink:0;border-top:1px solid #2a2a2a}#solver-root .hist-foot button{width:100%;padding:6px;font-size:10px;border-radius:4px;background:var(--c-clr,#5a0000);color:var(--c-clr-fg,#ff6b6b);font-weight:700}#solver-root .hist-print-btn{position:absolute;top:8px;right:6px;width:30px;height:30px;border-radius:4px;background:rgba(255,255,255,0.04);color:#555;font-size:14px;font-weight:400;display:flex;align-items:center;justify-content:center;box-shadow:none;padding:0;transition:0.15s;z-index:2;line-height:1}#solver-root .hist-print-btn:hover{background:rgba(0,255,170,0.15);color:#00ffaa;filter:none}#solver-root .hist-print-btn:active{transform:none;filter:none}#solver-root .hist-print-btn svg{width:14px;height:14px;fill:currentColor}/* DIAGNOSTIC IN HISTORY */#solver-root .diag-box{margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid #1a1a1a}#solver-root .diag-header{font-size:10px;font-family:monospace;letter-spacing:1px;margin-bottom:4px;padding-bottom:3px;border-bottom:1px solid #222}#solver-root .diag-row{font-size:10px;font-family:monospace;padding:2px 0;border:none;background:none;box-shadow:none;color:#888;justify-content:flex-start;padding-left:4px}#solver-root .diag-row:active{transform:none;filter:none}#solver-root .diag-row:hover{filter:none;background:none;color:#888}#solver-root .diag-ok{color:#55efc4}#solver-root .diag-err{color:#ff4757}#solver-root .diag-warn{color:#ffeaa7}#solver-root .diag-load{color:#ffeaa7}/* HELP */#solver-root .r-tab-content h3{color:#00ffaa;font-size:12px;font-family:monospace;margin:14px 0 5px;padding-bottom:3px;border-bottom:1px solid #1a1a1a;letter-spacing:1px}#solver-root .r-tab-content h3:first-child{margin-top:0}#solver-root .r-tab-content p{color:#888;margin-bottom:6px;font-size:11px}#solver-root .r-tab-content code{background:#1a1a2e;padding:1px 5px;border-radius:3px;color:#a29bfe;font-size:10px;font-family:'Courier New',monospace}#solver-root .ex-grid{display:flex;flex-wrap:wrap;gap:3px;margin-bottom:8px}#solver-root .ex-btn{background:#12121e!important;color:#55efc4!important;border:1px solid #1a3a1a!important;box-shadow:none!important;padding:5px 8px!important;font-size:10px!important;border-radius:3px!important;text-align:left!important;justify-content:flex-start!important;width:calc(50% - 4px)!important;cursor:pointer!important}#solver-root .ex-btn:hover{background:#1a2a1a!important}#solver-root .ex-btn:active{transform:none!important;filter:brightness(0.9)!important}#solver-root .plot-ex{background:#1e0020!important;color:#fd79a8!important;border-color:#3a0040!important}#solver-root .plot-ex:hover{background:#2a0030!important}/* THEME */#solver-root .theme-grid{display:grid;grid-template-columns:1fr 40px;gap:6px;align-items:center;margin-bottom:12px}#solver-root .theme-grid label{font-size:11px;color:#888;text-align:right;padding-right:6px}#solver-root .theme-grid input[type="color"]{width:36px;height:24px;border:1px solid #444;border-radius:4px;background:transparent;cursor:pointer;padding:0}#solver-root .theme-grid input[type="color"]::-webkit-color-swatch-wrapper{padding:2px}#solver-root .theme-grid input[type="color"]::-webkit-color-swatch{border:none;border-radius:2px}#solver-root .theme-sep{height:1px;background:#222;margin:10px 0}#solver-root .theme-rst{width:100%;padding:8px;font-size:11px;border-radius:4px;background:#1a1a2a;color:#888;font-weight:700;box-shadow:0 2px 0 #111}#solver-root .theme-rst:hover{color:#fff;filter:brightness(1.2)}/* DEBUG */#solver-root .dbg-section{background:#080810;border:1px solid #1a1a1a;border-radius:5px;padding:8px;margin-bottom:8px}#solver-root .dbg-title{font-family:monospace;font-size:10px;color:#ffcc00;font-weight:700;margin-bottom:5px;letter-spacing:1px}#solver-root .dbg-row-d{display:flex;justify-content:space-between;padding:2px 0;border-bottom:1px solid #0f0f0f;font-size:10px;gap:8px}#solver-root .dbg-label{color:#666;flex-shrink:0}#solver-root .dbg-val{color:#aaa;font-family:monospace;text-align:right;word-break:break-all}#solver-root .dbg-val.ok{color:#55efc4}#solver-root .dbg-val.err{color:#ff4757}#solver-root .dbg-val.warn{color:#ffeaa7}/* MENU & TOAST */#solver-root .menu{display:none;position:absolute;bottom:52px;right:12px;background:#181818;border:1px solid #444;border-radius:8px;padding:4px;z-index:60;min-width:155px;box-shadow:0 8px 24px rgba(0,0,0,0.7);flex-direction:column;gap:1px}#solver-root .menu.show{display:flex}#solver-root .menu button{padding:6px 10px;font-size:10px;border-radius:3px;background:transparent;box-shadow:none;color:#aaa;justify-content:flex-start;gap:5px;display:flex}#solver-root .menu button:hover{background:#2a2a2a;color:#fff}#solver-root .menu .sep{height:1px;background:#333;margin:3px 0}#solver-root .toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(80px);background:#181818;color:#00ffaa;padding:8px 22px;border-radius:8px;font-size:12px;font-family:monospace;z-index:999999;border:1px solid #333;transition:transform 0.3s ease,opacity 0.3s;opacity:0;pointer-events:none;box-shadow:0 4px 20px rgba(0,0,0,0.5)}#solver-root .toast.show{transform:translateX(-50%) translateY(0);opacity:1}@media print{body > *:not(#solv-print-zone) { display: none !important; }#solver-root { display: none !important; }#solv-print-zone { display: block !important; position: static !important; width: 100% !important; background: #fff !important; color: #000 !important; font-family: 'Courier New', monospace !important; padding: 24px !important; font-size: 12px !important; line-height: 1.8 !important; }#solv-print-zone .sp-header { text-align: center !important; border-bottom: 2px solid #000 !important; padding-bottom: 10px !important; margin-bottom: 16px !important; font-size: 14px !important; font-weight: bold !important; letter-spacing: 2px !important; }#solv-print-zone .sp-item { margin-bottom: 14px !important; padding-bottom: 10px !important; border-bottom: 1px dashed #ccc !important; page-break-inside: avoid !important; }#solv-print-zone .sp-label { font-size: 10px !important; color: #888 !important; text-transform: uppercase !important; letter-spacing: 1px !important; margin-bottom: 2px !important; }#solv-print-zone .sp-expr { font-size: 13px !important; color: #000 !important; word-break: break-all !important; margin-bottom: 4px !important; }#solv-print-zone .sp-res { font-size: 14px !important; color: #005a00 !important; font-weight: bold !important; word-break: break-all !important; }#solv-print-zone .sp-time { font-size: 9px !important; color: #aaa !important; margin-top: 2px !important; }#solv-print-zone .sp-graph { margin-top: 12px !important; text-align: center !important; page-break-inside: avoid !important; }#solv-print-zone .sp-graph img { max-width: 100% !important; border: 1px solid #ddd !important; }#solv-print-zone .sp-graph-title { font-size: 10px !important; color: #888 !important; margin-bottom: 6px !important; text-transform: uppercase !important; }}@media(max-width:900px){#solver-root .app{flex-direction:column;max-width:560px}#solver-root .calc-col{width:100%;min-width:0}#solver-root .right-panel{width:100%;min-width:0;max-height:400px;border-left:none;border-top:1px solid #2a2a2a}}@media(max-width:560px){#solver-root{padding:4px}#solver-root .calc-col{padding:6px}#solver-root button:not(.r-tab):not(.menu button):not(.hist-foot button):not(.theme-rst):not(.hist-print-btn):not(.diag-row){padding:8px 1px;font-size:11px}#solver-root math-field{font-size:16px;padding:5px 8px}#solver-root .result{font-size:15px;height:38px;padding:6px 8px}#solver-root #plot-canvas{height:170px}#solver-root .right-panel{width:100%;min-width:0}}@media(prefers-reduced-motion:reduce){#solver-root *{animation:none!important;transition:none!important}}</style>
<div class="app"><div class="calc-col"> <div class="top-bar"><span class="version">SCIENTIFIC SOLVER V18.2</span><div class="mem-led" id="solvMemLed" title="Memory"></div></div> <div class="screen"><canvas id="plot-canvas"></canvas><div id="steps-box"></div><div id="math-view" class="math-view"></div><div id="result" class="result"></div></div> <div><math-field id="solvInput" virtual-keyboard-mode="manual" placeholder="Type expression..."></math-field></div> <div class="tabs"><button class="tab on" data-tab="basic">NUM</button><button class="tab" data-tab="science">SCI</button><button class="tab" data-tab="calculus">CALC</button></div> <div id="tab-basic" class="tab-content on"> <div class="num-row"><button class="num-btn" onclick="solvIns('7')">7</button><button class="num-btn" onclick="solvIns('8')">8</button><button class="num-btn" onclick="solvIns('9')">9</button><button class="op" onclick="solvIns('/')">÷</button><button class="op" onclick="solvIns('(')">(</button><button class="op" onclick="solvIns(')')">)</button></div> <div class="num-row"><button class="num-btn" onclick="solvIns('4')">4</button><button class="num-btn" onclick="solvIns('5')">5</button><button class="num-btn" onclick="solvIns('6')">6</button><button class="op" onclick="solvIns('*')">×</button><button class="op" onclick="solvIns('-')">−</button><button class="calc-btn" onclick="solvInsAns()">Ans</button></div> <div class="num-row"><button class="num-btn" onclick="solvIns('1')">1</button><button class="num-btn" onclick="solvIns('2')">2</button><button class="num-btn" onclick="solvIns('3')">3</button><button class="op" onclick="solvIns('+')">+</button><button class="sci" onclick="solvIns('%')">%</button><button class="mem-b" onclick="solvMemAdd()">M+</button></div> <div class="num-row"><button class="num-btn" onclick="solvIns('0')">0</button><button class="num-btn" onclick="solvIns('.')">.</button><button class="sci" onclick="solvIns('\\pi')">π</button><button class="sci" onclick="solvIns('e')">e</button><button class="mem-b" onclick="solvMemSub()">M−</button><button class="mem-b" onclick="solvMemRecall()">MR</button></div> <div class="action-bar"><button class="clr" onclick="solvClear()">AC</button><button class="clr" onclick="solvDel()">DEL</button><button class="calc-btn" onclick="solvCalc()">=</button><button class="plot-b" onclick="solvPlot()">PLOT</button><button class="act-btn" onclick="solvMenu()">MENU</button></div> </div> <div id="tab-science" class="tab-content"> <div class="extra-row"><button class="sci" onclick="solvIns('\\sin(\\placeholder)')">sin</button><button class="sci" onclick="solvIns('\\cos(\\placeholder)')">cos</button><button class="sci" onclick="solvIns('\\tan(\\placeholder)')">tan</button><button class="sci" onclick="solvIns('\\sqrt{\\placeholder}')">√</button><button class="sci" onclick="solvIns('^{\\placeholder}')">xʸ</button><button class="sci" onclick="solvIns('^2')">x²</button></div> <div class="extra-row"><button class="sci" onclick="solvIns('\\ln(\\placeholder)')">ln</button><button class="sci" onclick="solvIns('\\log(\\placeholder)')">log</button><button class="sci" onclick="solvIns('\\exp(\\placeholder)')">eˣ</button><button class="sci" onclick="solvIns('\\arcsin(\\placeholder)')">asin</button><button class="sci" onclick="solvIns('\\arccos(\\placeholder)')">acos</button><button class="sci" onclick="solvIns('\\arctan(\\placeholder)')">atan</button></div> <div class="extra-row"><button class="sci" onclick="solvIns('\\frac{1}{\\placeholder}')">1/x</button><button class="sci" onclick="solvIns('10^{\\placeholder}')">10ˣ</button><button class="sci" onclick="solvIns('^3')">x³</button><button class="sci" onclick="solvIns('\\left|\\placeholder\\right|')">|x|</button><button class="sci" onclick="solvIns('\\placeholder!')">n!</button><button class="sci" onclick="solvIns('\\bmod ')">mod</button></div> <div class="sep-line"></div> <div class="num-row"><button class="num-btn" onclick="solvIns('7')">7</button><button class="num-btn" onclick="solvIns('8')">8</button><button class="num-btn" onclick="solvIns('9')">9</button><button class="op" onclick="solvIns('/')">÷</button><button class="op" onclick="solvIns('(')">(</button><button class="op" onclick="solvIns(')')">)</button></div> <div class="num-row"><button class="num-btn" onclick="solvIns('4')">4</button><button class="num-btn" onclick="solvIns('5')">5</button><button class="num-btn" onclick="solvIns('6')">6</button><button class="op" onclick="solvIns('*')">×</button><button class="op" onclick="solvIns('-')">−</button><button class="calc-btn" onclick="solvInsAns()">Ans</button></div> <div class="num-row"><button class="num-btn" onclick="solvIns('1')">1</button><button class="num-btn" onclick="solvIns('2')">2</button><button class="num-btn" onclick="solvIns('3')">3</button><button class="op" onclick="solvIns('+')">+</button><button class="sci" onclick="solvIns('%')">%</button><button class="mem-b" onclick="solvMemAdd()">M+</button></div> <div class="num-row"><button class="num-btn" onclick="solvIns('0')">0</button><button class="num-btn" onclick="solvIns('.')">.</button><button class="sci" onclick="solvIns('\\pi')">π</button><button class="sci" onclick="solvIns('e')">e</button><button class="mem-b" onclick="solvMemSub()">M−</button><button class="mem-b" onclick="solvMemRecall()">MR</button></div> <div class="action-bar"><button class="clr" onclick="solvClear()">AC</button><button class="clr" onclick="solvDel()">DEL</button><button class="calc-btn" onclick="solvCalc()">=</button><button class="plot-b" onclick="solvPlot()">PLOT</button><button class="act-btn" onclick="solvMenu()">MENU</button></div> </div> <div id="tab-calculus" class="tab-content"> <div class="extra-row"><button class="math-b" onclick="solvDeriv()">d/dx</button><button class="math-b" onclick="solvInteg()">∫dx</button><button class="math-b" onclick="solvSimp()">SIMP</button><button class="math-b" onclick="solvFact()">FACT</button><button class="math-b" onclick="solvExpd()">EXPAND</button><button class="math-b" onclick="solvPart('y')">∂/∂y</button></div> <div class="extra-row"><button class="sci" onclick="solvIns('x')">x</button><button class="sci" onclick="solvIns('y')">y</button><button class="sci" onclick="solvIns('z')">z</button><button class="sci" onclick="solvIns('t')">t</button><button class="sci" onclick="solvIns('a')">a</button><button class="sci" onclick="solvIns('b')">b</button></div> <div class="extra-row"><button class="solve" onclick="solvSolve()">SOLVE</button><button class="op" onclick="solvIns('=')">=</button><button class="op" onclick="solvIns(',')">,</button><button class="sci" onclick="solvIns('_{0}')">₀</button><button class="sci" onclick="solvIns('\\infty')">∞</button><button class="op" onclick="solvIns('\\rightarrow')">→</button></div> <div class="sep-line"></div> <div class="num-row"><button class="num-btn" onclick="solvIns('7')">7</button><button class="num-btn" onclick="solvIns('8')">8</button><button class="num-btn" onclick="solvIns('9')">9</button><button class="op" onclick="solvIns('/')">÷</button><button class="op" onclick="solvIns('(')">(</button><button class="op" onclick="solvIns(')')">)</button></div> <div class="num-row"><button class="num-btn" onclick="solvIns('4')">4</button><button class="num-btn" onclick="solvIns('5')">5</button><button class="num-btn" onclick="solvIns('6')">6</button><button class="op" onclick="solvIns('*')">×</button><button class="op" onclick="solvIns('-')">−</button><button class="calc-btn" onclick="solvInsAns()">Ans</button></div> <div class="num-row"><button class="num-btn" onclick="solvIns('1')">1</button><button class="num-btn" onclick="solvIns('2')">2</button><button class="num-btn" onclick="solvIns('3')">3</button><button class="op" onclick="solvIns('+')">+</button><button class="sci" onclick="solvIns('%')">%</button><button class="mem-b" onclick="solvMemAdd()">M+</button></div> <div class="num-row"><button class="num-btn" onclick="solvIns('0')">0</button><button class="num-btn" onclick="solvIns('.')">.</button><button class="sci" onclick="solvIns('\\pi')">π</button><button class="sci" onclick="solvIns('e')">e</button><button class="mem-b" onclick="solvMemSub()">M−</button><button class="mem-b" onclick="solvMemRecall()">MR</button></div> <div class="action-bar"><button class="clr" onclick="solvClear()">AC</button><button class="clr" onclick="solvDel()">DEL</button><button class="calc-btn" onclick="solvCalc()">=</button><button class="plot-b" onclick="solvPlot()">PLOT</button><button class="act-btn" onclick="solvMenu()">MENU</button></div> </div> <div class="menu" id="solvMenuEl"> <button onclick="solvReport()">Report</button><button onclick="solvExport()">Export PNG</button><button onclick="solvCopy()">Copy Result</button> <button onclick="solvFmt()">Format: <span id="solvFmtLbl">Auto</span></button> <div class="sep"></div> <button onclick="solvPrintScreen()">Print Screen + Graph</button><button onclick="solvPrintAllHist()">Print All History</button> <div class="sep"></div> <button onclick="solvTax(6)">Tax +6%</button><button onclick="solvTax(9)">Tax +9%</button><button onclick="solvTax(24)">Tax +24%</button> <div class="sep"></div> <button onclick="solvRTax(6)">Remove 6%</button><button onclick="solvRTax(9)">Remove 9%</button><button onclick="solvRTax(24)">Remove 24%</button> </div></div><div class="right-panel"> <div class="right-tabs"><button class="r-tab on" data-rtab="history">HISTORY</button><button class="r-tab" data-rtab="theme">THEME</button><button class="r-tab" data-rtab="help">HELP</button><button class="r-tab" data-rtab="debug">DEBUG</button></div> <div class="r-tab-body"> <div id="rtab-history" class="r-tab-content on"><div id="solvHistList"><div class="hist-empty">Initializing systems...</div></div></div> <div id="rtab-theme" class="r-tab-content"> <h3>Button Colors</h3> <div class="theme-grid"><label>Numbers (BG)</label><input type="color" id="t-num" value="#1a1a2a" onchange="solvSetTheme('--c-num',this.value)"><label>Numbers (Text)</label><input type="color" id="t-num-fg" value="#dddddd" onchange="solvSetTheme('--c-num-fg',this.value)"></div> <div class="theme-grid"><label>Operators (BG)</label><input type="color" id="t-op" value="#1e1e1e" onchange="solvSetTheme('--c-op',this.value)"><label>Operators (Text)</label><input type="color" id="t-op-fg" value="#aaaaaa" onchange="solvSetTheme('--c-op-fg',this.value)"></div> <div class="theme-grid"><label>Functions (BG)</label><input type="color" id="t-fn" value="#14142a" onchange="solvSetTheme('--c-fn',this.value)"><label>Functions (Text)</label><input type="color" id="t-fn-fg" value="#a29bfe" onchange="solvSetTheme('--c-fn-fg',this.value)"></div> <div class="theme-grid"><label>Calculus (Text)</label><input type="color" id="t-math-fg" value="#81ecec" onchange="solvSetTheme('--c-math-fg',this.value)"></div> <div class="theme-sep"></div><h3>Commands</h3> <div class="theme-grid"><label>Commands (BG)</label><input type="color" id="t-cmd" value="#1a1a2a" onchange="solvSetTheme('--c-cmd',this.value)"><label>Commands (Text)</label><input type="color" id="t-cmd-fg" value="#777777" onchange="solvSetTheme('--c-cmd-fg',this.value)"></div> <div class="theme-grid"><label>Memory (BG)</label><input type="color" id="t-mem" value="#4a4a2d" onchange="solvSetTheme('--c-mem',this.value)"><label>Memory (Text)</label><input type="color" id="t-mem-fg" value="#ffffaa" onchange="solvSetTheme('--c-mem-fg',this.value)"></div> <div class="theme-grid"><label>Plot (BG)</label><input type="color" id="t-plot" value="#2a0030" onchange="solvSetTheme('--c-plot',this.value)"><label>Plot (Text)</label><input type="color" id="t-plot-fg" value="#fd79a8" onchange="solvSetTheme('--c-plot-fg',this.value)"></div> <div class="theme-sep"></div><h3>Actions</h3> <div class="theme-grid"><label>Equals (BG)</label><input type="color" id="t-eq" value="#005f8a" onchange="solvSetTheme('--c-eq',this.value)"><label>Equals (Text)</label><input type="color" id="t-eq-fg" value="#74b9ff" onchange="solvSetTheme('--c-eq-fg',this.value)"></div> <div class="theme-grid"><label>Solve (BG)</label><input type="color" id="t-solve" value="#005a00" onchange="solvSetTheme('--c-solve',this.value)"><label>Solve (Text)</label><input type="color" id="t-solve-fg" value="#55efc4" onchange="solvSetTheme('--c-solve-fg',this.value)"></div> <div class="theme-grid"><label>Clear/Delete (BG)</label><input type="color" id="t-clr" value="#5a0000" onchange="solvSetTheme('--c-clr',this.value)"><label>Clear/Delete (Text)</label><input type="color" id="t-clr-fg" value="#ff6b6b" onchange="solvSetTheme('--c-clr-fg',this.value)"></div> <div class="theme-sep"></div><button class="theme-rst" onclick="solvResetTheme()">Reset to Default Colors</button> </div> <div id="rtab-help" class="r-tab-content"> <h3>Quick Start</h3><p>Type any expression and press <code>=</code> or <code>Enter</code>. For equations use <code>SOLVE</code>, for graphs use <code>PLOT</code>.</p> <h3>Plot Examples</h3><div class="ex-grid"> <button class="ex-btn plot-ex" onclick="solvLoadPlot('x^2')">x²</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('sin(x)')">sin(x)</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('cos(x)')">cos(x)</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('tan(x)')">tan(x)</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('1/x')">1/x</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('exp(x)')">eˣ</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('ln(x)')">ln(x)</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('sqrt(x)')">√x</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('x^3-3*x')">x³−3x</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('sin(x)/x')">sin(x)/x</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('x^2-4')">x²−4</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('sin(x^2)')">sin(x²)</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('2^x')">2ˣ</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('exp(-x^2)')">e^-x²</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('log(x^2+1)')">log(x²+1)</button><button class="ex-btn plot-ex" onclick="solvLoadPlot('abs(x)')">|x|</button> </div> <h3>Solve Examples</h3><div class="ex-grid"> <button class="ex-btn" onclick="solvLoadExpr('x^2-4=0')">x²−4=0</button><button class="ex-btn" onclick="solvLoadExpr('x^4-1=0')">x⁴−1=0</button><button class="ex-btn" onclick="solvLoadExpr('x^3-6*x^2+11*x-6=0')">Cubic</button><button class="ex-btn" onclick="solvLoadExpr('sin(x)=0.5')">sin(x)=0.5</button><button class="ex-btn" onclick="solvLoadExpr('exp(x)=5')">eˣ=5</button><button class="ex-btn" onclick="solvLoadExpr('2*x+3=7')">Linear</button><button class="ex-btn" onclick="solvLoadExpr('x+y=5, x-y=1')">2x2 System</button><button class="ex-btn" onclick="solvLoadExpr('x+y+z=6, x-y+2z=5, 2x+y-z=1')">3x3 System</button> </div> <h3>Calculus Examples</h3><div class="ex-grid"> <button class="ex-btn" onclick="solvLoadExpr('x^3+2*x^2-x')">then d/dx</button><button class="ex-btn" onclick="solvLoadExpr('sin(x)*cos(x)')">then integral</button><button class="ex-btn" onclick="solvLoadExpr('x^4-16')">then FACTOR</button><button class="ex-btn" onclick="solvLoadExpr('(x+1)^3')">then EXPAND</button> </div> <h3>Print / PDF</h3><p>Click <code>⎙</code> on any history item. MENU has Print Screen+Graph and Print All History. In print dialog choose Save as PDF.</p> <h3>Keyboard</h3><p><code>Enter</code> Calculate · <code>Esc</code> Clear · <code>Ans</code> Last answer</p> </div> <div id="rtab-debug" class="r-tab-content"> <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px"><span style="font-family:monospace;color:#ffcc00;font-size:11px;font-weight:700;letter-spacing:1px">DIAGNOSTICS</span><button class="act-btn" style="padding:3px 10px;font-size:9px;box-shadow:none" onclick="solvDebug()">RUN</button></div> <div id="solvDbgContent"><p style="color:#444;text-align:center;padding:30px 0;font-size:11px">Click RUN to start diagnostics</p></div> </div> </div> <div class="hist-foot" id="solvHistFoot" style="display:none"><button onclick="solvClearHist()">Clear History</button></div></div></div><div class="toast" id="solvToast"></div>
<script>(function(){/* ===== SCRIPT LOADER WITH LIVE DIAGNOSTIC ===== */var SCRIPTS=[ 'https://unpkg.com/mathlive', 'https://cdn.jsdelivr.net/npm/nerdamer@1.1.13/nerdamer.core.js', 'https://cdn.jsdelivr.net/npm/nerdamer@1.1.13/Algebra.js', 'https://cdn.jsdelivr.net/npm/nerdamer@1.1.13/Calculus.js', 'https://cdn.jsdelivr.net/npm/nerdamer@1.1.13/Solve.js'];var SNAMES=['MathLive','Nerdamer Core','Algebra','Calculus','Solve'];var loadErrors=0;var printSVG='<svg viewBox="0 0 24 24"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/></svg>';
function diagLine(msg,cls){ var el=document.getElementById('solvHistList'); if(!el)return; var d=document.createElement('div'); d.className='diag-row'; d.innerHTML='<span class="'+cls+'">'+msg+'</span>'; el.appendChild(d);}
function loadAll(i){ if(i>=SCRIPTS.length){ diagLine('All scripts processed ('+loadErrors+' errors)','diag-ok'); setTimeout(initSolver,50); return; } diagLine(SNAMES[i]+' loading... ('+(i+1)+'/'+SCRIPTS.length+')','diag-load'); var s=document.createElement('script'); s.src=SCRIPTS[i]; var t0=Date.now(); s.onload=function(){ var ms=Date.now()-t0; diagLine(SNAMES[i]+' loaded in '+ms+'ms','diag-ok'); loadAll(i+1); }; s.onerror=function(){ loadErrors++; diagLine(SNAMES[i]+' FAILED TO LOAD','diag-err'); loadAll(i+1); }; document.head.appendChild(s);}loadAll(0);
function initSolver(){function $(id){return document.getElementById(id)}var input=$('solvInput'),resultEl=$('result'),stepsBox=$('steps-box'),mathView=$('math-view');var canvas=$('plot-canvas'),memLed=$('solvMemLed'),menuEl=$('solvMenuEl');var histList=$('solvHistList'),histFoot=$('solvHistFoot'),toastEl=$('solvToast');var memory=0,lastAns=null,history=[],plotter=null,numFmt='auto',mjLoaded=false,h2cLoaded=false;var toastT;
/* ===== RUNTIME DIAGNOSTIC IN HISTORY ===== */function showRuntimeDiag(){ var checks=[ ['MathLive',typeof MathLive!=='undefined'], ['Nerdamer Core',typeof nerdamer!=='undefined'], ['Algebra Module',typeof nerdamer!=='undefined'&&typeof nerdamer('factor')!=='undefined'], ['Solve Module',typeof nerdamer!=='undefined'&&typeof nerdamer.solve==='function'], ['Calculus Module',typeof nerdamer!=='undefined'&&typeof nerdamer.integrate==='function'], ['MathLive Input',input&&typeof input.setValue==='function'], ['Canvas 2D',!!(canvas&&canvas.getContext)], ['Plotter Engine',true], ['localStorage',function(){try{localStorage.setItem('_t','1');localStorage.removeItem('_t');return true}catch(e){return false}}()] ]; var ok=0; checks.forEach(function(c){if(typeof c[1]==='function')c[1]=c[1]();if(c[1])ok++});
var box=document.createElement('div'); box.id='solvDiag'; box.className='diag-box'; var hdr=document.createElement('div'); hdr.className='diag-header'; hdr.style.color=ok===checks.length?'#55efc4':'#ff4757'; hdr.textContent=(ok===checks.length?'\u2713':'\u2717')+' SYSTEMS: '+ok+'/'+checks.length+(loadErrors?' ('+loadErrors+' load errors)':''); box.appendChild(hdr); checks.forEach(function(c){ var r=document.createElement('div'); r.className='diag-row'; var st=typeof c[1]==='function'?c[1]():c[1]; r.innerHTML='<span class="'+(st?'diag-ok':'diag-err')+'">\u2713\u2717</span> '+c[0]+(st?'':' <span class="diag-err">[MISSING]</span>'); r.innerHTML=r.innerHTML.replace('\u2713\u2717',st?'\u2713':'\u2717'); box.appendChild(r); }); return box;}
function renderHist(){ var el=document.getElementById('solvHistList'); var diag=document.getElementById('solvDiag'); el.innerHTML=''; if(diag)el.appendChild(diag); if(!history.length){ var em=document.createElement('div');em.className='hist-empty'; em.innerHTML='No calculations yet.<br>Type something and press ='; el.appendChild(em);histFoot.style.display='none';return; } histFoot.style.display='block'; history.forEach(function(h,idx){ var d=document.createElement('div');d.className='hist-item'; d.innerHTML='<div class="hist-expr">'+h.expr+'</div><div class="hist-res">'+h.res+'</div><div class="hist-time">'+h.time+'</div><button class="hist-print-btn" title="Print / Save PDF" onclick="event.stopPropagation();solvPrintItem('+idx+')">'+printSVG+'</button>'; d.onclick=function(){input.setValue(h.expr);input.focus();toast('Loaded')}; el.appendChild(d); });}
/* Replace loading lines with runtime diagnostic */var diagBox=showRuntimeDiag();histList.innerHTML='';histList.appendChild(diagBox);var em=document.createElement('div');em.className='hist-empty';em.innerHTML='No calculations yet.<br>Type something and press =';histList.appendChild(em);
function toast(m){toastEl.textContent=m;toastEl.classList.add('show');clearTimeout(toastT);toastT=setTimeout(function(){toastEl.classList.remove('show')},1800)}function ins(l){input.executeCommand(['insert',l]);input.focus()}function flash(){resultEl.classList.remove('flash');void resultEl.offsetWidth;resultEl.classList.add('flash')}function clearExtras(){mathView.style.display='none';mathView.innerHTML='';canvas.style.display='none';stepsBox.style.display='none';stepsBox.innerHTML='';if(plotter)plotter.stop()}function addStep(t,txt){stepsBox.style.display='block';var d=document.createElement('div');d.className='step';d.innerHTML='<span class="step-t">'+t+'</span> '+txt;stepsBox.appendChild(d);stepsBox.scrollTop=stepsBox.scrollHeight}function fmtNum(n){if(numFmt==='fixed')return n.toFixed(8);if(numFmt==='sci')return n.toExponential(6);if(Math.abs(n)>=1e10||(Math.abs(n)<1e-6&&n!==0))return n.toExponential(6);return n.toFixed(8).replace(/\.?0+$/,'')}function evalNum(e){try{return parseFloat(nerdamer(e).evaluate().text())}catch(x){return NaN}}function updMemLed(){memLed.classList.toggle('on',memory!==0)}function addHistory(e,r){history.unshift({expr:e,res:r,time:new Date().toLocaleTimeString()});if(history.length>100)history.pop();renderHist()}
/* ===== PLOTTER (rAF THROTTLED - FIXES FREEZE) ===== */function Plotter(c){this.c=c;this.ctx=c.getContext('2d');this.ox=0;this.oy=0;this.sx=50;this.sy=50;this.dragging=false;this.dragX=0;this.dragY=0;this.mouse=null;this.compiled=null;this.exprStr='';this.running=false;this.dpr=window.devicePixelRatio||1;this._raf=null;var self=this;c.addEventListener('wheel',function(e){e.preventDefault();self._zoom(e)},{passive:false});c.addEventListener('mousedown',function(e){self.dragging=true;self.dragX=e.offsetX;self.dragY=e.offsetY;c.style.cursor='grabbing'});c.addEventListener('mousemove',function(e){self.mouse={x:e.offsetX,y:e.offsetY};if(self.dragging)self._pan(e);self._draw()});c.addEventListener('mouseup',function(){self.dragging=false;c.style.cursor='crosshair'});c.addEventListener('mouseleave',function(){self.dragging=false;self.mouse=null;c.style.cursor='crosshair';self._draw()});c.addEventListener('dblclick',function(){self.ox=0;self.oy=0;self.sx=50;self.sy=50;self._draw()});var ld=0;c.addEventListener('touchstart',function(e){e.preventDefault();if(e.touches.length===1){self.dragging=true;self.dragX=e.touches[0].clientX;self.dragY=e.touches[0].clientY}if(e.touches.length===2)ld=Math.hypot(e.touches[1].clientX-e.touches[0].clientX,e.touches[1].clientY-e.touches[0].clientY)},{passive:false});c.addEventListener('touchmove',function(e){e.preventDefault();if(e.touches.length===1&&self.dragging){var dx=e.touches[0].clientX-self.dragX,dy=e.touches[0].clientY-self.dragY;self.ox-=dx/self.sx;self.oy+=dy/self.sy;self.dragX=e.touches[0].clientX;self.dragY=e.touches[0].clientY;self._draw()}if(e.touches.length===2){var d=Math.hypot(e.touches[1].clientX-e.touches[0].clientX,e.touches[1].clientY-e.touches[0].clientY);if(ld>0){var f=d/ld;self.sx=Math.max(2,Math.min(2000,self.sx*f));self.sy=self.sx;self._draw()}ld=d}},{passive:false});c.addEventListener('touchend',function(){self.dragging=false;ld=0})}/* rAF throttled draw - prevents freeze */Plotter.prototype._draw=function(){if(!this.running)return;if(this._raf)return;var self=this;this._raf=requestAnimationFrame(function(){self._raf=null;self._doDraw()})};Plotter.prototype._zoom=function(e){var f=e.deltaY>0?0.9:1.1;var w=this.c.width/this.dpr,h=this.c.height/this.dpr;var wp=this.s2w(e.offsetX,e.offsetY);this.sx=Math.max(2,Math.min(2000,this.sx*f));this.sy=this.sx;this.ox=wp.x-(e.offsetX-w/2)/this.sx;this.oy=wp.y+(e.offsetY-h/2)/this.sy;this._draw()};Plotter.prototype._pan=function(e){var dx=e.offsetX-this.dragX,dy=e.offsetY-this.dragY;this.ox-=dx/this.sx;this.oy+=dy/this.sy;this.dragX=e.offsetX;this.dragY=e.offsetY};Plotter.prototype.w2s=function(wx,wy){var w=this.c.width/this.dpr,h=this.c.height/this.dpr;return{x:w/2+(wx-this.ox)*this.sx,y:h/2-(wy-this.oy)*this.sy}};Plotter.prototype.s2w=function(sx,sy){var w=this.c.width/this.dpr,h=this.c.height/this.dpr;return{x:this.ox+(sx-w/2)/this.sx,y:this.oy-(sy-h/2)/this.sy}};Plotter.prototype.resize=function(){var r=this.c.parentElement.getBoundingClientRect();this.c.width=r.width*this.dpr;this.c.height=230*this.dpr;this.c.style.width=r.width+'px';this.c.style.height='230px'};Plotter.prototype._doDraw=function(){if(!this.running)return;var ctx=this.ctx,w=this.c.width/this.dpr,h=this.c.height/this.dpr;ctx.save();ctx.setTransform(this.dpr,0,0,this.dpr,0,0);ctx.fillStyle='#060610';ctx.fillRect(0,0,w,h);this._grid(ctx,w,h);if(this.compiled){ctx.strokeStyle='rgba(253,121,168,0.15)';ctx.lineWidth=8;ctx.lineJoin='round';ctx.lineCap='round';this._trace(ctx,w,h);ctx.stroke();ctx.strokeStyle='#fd79a8';ctx.lineWidth=2.5;this._trace(ctx,w,h);ctx.stroke()}if(this.mouse)this._cross(ctx,w,h);ctx.font='10px monospace';ctx.fillStyle='#444';ctx.textAlign='left';ctx.fillText('f(x) = '+this.exprStr,6,12);ctx.restore()};Plotter.prototype._grid=function(ctx,w,h){var step=1;if(this.sx<15)step=5;if(this.sx<6)step=10;if(this.sx<2)step=50;if(this.sx>120)step=0.5;if(this.sx>300)step=0.25;var tl=this.s2w(0,0),br=this.s2w(w,h);var x0=Math.floor(tl.x/step)*step,x1=Math.ceil(br.x/step)*step;var y0=Math.floor(br.y/step)*step,y1=Math.ceil(tl.y/step)*step;ctx.strokeStyle='#10102a';ctx.lineWidth=0.5;ctx.beginPath();for(var x=x0;x<=x1;x+=step){var p=this.w2s(x,0);ctx.moveTo(p.x,0);ctx.lineTo(p.x,h)}for(var y=y0;y<=y1;y+=step){var p2=this.w2s(0,y);ctx.moveTo(0,p2.y);ctx.lineTo(w,p2.y)}ctx.stroke();var o=this.w2s(0,0);ctx.strokeStyle='#3a3a5a';ctx.lineWidth=1;ctx.beginPath();if(o.x>=0&&o.x<=w){ctx.moveTo(o.x,0);ctx.lineTo(o.x,h)}if(o.y>=0&&o.y<=h){ctx.moveTo(0,o.y);ctx.lineTo(w,o.y)}ctx.stroke();ctx.fillStyle='#444';ctx.font='9px monospace';var ly=Math.min(Math.max(o.y+13,13),h-3);ctx.textAlign='center';for(var x2=x0;x2<=x1;x2+=step){if(Math.abs(x2)<step*0.01)continue;var p3=this.w2s(x2,0);if(p3.x>22&&p3.x<w-8)ctx.fillText(+x2.toFixed(6),p3.x,ly)}var lx=Math.min(Math.max(o.x-5,28),w-4);ctx.textAlign='right';for(var y2=y0;y2<=y1;y2+=step){if(Math.abs(y2)<step*0.01)continue;var p4=this.w2s(0,y2);if(p4.y>8&&p4.y<h-8)ctx.fillText(+y2.toFixed(6),lx,p4.y+3)}};/* Reduced samples: 250 max instead of 500+ to prevent freeze */Plotter.prototype._trace=function(ctx,w,h){ctx.beginPath();var moved=false,prevY=null;var n=Math.max(Math.floor(w*0.8),200);for(var i=0;i<=n;i++){var sx=(i/n)*w;var wx=this.s2w(sx,0).x;try{var wy=parseFloat(this.compiled.evaluate({x:wx}).text());if(isNaN(wy)||!isFinite(wy)){moved=false;prevY=null;continue}if(prevY!==null&&Math.abs(wy-prevY)>100/Math.max(this.sy,0.01))moved=false;var sp=this.w2s(wx,wy);if(!moved){ctx.moveTo(sp.x,sp.y);moved=true}else ctx.lineTo(sp.x,sp.y);prevY=wy}catch(e){moved=false;prevY=null}}};Plotter.prototype._cross=function(ctx,w,h){var mx=this.mouse.x,my=this.mouse.y;ctx.strokeStyle='rgba(0,255,170,0.18)';ctx.lineWidth=0.5;ctx.setLineDash([4,4]);ctx.beginPath();ctx.moveTo(mx,0);ctx.lineTo(mx,h);ctx.moveTo(0,my);ctx.lineTo(w,my);ctx.stroke();ctx.setLineDash([]);var wp=this.s2w(mx,my);var yv=null;if(this.compiled)try{yv=parseFloat(this.compiled.evaluate({x:wp.x}).text())}catch(e){}var lbl='('+wp.x.toFixed(3)+', '+(yv!==null&&isFinite(yv)?yv.toFixed(3):'?')+')';ctx.font='10px monospace';var tw=ctx.measureText(lbl).width;var bx=Math.min(mx+10,w-tw-12),by=Math.max(my-22,3);ctx.fillStyle='rgba(0,0,0,0.8)';ctx.fillRect(bx-3,by-1,tw+6,16);ctx.fillStyle='#00ffaa';ctx.textAlign='left';ctx.fillText(lbl,bx,by+10);if(yv!==null&&isFinite(yv))resultEl.innerText='f('+wp.x.toFixed(4)+') = '+yv.toFixed(6)};Plotter.prototype.plot=function(expr){var e=expr;if(e.indexOf('=')!==-1&&e.indexOf(',')===-1){var p=e.split('=');if(p.length===2)e='('+p[0]+')-('+p[1]+')'}if(e.indexOf(',')!==-1)e=e.split(',')[0].trim();this.exprStr=e;try{this.compiled=nerdamer(e);this.compiled.evaluate({x:1})}catch(err){resultEl.innerText='Plot Error: '+err.message;addStep('Plot Error',err.message);return}this.resize();this.running=true;this._draw();resultEl.innerText='Drag=pan \u00B7 Scroll=zoom \u00B7 DblClick=reset'};Plotter.prototype.stop=function(){this.running=false;if(this._raf){cancelAnimationFrame(this._raf);this._raf=null}};
/* ===== PRINT ===== */function getPrintZone(){var z=document.getElementById('solv-print-zone');if(!z){z=document.createElement('div');z.id='solv-print-zone';z.style.display='none';document.body.appendChild(z)}return z}function buildItemHTML(h){return '<div class="sp-item"><div class="sp-label">Expression</div><div class="sp-expr">'+h.expr+'</div><div class="sp-label">Result</div><div class="sp-res">'+h.res+'</div><div class="sp-time">'+h.time+'</div></div>'}function buildGraphHTML(){if(!plotter||!plotter.running||!plotter.compiled)return '';var src='';try{src=canvas.toDataURL('image/png')}catch(e){return ''}if(!src)return '';return '<div class="sp-graph"><div class="sp-graph-title">Graph: f(x) = '+plotter.exprStr+'</div><img src="'+src+'" alt="Graph"></div>'}function doPrint(html){var zone=getPrintZone();zone.innerHTML='<div class="sp-header">SCIENTIFIC SOLVER V18.2</div>'+html;zone.style.display='block';setTimeout(function(){window.print();setTimeout(function(){zone.style.display='none';zone.innerHTML=''},500)},100)}window.solvPrintItem=function(idx){var h=history[idx];if(!h)return;doPrint(buildItemHTML(h)+buildGraphHTML())};window.solvPrintScreen=function(){menuEl.classList.remove('show');var raw=input.value.trim();var html='';if(raw)html+=buildItemHTML({expr:raw,res:resultEl.innerText||'(empty)',time:new Date().toLocaleTimeString()});if(stepsBox.style.display==='block'&&stepsBox.innerHTML)html+='<div class="sp-item"><div class="sp-label">Steps</div><div class="sp-expr" style="white-space:pre-wrap">'+stepsBox.innerText+'</div></div>';html+=buildGraphHTML();if(!html)html='<div class="sp-item"><div class="sp-expr">Nothing to print</div></div>';doPrint(html)};window.solvPrintAllHist=function(){menuEl.classList.remove('show');if(!history.length){toast('No history');return}var html='';for(var i=0;i<history.length;i++)html+=buildItemHTML(history[i]);html+=buildGraphHTML();doPrint(html)};
/* ===== THEME ===== */var defaultTheme={'--c-num':'#1a1a2a','--c-num-fg':'#dddddd','--c-op':'#1e1e1e','--c-op-fg':'#aaaaaa','--c-fn':'#14142a','--c-fn-fg':'#a29bfe','--c-math-fg':'#81ecec','--c-cmd':'#1a1a2a','--c-cmd-fg':'#777777','--c-eq':'#005f8a','--c-eq-fg':'#74b9ff','--c-solve':'#005a00','--c-solve-fg':'#55efc4','--c-clr':'#5a0000','--c-clr-fg':'#ff6b6b','--c-plot':'#2a0030','--c-plot-fg':'#fd79a8','--c-mem':'#4a4a2d','--c-mem-fg':'#ffffaa'};var currentTheme={};function loadTheme(){try{var saved=localStorage.getItem('solvTheme');currentTheme=saved?JSON.parse(saved):JSON.parse(JSON.stringify(defaultTheme))}catch(e){currentTheme=JSON.parse(JSON.stringify(defaultTheme))}applyTheme()}function applyTheme(){var root=document.getElementById('solver-root');for(var key in currentTheme){root.style.setProperty(key,currentTheme[key]);var inp=document.getElementById('t-'+key.replace('--c-',''));if(inp)inp.value=currentTheme[key]}}window.solvSetTheme=function(v,val){currentTheme[v]=val;try{localStorage.setItem('solvTheme',JSON.stringify(currentTheme))}catch(e){}document.getElementById('solver-root').style.setProperty(v,val)};window.solvResetTheme=function(){currentTheme=JSON.parse(JSON.stringify(defaultTheme));try{localStorage.setItem('solvTheme',JSON.stringify(currentTheme))}catch(e){}applyTheme();toast('Theme Reset')};
/* ===== GLOBAL HANDLERS ===== */window.solvIns=function(l){ins(l)};window.solvDel=function(){input.executeCommand(['deleteBackward']);input.focus()};window.solvClear=function(){input.setValue('');resultEl.innerText='';clearExtras();input.focus()};window.solvInsAns=function(){if(lastAns!==null)ins(String(lastAns));else toast('No previous answer')};window.solvCalc=function(){var raw=input.value.trim();if(!raw)return;try{var res=nerdamer(raw).evaluate().text();var num=parseFloat(res);if(!isNaN(num)){lastAns=num;resultEl.innerText='= '+fmtNum(num)}else resultEl.innerText='= '+res;flash();addHistory(raw,resultEl.innerText)}catch(e){resultEl.innerText='Math Error'}};window.solvMemAdd=function(){var v=evalNum(input.value);if(!isNaN(v)){memory+=v;resultEl.innerText='M+: '+fmtNum(memory);updMemLed()}};window.solvMemSub=function(){var v=evalNum(input.value);if(!isNaN(v)){memory-=v;resultEl.innerText='M\u2212: '+fmtNum(memory);updMemLed()}};window.solvMemRecall=function(){ins(String(memory));resultEl.innerText='MR: '+fmtNum(memory)};window.solvDeriv=function(){clearExtras();var r=input.value;if(!r)return;try{var d=nerdamer('diff('+r+', x)'),t=d.toTeX();input.setValue(t);addStep("f'(x)",t);resultEl.innerText="f'(x)";flash()}catch(e){resultEl.innerText='Error'}};window.solvPart=function(v){clearExtras();var r=input.value;if(!r)return;try{var d=nerdamer('diff('+r+', '+v+')'),t=d.toTeX();input.setValue(t);addStep('\u2202/\u2202'+v,t);resultEl.innerText='\u2202/\u2202'+v;flash()}catch(e){resultEl.innerText='Error'}};window.solvInteg=function(){clearExtras();var r=input.value;if(!r)return;try{var ig=nerdamer('integrate('+r+', x)'),t=ig.toTeX();input.setValue(t+' + C');addStep('\u222B f(x)dx',t+' + C');resultEl.innerText='Integral';flash()}catch(e){resultEl.innerText='Error'}};window.solvSimp=function(){clearExtras();var r=input.value;if(!r)return;try{var s=nerdamer('simplify('+r+')'),t=s.toTeX();input.setValue(t);addStep('Simplify',t);resultEl.innerText='Simplified';flash()}catch(e){resultEl.innerText='Error'}};window.solvFact=function(){clearExtras();var r=input.value;if(!r)return;try{var f=nerdamer('factor('+r+')'),t=f.toTeX();input.setValue(t);addStep('Factor',t);resultEl.innerText='Factored';flash()}catch(e){resultEl.innerText='Error'}};window.solvExpd=function(){clearExtras();var r=input.value;if(!r)return;try{var ex=nerdamer('expand('+r+')'),t=ex.toTeX();input.setValue(t);addStep('Expand',t);resultEl.innerText='Expanded';flash()}catch(e){resultEl.innerText='Error'}};window.solvSolve=function(){clearExtras();var raw=input.value.trim();if(!raw)return;resultEl.innerText='Solving...';addStep('Input',raw);try{var exp=raw;if(exp.indexOf(',')!==-1&&exp.indexOf('=')!==-1){var eqs=exp.split(',').map(function(e){var p=e.split('=');return p.length===2?p[0]+'-('+p[1]+')':e});var sol=nerdamer.solveEquations(eqs).toString();addStep('System',sol);resultEl.innerText=sol;flash();addHistory(raw,sol);return}if(exp.indexOf('=')!==-1){var p=exp.split('=');if(p.length===2)exp=p[0]+'-('+p[1]+')'}var v=exp.indexOf('x')!==-1?'x':exp.indexOf('y')!==-1?'y':exp.indexOf('z')!==-1?'z':null;if(!v){addStep('Error','No variable');resultEl.innerText='No variable';return}var sol2=nerdamer.solve(exp,v).toString();if(sol2==='[]'){addStep('Result','No Solution');resultEl.innerText='No solution'}else{addStep('Solution for '+v,sol2);resultEl.innerText=sol2;flash()}addHistory(raw,resultEl.innerText)}catch(e){addStep('Error',e.message);resultEl.innerText='Error'}};window.solvPlot=function(){var raw=input.value.trim();if(!raw)return;clearExtras();canvas.style.display='block';if(!plotter)plotter=new Plotter(canvas);plotter.plot(raw);addHistory('PLOT: '+raw,'plotted')};window.solvLoadExpr=function(e){input.setValue(e);clearExtras();resultEl.innerText='Loaded \u2014 press SOLVE or =';input.focus();toast('Loaded')};window.solvLoadPlot=function(e){input.setValue(e);clearExtras();canvas.style.display='block';if(!plotter)plotter=new Plotter(canvas);plotter.plot(e);toast('Plotting: '+e)};window.solvMenu=function(){menuEl.classList.toggle('show')};window.solvTax=function(r){var v=evalNum(input.value);if(!isNaN(v)){input.setValue(String(v*(1+r/100)));resultEl.innerText='+'+r+'%'}else ins('*(1+'+r+'/100)')};window.solvRTax=function(r){var v=evalNum(input.value);if(!isNaN(v)){input.setValue(String(v/(1+r/100)));resultEl.innerText='-'+r+'%'}else ins('/(1+'+r+'/100)')};window.solvFmt=function(){var m=['auto','fixed','sci'],l=['Auto','Fixed','Scientific'];var i=(m.indexOf(numFmt)+1)%3;numFmt=m[i];$('solvFmtLbl').innerText=l[i];toast('Format: '+l[i])};window.solvCopy=function(){var t=resultEl.innerText;if(!t){toast('Nothing to copy');return}navigator.clipboard.writeText(t).then(function(){toast('Copied!')}).catch(function(){toast('Failed')})};window.solvClearHist=function(){history=[];renderHist();toast('Cleared')};
window.solvDebug=function(){var el=$('solvDbgContent'),h='';function dr(l,v,c){return'<div class="dbg-row-d"><span class="dbg-label">'+l+'</span><span class="dbg-val '+(c||'')+'">'+v+'</span></div>'}h+='<div class="dbg-section"><div class="dbg-title">L1: ENVIRONMENT</div>';var ua=navigator.userAgent;var br=ua.indexOf('Firefox')!==-1?'Firefox':ua.indexOf('Edg')!==-1?'Edge':ua.indexOf('Chrome')!==-1?'Chrome':ua.indexOf('Safari')!==-1?'Safari':'Unknown';h+=dr('Browser',br,'ok');h+=dr('Screen',innerWidth+'\u00D7'+innerHeight,'ok');h+=dr('DPR',(devicePixelRatio||1).toFixed(2),'ok');h+='</div>';h+='<div class="dbg-section"><div class="dbg-title">L2: LIBRARIES</div>';[['MathLive',typeof MathLive!=='undefined'],['Nerdamer',typeof nerdamer!=='undefined'],['Solve',typeof nerdamer!=='undefined'&&typeof nerdamer.solve==='function'],['Calculus',typeof nerdamer!=='undefined'&&typeof nerdamer.integrate==='function'],['MathJax',typeof MathJax!=='undefined'],['html2canvas',typeof html2canvas!=='undefined'],['Plotter',plotter!==null]].forEach(function(a){h+=dr(a[0],a[1]?'OK':'Lazy/No',a[1]?'ok':'warn')});h+='</div>';h+='<div class="dbg-section"><div class="dbg-title">L3: INPUT</div>';var rv=input.value;h+=dr('Value',rv?rv:'(empty)',rv?'ok':'warn');try{input.getValue();h+=dr('getValue','OK','ok')}catch(e){h+=dr('getValue','ERR','err')}h+='</div>';h+='<div class="dbg-section"><div class="dbg-title">L4: EVAL</div>';if(!rv){h+=dr('Status','No input','warn')}else{try{var p=nerdamer(rv);h+=dr('Parse','OK','ok');try{h+=dr('Text',p.text().slice(0,35),'ok')}catch(e){h+=dr('Text','ERR','err')}try{h+=dr('LaTeX',p.toTeX().slice(0,35),'ok')}catch(e){h+=dr('LaTeX','ERR','err')}try{h+=dr('Eval',p.evaluate().text().slice(0,30),'ok')}catch(e){h+=dr('Eval','ERR','err')}}catch(e){h+=dr('Parse','ERR','err')}}h+='</div>';h+='<div class="dbg-section"><div class="dbg-title">L5: PLOT</div>';h+=dr('Instance',plotter?'Yes':'No',plotter?'ok':'warn');if(plotter&&plotter.compiled){h+=dr('Expr',plotter.exprStr,'ok');var ok=0;[-10,-1,0,1,10].forEach(function(x){try{if(isFinite(parseFloat(plotter.compiled.evaluate({x:x}).text())))ok++}catch(e){}});h+=dr('Samples','OK:'+ok+'/5',ok===5?'ok':'warn')}else h+=dr('Status','Idle','warn');h+='</div>';h+='<div class="dbg-section"><div class="dbg-title">L6: STATE</div>';h+=dr('Memory',fmtNum(memory),'ok');h+=dr('Last Ans',lastAns!==null?fmtNum(lastAns):'None','ok');h+=dr('History',history.length+' items','ok');h+=dr('Load Errors',loadErrors,loadErrors?'err':'ok');h+=dr('Theme',localStorage.getItem('solvTheme')?'Custom':'Default','ok');h+='</div>';el.innerHTML=h};
window.solvReport=function(){menuEl.classList.remove('show');var raw=input.value.trim();if(!raw)return;clearExtras();try{var pt=nerdamer(raw).toTeX(),st='';var isEq=raw.indexOf('=')!==-1||raw.indexOf(',')!==-1;if(raw.indexOf(',')!==-1&&raw.indexOf('=')!==-1){try{var eqs=raw.split(',').map(function(e){var p=e.split('=');return p.length===2?p[0]+'-('+p[1]+')':e});st=nerdamer.solveEquations(eqs).toString().replace(/^\[/,'').replace(/\]$/,'').replace(/,/g,', ')}catch(e){st='\\text{See result}'}}else if(isEq){try{var v=raw.indexOf('x')!==-1?'x':raw.indexOf('y')!==-1?'y':raw.indexOf('z')!==-1?'z':null;var sol=nerdamer.solve(raw,v);try{st=sol.toTeX().replace(/^\[/,'').replace(/\]$/,'')}catch(e){st=sol.toString()}}catch(e){st='\\text{Cannot solve}'}}else{try{st=nerdamer(raw).evaluate().text()}catch(e){st='\\text{Error}'}}if(!st)st='\\text{No solution}';mathView.style.display='flex';mathView.innerHTML='<div class="wmark">V18.2</div><div class="rpt-label">Problem</div><div>$$'+pt+'$$</div><div class="rpt-label" style="margin-top:6px">Solution</div><div>$$'+st+'$$</div>';if(!mjLoaded){resultEl.innerText='Loading MathJax...';window.MathJax={tex:{inlineMath:[['$','$']]},svg:{fontCache:'global'},startup:{typeset:false}};var s=document.createElement('script');s.src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js';s.onload=function(){mjLoaded=true;MathJax.typesetPromise([mathView]);resultEl.innerText='Report ready';flash()};document.head.appendChild(s);return}MathJax.typesetPromise([mathView]);resultEl.innerText='Report ready';flash()}catch(e){resultEl.innerText='Report Error'}};window.solvExport=function(){menuEl.classList.remove('show');if(mathView.style.display==='none'||!mathView.innerHTML.trim()){toast('Generate Report first');return}resultEl.innerText='Exporting...';if(!h2cLoaded){var s=document.createElement('script');s.src='https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js';s.onload=function(){h2cLoaded=true;doExp()};document.head.appendChild(s);return}doExp();function doExp(){html2canvas(mathView,{backgroundColor:'#fff',scale:2}).then(function(c){var a=document.createElement('a');a.download='math-v18.png';a.href=c.toDataURL('image/png');a.click();resultEl.innerText='Exported!';toast('Saved')}).catch(function(){resultEl.innerText='Export failed'})}};
/* ===== TABS ===== */var lTabs=document.querySelectorAll('#solver-root .tab');for(var i=0;i<lTabs.length;i++){lTabs[i].addEventListener('click',function(){var tabs=document.querySelectorAll('#solver-root .tab');var contents=document.querySelectorAll('#solver-root .tab-content');for(var j=0;j<tabs.length;j++){tabs[j].classList.remove('on');contents[j].classList.remove('on')}this.classList.add('on');document.getElementById('tab-'+this.getAttribute('data-tab')).classList.add('on');input.focus()})}var rTabs=document.querySelectorAll('#solver-root .r-tab');for(var i=0;i<rTabs.length;i++){rTabs[i].addEventListener('click',function(){var tabs=document.querySelectorAll('#solver-root .r-tab');var contents=document.querySelectorAll('#solver-root .r-tab-content');for(var j=0;j<tabs.length;j++){tabs[j].classList.remove('on');contents[j].classList.remove('on')}this.classList.add('on');document.getElementById('rtab-'+this.getAttribute('data-rtab')).classList.add('on');histFoot.style.display=this.getAttribute('data-rtab')==='history'&&history.length>0?'block':'none';if(this.getAttribute('data-rtab')==='debug')window.solvDebug()})}document.addEventListener('click',function(e){if(!e.target.closest('#solvMenuEl')&&!e.target.closest('[onclick*="solvMenu"]'))menuEl.classList.remove('show')});document.addEventListener('keydown',function(e){if(e.key==='Enter'&&!e.shiftKey){e.preventDefault();window.solvCalc()}if(e.key==='Escape')window.solvClear()});window.addEventListener('resize',function(){if(plotter&&plotter.running){plotter.resize();plotter._draw()}});
loadTheme();input.focus();diagLine('App initialized successfully','diag-ok');}})();</script></div>
calc
5:39 م
