Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
WalkthroughAdds IP→network lookup using a local MaxMind MMDB and wires it through tooling, server and UI: the MMDB file is git-ignored; Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 2 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/assets/less/pages/globalping.less`:
- Around line 906-917: The logo attribution selector &_logo-dev-link uses
font-size: 10.5px and color: `#79849a` which fails contrast — increase readability
by raising the font-size (e.g., to ~12–13px), use a darker color with better
contrast (replace `#79849a` with a higher-contrast hex such as `#475569` or
similar), and optionally increase font-weight (e.g., font-weight: 500) and keep
the existing hover color behavior in the &_logo-dev-link rule so the link meets
accessibility contrast requirements while preserving the hover change.
In `@src/views/components/results-raw-output.html`:
- Around line 201-210: The early return when http.getDomainFromIP(ipAddr) yields
no domain causes no cache entry to be written so subsequent observers re-query
forever; instead, always write a cache entry into the networkDomainNamesByIp map
(store a sentinel like null or empty string) for the ipAddr even when res.domain
is falsy, and keep pendingDomainLookups.delete(ipAddr) in finally() as-is;
update the logic around getDomainFromIP/ipAddr handling so
networkDomainNamesByIp is updated with either res.domain or a cached-empty value
to prevent infinite retries.
In `@src/views/pages/_index.html`:
- Around line 786-788: The attribution link is shown for any
rawOutputMode/testReqParams.id but should only appear for HTTP results and must
avoid referrer leakage; update the conditional around the link (currently using
rawOutputMode and testReqParams.id) to also check the HTTP result indicator
(e.g., testReqParams.type === 'http' or testReqParams.isHttp as used in your
codebase) so it only renders for HTTP measurements, and change the anchor's rel
attribute to include "noreferrer" (e.g., rel="noopener noreferrer") while
keeping target="_blank".
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 5b92481a-0971-459d-93d9-f3c0c6b142d5
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (11)
.gitignorebin/fetch-data.jspackage.jsonsrc/assets/js/utils/http.jssrc/assets/less/components/results-raw-output.lesssrc/assets/less/pages/globalping.lesssrc/lib/ip-to-domain/index.jssrc/routes/index.jssrc/views/components/results-raw-output.htmlsrc/views/components/tls-details.htmlsrc/views/pages/_index.html
|
Show the CDN name on hover please. I would also show a pill with the success/error message per test. The green side icon is too invisible. |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/views/components/results-raw-output.html`:
- Around line 212-216: getNetworkDomainName() and getNetworkName() assume cache
entries exist and dereference .domain/.name, but networkDomainNamesByIp can be
null (set in the catch path and handleLogoLoadError()), causing template errors;
update these functions (and any template helpers reading networkDomainNamesByIp)
to guard the cache entry before accessing properties—e.g., check that
this.get('networkDomainNamesByIp')[ipAddr] is an object and return a safe
fallback (empty string or 'Unknown') when null/undefined, and ensure
handleLogoLoadError()/the catch path still store a sentinel but that callers
handle it safely.
- Around line 45-55: The template currently renders and fetches logos based only
on ipAddr (via getNetworkDomainName/getNetworkName) causing non-HTTP tests to
show logos; update the template and helpers to first check the test type and use
HTTP response headers as the primary signal: gate both the image fetch and
rendering on testReqParams.type === 'http' (use `@this.testReqParams.type` or
equivalent) and replace or augment calls to getNetworkDomainName/getNetworkName
with a new or extended helper that inspects the HTTP response headers on
statsPerTarget[activeTargetIdx] (e.g., httpResponseHeaders) to derive the
domain/network; keep handleLogoLoadError for failures but ensure it receives the
same http-scoped identifier; apply the same change to the other block noted
(lines ~184-221) so only HTTP results trigger logo logic.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 8adae827-7391-49ff-9067-a6ad5c576d4f
📒 Files selected for processing (5)
src/assets/js/utils/http.jssrc/lib/ip-to-network/index.jssrc/routes/index.jssrc/views/components/results-raw-output.htmlsrc/views/pages/_index.html
🚧 Files skipped from review as they are similar to previous changes (2)
- src/assets/js/utils/http.js
- src/routes/index.js
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/views/components/results-raw-output.html`:
- Around line 184-235: The showingNetworkLogos boolean is only set during fresh
lookup in populateNetworkDomains, causing stale/incorrect state; update
populateNetworkDomains to recompute showingNetworkLogos each observer pass by
scanning preparedTestResults for any result at activeTargetIdx whose ipAddr maps
to a cached non-null network with a domain (use networkDomainNamesByIp and
preparedTestResults/activeTargetIdx), and call this.set('showingNetworkLogos',
hasAnyLogo) instead of only setting on lookup success; also call the same
recompute after handleLogoLoadError updates networkDomainNamesByIp so the flag
reflects the current cache and selected target (refer to populateNetworkDomains,
getNetworkDomainName/getNetworkName for how network entries look, and
handleLogoLoadError where you should trigger the recompute).
- Around line 203-220: The code is negative-caching all rejections from
http.getNetworkFromIP (stored into networkDomainNamesByIp as null), which
prevents retries; change the .catch handler used with http.getNetworkFromIP so
it only writes a null cache entry for terminal misses (e.g., HTTP 404), but for
transient failures (e.g., 503, network errors) do not update
networkDomainNamesByIp so retries remain possible; keep the existing
pendingDomainLookups.delete(ipAddr) in the .finally block and inspect the error
object (e.g., err.status or err.response.status) inside the catch to decide
whether to cache null.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 551b0aa6-d3e9-414c-8794-62b7a8c899e5
📒 Files selected for processing (2)
src/views/components/results-raw-output.htmlsrc/views/pages/_index.html
|
@jimaek that seems to be the case across the entire website, creating a new issue |
There was a problem hiding this comment.
♻️ Duplicate comments (1)
src/assets/less/pages/globalping.less (1)
910-921:⚠️ Potential issue | 🟠 MajorIncrease attribution link readability and keyboard-visible state.
On Line 914 and Line 915,
10.5px+#79849ais too faint for small text, and Line 918 only styles hover. Add a stronger base style and:focus-visibleparity.Suggested patch
&_logo-dev-link { position: absolute; bottom: -21px; right: 34px; - font-size: 10.5px; - color: `#79849a`; + font-size: 12px; + font-weight: 500; + color: `#4f5b70`; transition: color 100ms ease-in-out; - &:hover { + &:hover, + &:focus-visible { color: `#17233a`; } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/assets/less/pages/globalping.less` around lines 910 - 921, The attribution link selector &_logo-dev-link uses a small 10.5px size and faint color `#79849a` and only defines a :hover state; update &_logo-dev-link to increase readability by raising font-size (e.g., to 12px or 13px) and use a higher-contrast base color (e.g., `#566074` or `#4a5a6a`), and add a :focus-visible rule matching the &:hover styling so keyboard users get the same visible state (ensure any focus-visible also includes an accessible outline or underline for contrast). Target the &_logo-dev-link block and its &:hover/:focus-visible states to apply these changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@src/assets/less/pages/globalping.less`:
- Around line 910-921: The attribution link selector &_logo-dev-link uses a
small 10.5px size and faint color `#79849a` and only defines a :hover state;
update &_logo-dev-link to increase readability by raising font-size (e.g., to
12px or 13px) and use a higher-contrast base color (e.g., `#566074` or `#4a5a6a`),
and add a :focus-visible rule matching the &:hover styling so keyboard users get
the same visible state (ensure any focus-visible also includes an accessible
outline or underline for contrast). Target the &_logo-dev-link block and its
&:hover/:focus-visible states to apply these changes.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 58dcce77-4773-4657-8e65-a856e8210bc4
📒 Files selected for processing (2)
src/assets/less/pages/globalping.lesssrc/views/pages/_index.html
🚧 Files skipped from review as they are similar to previous changes (1)
- src/views/pages/_index.html
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
src/lib/ip-to-network/index.js (1)
10-12: Log initialization error details instead of a generic message.Line 10-Line 11 hides the actual failure cause (missing file vs invalid MMDB vs permissions), which makes production diagnosis harder.
Proposed fix
-} catch { - console.error('IP to domain MMDB data not downloaded.'); +} catch (err) { + console.error('Failed to initialize IP to network MMDB reader:', err); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/lib/ip-to-network/index.js` around lines 10 - 12, The catch block currently swallows the error; change the bare catch to capture the exception (e.g., catch (err)) and log the actual error details instead of only the generic message — update the console.error call in the module's catch block to include the error object or err.stack (for example: console.error('IP to domain MMDB data not downloaded:', err || err.stack)) so you can distinguish missing file, invalid MMDB, or permission issues.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@bin/fetch-data.js`:
- Around line 53-63: The downloadMmdb function currently streams directly to
outputPath and always re-downloads, which can leave partial files and is
non-idempotent; change it to first check if outputPath already exists and skip
download if present, otherwise stream into a temporary file in the same
directory (e.g., outputPath + '.tmp' or with a UUID), await pipeline to that
temp file, then atomically rename the temp file to outputPath using fs.rename
(or fs.promises.rename); ensure any temp file is removed on error so interrupted
downloads don't leave corrupt files and use the same outputPath and download URL
variables in this flow to locate where to apply the change.
In `@src/index.js`:
- Around line 312-314: The current catch block only logs render errors in
development (app.env === 'development') which hides production template/render
failures; update the catch around your render logic to still suppress known
ENOENT /.well-known cases via shouldLogRenderError(ctx, e) but otherwise log the
error in production too (e.g., call console.error or your app logger) when
shouldLogRenderError returns true or when the error is not the suppressed case;
keep the existing condition for suppression but move the logging outside the
strict development-only check so that errors caught by shouldLogRenderError(ctx,
e) are emitted in production as well as development.
---
Nitpick comments:
In `@src/lib/ip-to-network/index.js`:
- Around line 10-12: The catch block currently swallows the error; change the
bare catch to capture the exception (e.g., catch (err)) and log the actual error
details instead of only the generic message — update the console.error call in
the module's catch block to include the error object or err.stack (for example:
console.error('IP to domain MMDB data not downloaded:', err || err.stack)) so
you can distinguish missing file, invalid MMDB, or permission issues.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 82a2d1ec-3374-4c19-9d87-8138156d1f2f
📒 Files selected for processing (4)
.gitignorebin/fetch-data.jssrc/index.jssrc/lib/ip-to-network/index.js
✅ Files skipped from review due to trivial changes (1)
- .gitignore
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/assets/less/components/results-raw-output.less (1)
37-45:⚠️ Potential issue | 🟡 MinorKeep the divider inset in sync with the new narrow-layout padding.
_inner-wrappernow drops to12pxhorizontal padding below@screen-sm-min, but the separator is still inset by24pxon both sides. That leaves the divider visibly out of alignment with the card content on narrow layouts.💡 Suggested fix
&:not(:nth-last-child(1)) { .c-gp-results-raw-output_list_item_inner-wrapper_bottom-line { position: absolute; bottom: 0; - left: 24px; - width: calc(100% - 24px - 24px); + left: 12px; + width: calc(100% - 24px); height: 1px; background: `#e7e7ee`; + + `@media` (min-width: `@screen-sm-min`) { + left: 24px; + width: calc(100% - 48px); + } } }Also applies to: 49-56
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/assets/less/components/results-raw-output.less` around lines 37 - 45, The divider (.c-gp-results-raw-output_list_item_inner-wrapper_bottom-line) is inset by 24px but the parent inner wrapper's horizontal padding (_inner-wrapper) becomes 12px below `@screen-sm-min`; update the divider's left and width calculations in the same responsive breakpoint so it uses 12px inset (or references the inner-wrapper padding variable) instead of 24px to keep alignment on narrow layouts; apply the same change for the second occurrence (lines 49-56) so both separators track the inner-wrapper padding.
🧹 Nitpick comments (3)
src/routes/index.js (1)
226-226: Extract a shared TTL constant for Lines 226 and 255.The same 7-day expression is duplicated in multiple handlers; a module-level constant avoids drift.
Proposed refactor
const maxmind = require('maxmind'); +const ONE_WEEK_SECONDS = 7 * 24 * 60 * 60; @@ - ctx.maxAge = 7 * 24 * 60 * 60; + ctx.maxAge = ONE_WEEK_SECONDS; @@ - ctx.maxAge = 7 * 24 * 60 * 60; + ctx.maxAge = ONE_WEEK_SECONDS;Also applies to: 255-255
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/routes/index.js` at line 226, Extract the duplicated 7-day TTL expression into a module-level constant (e.g. SEVEN_DAYS_IN_SECONDS or TTL_7_DAYS) and replace the literal expressions used to set ctx.maxAge in the handlers that currently assign 7 * 24 * 60 * 60 (references: the ctx.maxAge assignment near the session/cache handlers and the other handler where the same expression is used). Declare the constant at the top of the module and use it in both places so both handlers use the shared constant.src/assets/less/components/results-raw-output.less (2)
141-145: Respect reduced-motion for the new shimmer.The loading background now animates indefinitely for every in-progress row. Please gate that animation behind
prefers-reduced-motionand keep the static gradient as the fallback.♿ Suggested change
&.in-progress { display: flex; background: linear-gradient(135deg, `#f3f6f6` 25%, `#f0f0f0` 50%, `#f3f6f6` 75%); background-size: 200% 100%; - animation: bg-loading 2s infinite linear; min-height: 36px; border-radius: 8px; + + `@media` (prefers-reduced-motion: no-preference) { + animation: bg-loading 2s infinite linear; + } }Also applies to: 299-307
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/assets/less/components/results-raw-output.less` around lines 141 - 145, The in-progress row currently always animates via the bg-loading keyframes; wrap the animation declaration in a prefers-reduced-motion media query so users who prefer reduced motion see the static gradient fallback. Update the .in-progress rule (and the duplicate .in-progress block later in the file) to keep display/background as-is but move animation: bg-loading ... inside `@media` (prefers-reduced-motion: no-preference) and ensure that outside that media query only the static linear-gradient background is applied; refer to the .in-progress selector and the bg-loading keyframes to locate and change the code.
203-209: The status state is still too subtle here.This change only repositions the 2px side rail, so success/error is still conveyed by the same low-visibility affordance that was already called out in the PR discussion. A header pill/badge would make the state much easier to scan.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/assets/less/components/results-raw-output.less` around lines 203 - 209, The current &_status-line 2px rail is too subtle; replace or supplement it with a visible header badge by introducing a .status-pill element (or pseudo-element) in the results header (e.g., within the component that uses &_status-line) and style it as a rounded pill with padding, readable font-size, and high-contrast colors for different states (e.g., .status-pill--success, .status-pill--error). Update styles to position .status-pill top-left of the header (absolute or flex-aligned), set border-radius, background-color, color, and min-width so the state text is legible, and keep or remove &_status-line as a decorative accent; ensure class names match the component that currently contains &_status-line so markup updates are straightforward.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@patches/gulp-less`+5.0.0.patch:
- Around line 9-11: The patch mutates unsupported source map options in
gulp-less by setting opts.sourceMap when (file.sourceMap || opts.sourcemap) is
present; revert this change so gulp-less does not try to accept sourceMap
options (remove the conditional that sets opts.sourceMap) and instead
document/implement using gulp-sourcemaps around the gulp-less transform (i.e.,
do not touch file.sourceMap, opts.sourcemap or opts.sourceMap in the gulp-less
code; wrap the less stream with gulp-sourcemaps.init()/write() where maps are
needed).
In `@src/assets/less/components/results-raw-output.less`:
- Around line 128-159: The network logo currently participates in the wrapped
flex row (&_metrics) so it flows with the timing pills; to pin it to the far
right, update the &_logo rule inside &_metrics to push it to the end (e.g., add
margin-left: auto) while keeping it as the last child, or alternatively move the
element out of &_metrics into a separate right-aligned container; adjust the
selector &_metrics and the nested &_logo accordingly to implement the chosen
fix.
---
Outside diff comments:
In `@src/assets/less/components/results-raw-output.less`:
- Around line 37-45: The divider
(.c-gp-results-raw-output_list_item_inner-wrapper_bottom-line) is inset by 24px
but the parent inner wrapper's horizontal padding (_inner-wrapper) becomes 12px
below `@screen-sm-min`; update the divider's left and width calculations in the
same responsive breakpoint so it uses 12px inset (or references the
inner-wrapper padding variable) instead of 24px to keep alignment on narrow
layouts; apply the same change for the second occurrence (lines 49-56) so both
separators track the inner-wrapper padding.
---
Nitpick comments:
In `@src/assets/less/components/results-raw-output.less`:
- Around line 141-145: The in-progress row currently always animates via the
bg-loading keyframes; wrap the animation declaration in a prefers-reduced-motion
media query so users who prefer reduced motion see the static gradient fallback.
Update the .in-progress rule (and the duplicate .in-progress block later in the
file) to keep display/background as-is but move animation: bg-loading ... inside
`@media` (prefers-reduced-motion: no-preference) and ensure that outside that
media query only the static linear-gradient background is applied; refer to the
.in-progress selector and the bg-loading keyframes to locate and change the
code.
- Around line 203-209: The current &_status-line 2px rail is too subtle; replace
or supplement it with a visible header badge by introducing a .status-pill
element (or pseudo-element) in the results header (e.g., within the component
that uses &_status-line) and style it as a rounded pill with padding, readable
font-size, and high-contrast colors for different states (e.g.,
.status-pill--success, .status-pill--error). Update styles to position
.status-pill top-left of the header (absolute or flex-aligned), set
border-radius, background-color, color, and min-width so the state text is
legible, and keep or remove &_status-line as a decorative accent; ensure class
names match the component that currently contains &_status-line so markup
updates are straightforward.
In `@src/routes/index.js`:
- Line 226: Extract the duplicated 7-day TTL expression into a module-level
constant (e.g. SEVEN_DAYS_IN_SECONDS or TTL_7_DAYS) and replace the literal
expressions used to set ctx.maxAge in the handlers that currently assign 7 * 24
* 60 * 60 (references: the ctx.maxAge assignment near the session/cache handlers
and the other handler where the same expression is used). Declare the constant
at the top of the module and use it in both places so both handlers use the
shared constant.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 0a683007-8c72-4f56-a76e-8b86b9115cbe
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (5)
gulpfile.jspackage.jsonpatches/gulp-less+5.0.0.patchsrc/assets/less/components/results-raw-output.lesssrc/routes/index.js
✅ Files skipped from review due to trivial changes (1)
- gulpfile.js
🚧 Files skipped from review as they are similar to previous changes (1)
- package.json
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/views/pages/_index.html`:
- Around line 776-778: The Logo.dev attribution is shown whenever rawOutputMode
&& showingNetworkLogos is true, but it can still render when the UI is showing
the error block (measurementErrMsg && !showCreditsErrorBar); update the
Handlebars conditional around the link to also require that we're not in that
error-only state (e.g., add a check like "&& !(measurementErrMsg &&
!showCreditsErrorBar)" or equivalently "&& ( !measurementErrMsg ||
showCreditsErrorBar )") so the attribution only appears when raw output is
rendered with logos visible.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: ef8b6aa8-28c7-4698-8344-e03aa30045cd
📒 Files selected for processing (1)
src/views/pages/_index.html
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/views/components/results-raw-output.html`:
- Around line 31-38: The alt text currently uses {{this.network}} which is the
probe's network and is incorrect for the resolved IP; update the img alt to call
the same helper used in the tooltip so it matches the logo: use
`@this.getNetworkName`(this.statsPerTarget[activeTargetIdx].ipAddr) (the same
pattern used in the tooltip and paired with getNetworkDomainName) and ensure the
change is made on the img element that also uses handleLogoLoadError for error
handling.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 748eb4b8-2934-4f71-8dd9-613b64d38eda
📒 Files selected for processing (2)
src/assets/less/components/results-raw-output.lesssrc/views/components/results-raw-output.html
🚧 Files skipped from review as they are similar to previous changes (1)
- src/assets/less/components/results-raw-output.less

Closes #79